映画鑑賞は割と好きなのだけど、
なかなか映画館にはいけないし、
DVDを借りてもレンタル中に観る時間が取れるとは限らないし、
ということでもっぱらテレビで面白そうな映画をやってたら録画して
時間のある時に観ている。
しかしそうそうテレビ欄をチェックしているわけでもないので、
気づいたら観たかった映画が昨日放映されてて悔しがる、なんてことがよくある。
放映予定の映画をまとめて確認する方法はないのか、と探してみたら
良いページが見つかった。
続きを読む
映画鑑賞は割と好きなのだけど、
なかなか映画館にはいけないし、
DVDを借りてもレンタル中に観る時間が取れるとは限らないし、
ということでもっぱらテレビで面白そうな映画をやってたら録画して
時間のある時に観ている。
しかしそうそうテレビ欄をチェックしているわけでもないので、
気づいたら観たかった映画が昨日放映されてて悔しがる、なんてことがよくある。
放映予定の映画をまとめて確認する方法はないのか、と探してみたら
良いページが見つかった。
続きを読む
毎朝出社時に社員カードで入室し、
入室したのと同じカードで出勤打刻をするのだが、
入って数歩のところにタイムレコーダーが置いてあるにも関わらず、
打刻が漏れることがある。
どうやら、
雨の日に途中で傘を置いたり(傘立てはドアとタイムレコーダーの間にある)
誰かと会って話しながら入室したりすると
ルーチンが壊れて打刻を忘れてしまうことがあるようだ。
どれだけ変化に弱いルーチンなんだ、という話だが、
ともあれ打刻が漏れると手続きが面倒なので、
自動チェックの仕組みを考えた。
続きを読む
どうせ自動化するなら完全自動化したいよね、
ということで今回は作成したGruntスクリプトを
Windowsの起動時や毎日の決まった時間に実行できるように
タスクスケジューラに登録する方法を紹介する。
この記事はGruntを実行する環境が整っていることを前提としているので、
未インストールの方は下記の記事を参考にしていただきたい:
続きを読む
コミュニケーションというのはなかなか難しいもので、
「急いで確認したいから資料ができたら共有フォルダに入れて、すぐ連絡してよ」
と強めに伝えても、
資料はとっくにできてるのに
やれ後で連絡するつもりだっただの、
もうちょっと確認してから連絡するつもりだっただの、
今メール書いてただので、
一本内線をくれるだけで良いのになかなか連絡がもらえないことがある。
そんなストレスフルな行き違いは
「このやろう!」と毎回怒りを爆発させるよりも
ツールを使って解決の仕組みを用意してしまうに限る。
ということで今回は指定したフォルダを監視して、
ファイルが追加されたり更新されたりしたら
自動で通知してくれるスクリプトをつくってみたい。
続きを読む仕事でチーム間のコミュニケーションツールとして使い始めたチャットワークだが、
最近は「いろんなサービスやスクリプトからの通知を集めるツール」としての利用がメインになってきている。
以前記事にした、
「Subversionのコミット情報にメンバーがすぐに気づけるように通知するスクリプト」
を書いたのがきっかけで、
この仕組みを流用すればメールを汚さずにいろんな通知を一元管理できるのでは?
と思いついて色々チャットワークに自動通知するスクリプトを書き始めた。
ただ通知するだけなのだけど、ボットが
「ブログのはてブが増えたよ!」とか
「AmazonにKindle本が追加されたよ!」とか
発言してくれることでチェックの手間が減るのが楽しい。
そんな時に、「IFTTTにMakerチャンネルができた」という話を聞いて、
これを使えば自動通知がさらに捗りそうだ、ということで試してみた、というのが今回の本題だ。
EvernoteやTwitter等様々なアプリやWebサービス(チャンネルと呼ばれる)の更新を監視して、
更新が発生するとをあらかじめ登録しておいたアクションを実行してくれるというサービスで、
これを使えばプログラムを自作しなくても手軽に連携の仕組みが作れるという、
自動化心をくすぐられるサービスだ。
IFTTTは便利なサービスなのだが、以前はチャンネルが用意されていないサービス間の連携がしにくい、という欠点があった。
チャットワークもチャンネルが用意されていない。
それが、Makerチャンネルが使えるようになったことで多少やりやすくなった。
Makerチャンネルは簡単に言うと「他のチャンネルとWebアプリを連携できる」チャンネルだ。
自作のWebアプリをトリガーとしてMakerチャンネル経由で他のチャンネルを呼び出したり、
特定のチャンネルで更新が発生したら指定したURLにリクエストを飛ばすようなことができる。
これを使えば、何かしらのサービスで更新が発生した時に自作のWebアプリを経由してチャットワークにメッセージを保存する、みたいなこともできるわけだ。
試しに、Node.jsで作成したWebアプリ経由で「Date&Timeチャンネルをトリガーに、定時になったらチャットワークに通知するレシピ」を作ってみた。
まずはIFTTTからアクセス可能なWebアプリを用意する。
ここがややハードルの高いところ。
今回は「http://自分のサーバのドメイン:3000/ifttt/notify_workend」というURLを用意し、
POSTリクエストで「time:時間」「message:メッセージテキスト」をJSON形式で渡すとその内容をチャットワークに送れるようにした。
下記はnode.js + Express4のサンプルソース:
(Webアプリでパラメータを受け取れたら環境は問わないので、Apache + PHP環境とかでも可)
REST API Sample For IFTTT Maker Channel.
こういうものを1つ用意しておけば、URLを追加していくだけでいろんなチャンネルと連携できるようになる。
次はITFFF側で用意したURLを呼び出すレシピを作成する。
トリガーとなるチャンネルの選択後、Makerをアクションとして選択して新しいレシピを作成する。
アクションの設定を行って、
作成したWebアプリのURLとパラメータを定義する。
「Content Type」を「application/json」にしておき、BodyでJSONを渡すようにしている。
この内容で登録しておくと、平日の17:30になったら、「Time to leave work」というメッセージが
用意したURLに飛び、そこを経由してチャットルームにメッセージが投稿される。
とりあえず仕組みが作ってみたが、まだまだ活用法は模索中。
また良い通知レシピを思いついたら試してみたい。
実践Node.jsプログラミング Programmer's SELECTION
ある開発プロジェクトで、
非技術系のメンバーにも進捗を知っておいてもらいたいものの、
「お前らSubversion入れろ」とか「リポジトリログを見ろ」といっても見そうになく、
いちいち伝えるのも面倒大変そうだったので、
Subversionにコミットがあったらメッセージ内容がリアルタイムで
チャットワークに流れる仕組みを作ってやった。
チャットワークはチーム間でのやりとりに使っていたので、ここに流してやろうというわけだ。
チャットワークはプレビュー版ながらAPIを公開してくれているので、
API経由でメッセージ投稿を行うスクリプトと、
Subversionのフック機能を組み合わせることで実現することができた。
今回はNode.jsでスクリプトを作成した。
手軽に環境が作れて、速くて、一通りライブラリが揃っているので気に入っている。
スクリプトの内容としては、
コマンドラインからリポジトリパスとリビジョン番号を受け取って、
svnlookコマンドでリビジョンをコミットしたユーザー名、メッセージログを取得して、
メッセージを組み立てて、
チャットワークのAPI経由で投稿している。
Subversionが動いているサーバにnode.js環境をインストールして、このスクリプトを配置する。
svn2chatwork.js
var execSync = require('child_process').execSync; var _ = require('underscore'); var request = require('request'); if (process.argv.length < 4) { return; } var repo = process.argv[2]; var rev = process.argv[3]; var cwApiKey = '<ChatworkのAPIキー>'; var endpointBase = 'https://api.chatwork.com/v1/'; var svnRootPath = '/var/www/svn'; //Subversionのリポジトリルートパス var targetRepos = {}; // このtargetReposにリポジトリパスを追加したら複数のリポジトリに対応可能 targetRepos[svnRootPath + '/<SVNリポジトリパス>'] = {'roomId': '<投稿先ChatworkのルームID>'}; var post2Chatwork = function (roomId, message, callback) { var options = { url: endpointBase + 'rooms/' + roomId + '/messages', headers: { 'X-ChatWorkToken': cwApiKey }, form: { body: message }, json: true }; request.post(options, function (error, response, body) { if (!error && response.statusCode == 200) { callback(body); } }); } if (_.has(targetRepos, repo)) { var repoInfo = targetRepos[repo]; var message = 'New Commit\n'; var result = '' + execSync('svnlook author ' + repo + ' -r ' + rev); message += 'User:' + result; result = '' + execSync('svnlook log ' + repo + ' -r ' + rev); message += result; // 下記のコメントを外すと更新ファイル一覧もメッセージに追加できる(大量にファイルが更新されると結構うざい) // result = '' + execSync('svnlook changed ' + repo + ' -r ' + rev); // message += 'Files Updated:\n'; // message += result; post2Chatwork(repoInfo.roomId, message, function (body) {}); }
Subversionのリポジトリを作成すると、その中にhooksフォルダが作成され、
そこに置いたフックスクリプトを各種タイミングで実行してくれる。
今回はコミット後に上で作成したスクリプトを実行してもらいたいので、
「post-commit」という名前で下記のような内容のファイルを作成する。
作成したスクリプトにパラメータとしてリポジトリパスとリビジョン番号を渡し、nodeコマンドで実行するコマンドを書いてる。
最初のexport文を書かないと、日本語が文字化けしてしまうので注意。
あと、node.jsのバージョンとか、どこにsvn2chatwork.jsを置いたかでパスが変わるので注意。
post-commit
export LANG=ja_JP.UTF-8 REPOS='$1' REV='$2' # <nodeコマンドへのパス> <svn2chatwork.jsへのパス> $REPOS $REV /usr/local/node-v0.12.7/bin/node /home/test/svn2chatwork/svn2chatwork.js $REPOS $REV
編集後、post-commitに実行権限をつけたら以降のコミットがチャットワークに通知されるはず。
ソースを整理したり、リポジトリとルームの関連付けを外部化したりしたものをGitHubに置いている。
よかったら参考にしていただきたい。
今時Subversionなんか使わねーよ!と言われるかもしれないが。
Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)
GMailのフィルタ機能はメールにラベルをつける以外にもいろいろできる。 条件に合うメールを既読にしたり、アーカイブしたり、 今回のようにメールアドレスを指定して転送したり。
正月休みに入るにあたり、重要なメールのみ携帯に 転送されるように設定したら良い具合だったので、 設定方法を記録しておく。
設定画面の「フィルタ設定」を開く。
フィルタ設定画面下部の「フィルタを追加」ボタンクリック。
フィルタ作成ダイアログで条件を指定する。 送信元メールアドレスや含まれるキーワードで条件指定できる。
転送先メールアドレスを指定して転送設定。
色々活用できそう。
ポケット百科 Gmail&Googleドキュメント 知りたいことがズバッとわかる本
日経新聞を読むことが社会人のたしなみと 考えられている会社は多いと思う。 うちもそうなのだけど、ついつい流し読みになってしまって 重要な記事を見逃し、上司と話が合わない、なんてことがよくある。
そこで役に立っているのが、日経新聞電子版の「キーワード管理」機能。 ここに検出したいキーワードを登録しておくと、メールで通知してくれたり、 電子版アプリで強調表示してくれたりする。
自社名とか、自社の業界、関連分野に関するキーワードを登録しておくと、 見逃す心配なくさらーっと読み流せる。