エウレカ社内のhubotで生き残っている機能3選

こんにちは! エウレカ 田野です。

 

エウレカではみなさんもお使いのSlackで業務しています。

 

数ヶ月前に検証環境・本番環境へのデプロイが完全にChatops化しまして、slackが会話ツールから業務遂行ツールの役割も果たすようになってきました。

 

エウレカでは個人ごとにhubotを保有しているメンバーが多く、お互いに色んな機能を実装しては楽しんで業務をやっています。

 

僕も最近hubotでチームワークに効きそうな機能をいくつか実装しました。

それらの機能を2ヶ月ほど運用して、使われている機能・廃れた機能がでてきたのですが、その使われているほう、つまり生き残っている機能をコードとともにご紹介します。

前提

hubotとは、Githubが開発しているチャットBotです。Slack上にBotユーザーとして参加します。

チャット上に存在し、発言をトリガーにプログラミングした機能を実行することができます。

機能を拡張すれば、redisのストレージをもたせたり、cronで定期的に機能を実行させることもできます。

1) プルリクエストのランダムアサイン機能

実際にGithubまで連携させるとプルリクエストのランダムアサインは構築が大変なのですが、Slackでレビューをメンションするだけであれば単純です。

 

この機能を実装してからチームの反省会などでこんな話題がでてました。

  • 一部の人に集中していたプルリクエストのアサインが分散された
  • 実はプルリクエストをお願いするときに気後れがあったが、Botでとても気楽にお願いできるようになった
  • チーム内で色んな人にプルリクエストを見てもらえるので、機能開発の属人化が解かれた

実際の動作イメージはこんな感じです。本当に単純な機能なのです。

Slackのプルリクエストアサインのイメージ

指名されてからGithub側のアサインは手でやっています。

 

コードはこんな感じになります。

2) 対話式コマンド生成

色んなことを念頭におきながら作業するというのは何かとミスを誘発します。

人間が一度に覚えられるチャンクの数には限界があり、7±2チャンクとされる(この値をマジカルナンバーという)
[チャンクとは](https://kotobank.jp/word/%E3%83%81%E3%83%A3%E3%83%B3%E3%82%AF-178813)

こういう作業は入力を限定的にして、覚える作業をシステムに委ねると楽になります。

そこで一問一答形式に持ち込みます。Slackでユーザー登録直後にSlackBotに聞かれるチュートリアルと同じです。

 

この機能はhubot-conversationというプラグインで簡単に実現できます。

エウレカではデプロイ時にリリースノートを打つためのコマンドが存在します。そのコマンドに必要な多数のコマンドラインパラメータを対話式に入力する用途に利用しています。

今回は単純化したサンプルをつくりました。

curl http://sample.com/api/sample?width=200&height=400&device=android&timezone=Asia/Tokyo

という感じの文字列を対話形式で作ってみましょう。

動かしてみます。

$ ./bin/hubot -n testbot
testbot> testbot teach curl
testbot> URLを教えて下さい [ 例) http://sample.com/api/sample ]
testbot> http://google.com/api/bot_test
testbot> 横幅を教えて下さい [ 数字を入力 ]
testbot> 512
testbot> 縦幅を教えて下さい [ 数字を入力 ]
testbot> 1024
testbot> デバイスを教えて下さい [ "pc", "sp", "ios", "android" いずれかを入力]
testbot> android
testbot> タイムゾーンを教えて下さい [ 1=Asia/Tokyo, 2=America/Chicago 数字を入力]
2
testbot> 結果です
`curl http://google.com/api/bot_test?width=512&height=1024&device=android&timezone=America/Chicago`
入力ミスなども防げたり、誰が操作してもフォーマットが一定になることが魅力です。
3) ブックマークのショートカット
単純なのですが特定の発言に反応してURLをBotに発言させるだけです。



日常会話にでてくる単語「予定表」「ドキュメント一覧」とかに反応して資料のURLを発言させるだけで、チームがよく閲覧している資料がメンバーの目につくようになります。



作業が込み入ってくると色んなレベルのドキュメントが増えてきて、「結局何が大事なん?」という会話になったり(※そもそも資料の定義・整理問題だったりもしますが)、「あの資料どこにあったけ?」みたいな会話も除外できます。



何よりもブックマークを引く作業って、意外と面倒だったりするんですよね。なのでBotにお仕事してもらいます。



他にもサイトに接続した後に毎回メニューをたどっているのも無駄です。

自分にアサインされているプルリクエスト一覧とかその手の最たるものです。



これら2つのサンプルを見ていきましょう。
https://gist.github.com/MakoTano/afe4ecf32dcb5370f2cd2c767409376f
おわりに
おもしろ機能も含めて色んな機能をhubotに入れたのですが、この残っている3機能は本当に役立っています。

サンプルコードをみていただきながら、みなさんの職場のhubotにも導入してみてください!
番外編)hubotオススメの環境
hubotは常駐プログラムなので、サーバーに置く必要があります。

以前はherokuの無料枠が定石でしたが、30分無動作でのスリープ、1日6時間のスリープ時間を入れるなど、無料枠の制約があります



最近の個人的オススメばIBM Bluemixです。

1インスタンスで小さめのサーバースペックであれば、herokuとそんなに手間が変わらず、かつ無料枠で24時間の連続稼働ができました。



Bluemixの無料枠について。
- インスタンス: 1
- メモリ: 512MB
- HTTPリクエスト : 300回/sec 未満
hubotひとつを稼働させるには十分なスペックです。

無料枠に対して利用量のキャッピングがないので、カードを登録そのまま従量課金になってしまいます。

定期的にBluemixの料金ページを都度みておくと良さそうです。
Like what you read? Give eureka_developers a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.