$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

hubotにikachan的な役割を担わせる

最近Hubotの導入をしている。今回はHubotを導入したらikachanというツールの代替も出来たのでそのメモ。

ikachanとは

ikachanとは、HTTPのAPI経由でIRCに対してメッセージを送るように出来るようになるPerl製ツール。ikachanはdaemonとして動き、特定portでLISTENされるので、そこにcurlなどを使ってPOSTすると簡単にIRCにメッセージを送れる。これまで様々な人がIRC botを作って、投稿する部分を実装していたのだけど、ikachanがproxyとしてHTTP APIを提供してくれるので、それを起動しておいてHTTP APIを叩くだけでひとまずメッセージを送る部分のbot実装は作る必要が無くなった。

IRC -> Slackへ

最近IRCからSlackに移行した。それにより、ikachanはIRC投稿のproxyだったため、使えなくなってしまった。もちろんSlackにはIncoming webhookというのが存在し、HTTP APIを使って投稿も出来るのだけど、発行されるtokenをPOSTの情報に含めないといけないため、少し手軽さにかけていた。

そこでHubot導入もしたので、今度はHubotを使ってikachanとほぼ同様のことが出来ないか考えた。

Hubotでikachan的なことをする

実現したいことは「HTTP APIでmessageとchannel情報を送ったら、そこにメッセージを投げてくれる」だけ。もうどうせ他にそういうのあるだろうと思ったので、探してみると案の定同じような実装が存在した。
hubot-scripts/http-post-say.coffee at master · github/hubot-scripts · GitHub

使えるようにする

最近はhubot-scriptsはdeprecatedになっている(https://github.com/github/hubot-scripts/issues/1113)というのと、推奨されているnpmへの移行がされていなさそうだった(?)ということ、実際にhubot-post-sayを利用してみるとちょっとバグってたので、コピーして手直しして自分のHubotのscripts以下に入れるということをした。

diff --git a/src/scripts/http-post-say.coffee b/src/scripts/http-post-say.coffee
index 29ae14a..10ffa96 100644
--- a/src/scripts/http-post-say.coffee
+++ b/src/scripts/http-post-say.coffee
@@ -36,7 +36,7 @@ module.exports = (robot) ->
     envelope.user.type = body.type or 'groupchat'

     if message
-      robot.send user, "#{message}"
+      robot.send envelope, "#{message}"

     res.writeHead 200, {'Content-Type': 'text/plain'}
     res.end 'Thanks\n'

これで手元で/hubot/sayエンドポイントが作成されて、そこにcurlすることで使えるようになった。

実際に使ってみる

まず手元でbin/hubotすることにより、Hubotを立ち上げる。
f:id:shiba_yu36:20141013095630p:plain

続いてcurlで以下のコマンドを叩き、エンドポイントに対して投げてみる。

$ curl -X POST http://localhost:8080/hubot/say -d message=こんにちは -d room='#dev'

f:id:shiba_yu36:20141013095656p:plain

するとHubot側に以下のような文章が表示された。
f:id:shiba_yu36:20141013095709p:plain

使えた。これでmessageとroomを指定してHTTPで叩くだけでHubotがしゃべることが出来るようになった。

注意点

注意点としては、手軽さを重視してtokenなどを入れなくても投稿できるようにしているので、他の人から利用できる場所にエンドポイントを置いてしまうと、悪用されてHubotに投稿される可能性があること。きちんとアクセス制限をかけたり、それが面倒だったらSlackを使う分には素直にIncoming Webhookを利用するのが良さそう。

まとめ

今回はSlackでikachan的なことをするためにHubotを利用してみました。最近のhubot scriptはどこを探せばよいかわからないですが、npmを探せばよいのだろうか、というところが気になりポイントでした。

Asana使ってみた

最近タスク管理ツール何がいいかと思っていろいろ使ってみている。今回はAsanaのメモ。


Manage your team’s work, projects, & tasks online • Asana

良い所

  • Asanaはチーム利用としてはセクション分けしたりコミュニケーションがし易いように思えたので良さそう
  • チーム > プロジェクト > タスクといった階層でプロジェクトを作れるので、特定チームに所属し、その中でプロジェクトが複数走っていて、それらを別で管理したいというときには使えそう
  • タスクじゃなくてセクションもちゃんと区切れて、意外とそれが便利に使える
  • アサインしている人ごと、締切ごと、みたいな感じでいい感じにソートできるのは便利。どういうふうに整理されるとタスク管理しやすいかがよく考えられている
  • サクサク入力できる(イメージ)
  • iOSアプリが良く出来ているように見えた
  • Due Dateの繰り返し設定が結構細かく出来そう

悪いところ

  • 日本語利用していると結構な頻度でバグにぶつかってだいぶ辛い
  • Sunriseとのカレンダー連携が使えそうだったので連携してみたが、何故か同期されなかった -> 出来るって話もあるので、やり方ミスってるだけかも
  • 締切を決めるときに日付でしか決められず、時間の指定はできない
  • Mac用のアプリは無い

感想

自分としては個人のTODO管理に利用しようとしていたので、締切を日付でしか決められないなどといった問題点が致命的になりそうで使うのは諦めた。ちなみに最近はProducteev、Trelloといったツールも使っているが、今のところは

  • チームで利用するなら Trello = Asana > Producteev
  • 個人で利用するなら Producteev >>> Asana > Trello

という感想です。

あとは http://www.sekai-lab.com/times/?p=473が参考になるので読むと良さそう。

その後のTwitter