めりくり〜〜〜。これはドワンゴ Advent Calendar 2015の最終日の記事です。みなさんはいい子にしてましたか?サンタはきましたか?

なんとまあ、この記事はKwappa研究開発室1年ぶりのエントリーとなってしまいました。どんだけさぼっていたんだ…。

今年の仕事

さて。

今年の主な仕事は、教育事業に関連する開発チームのマネージャーという立場でした。自分でプロダクトコードを書くとボトルネックになってしまう、という(高い授業料を払った)過去の学びから、ひたすら裏方に徹しています。打ち合わせやTODOの数も多く、マネージャーに対してのマネジメントが切実に必要でした。

プロダクトコードを書かないマネージャーであっても、ソフトウェアエンジニアたるもの「ないものは作るしかない」。というわけで、仕事の合間にちまちまとSlack Botを導入し、必要なプラグインを作っていました。

kwappa/kinoco

それがこのkwappa/kinocor7kamura/rubotyに機能を詰め込んでだものです。いくつか自前のプラグインも開発したので、それらを紹介していきます。

kwappa/ragoon

弊社はグループウェアとしてサイボウズ ガルーン 3を使っています。メジャーバージョンがひとつ落ちているのが悲しいところ。予定を取ってきてSlackに流すために作ったAPIクライアントがkwappa/ragoonです。

といっても日を指定して予定を取ってくるだけ。通知の取得もできているのですが、まだつなぎ込みはしていません。

このクライアントをRubotyのプラグインにしたのがkwappa/ruboty-ragoonです。当初はLitaで作っていたので、Lita版のプラグインkwappa/lita-ragoonもあります。

kinoco ragoon #{DATE}とすると、DATEをできるだけパーズしてその日の予定を取ってきてくれます。このスクショは分報チャンネルなので非公開予定は伏せられていますが、Direct Messageで投げると非公開予定も表示してくれます。

ちなみにアイコンをぼかしているのは、某無免許医の助手画像を拝借しているから。オリジナルの可愛いアイコン募集しています。

Garoon APIのXMLは構造が 💩 独特で、Nokogiriで読み書きするのに結構コツが必要でした。この辺とかこの辺とか、詳細な説明はしませんが、ガルーンとお話しするときにはぶつかる壁だと思います。

kwappa/ruboty-todo

ちょっとしたタスクを登録し、進捗を管理するようなツールが欲しくて作ったのがkwappa/ruboty-todoです。Ruboty | Brainを利用し、Rubotyの脳にTODOを記録したり進捗を管理したり、がSlackでお話することで実現できます。

同じ名前のプラグインがあるのに気づいたのは、gemとしてリリースしたあとのことでした。申し訳ない気持ちでいっぱいなのだが、 gem search -r ruboty で発見できなかったのでご容赦願いたい次第です。

kwappa/ruboty-postgres

kinocoはherokuで運用されています。Rubotyは標準だと頭脳がメモリ上にあるため、dynoを再起動したりすると記憶喪失してしまいます。ありがたいことにherokuにはRedisのアドオンがあり、25MBまでは(クレカ登録は必要だけど)無料で使えます。

これで記憶の保持はバッチリ…と思ったら、heroku様からぼちぼちの頻度で「Redisあかんねん」のメールが届き、記憶喪失になるケースが発生しました。うーん、飛ぶのが致命的なデータは載せないが、カジュアルに記憶をロストされても困るぞ。

ということで、herokuで使えるRDBMSであるところのpostgresを永続化レイヤーに使う、kwappa/ruboty-postgresというのを作ってみました。

処理そのものはまるっとr7kamura/ruboty-redisを参考にしています。saveloadだけちょろっと直せばラクショーやろ、と甘く見ていたら結構いろいろやることがあり、ged/ruby-pgと格闘していました。テスト書かないとなあ…(test-unitに依存だけしている)。

POSTGRES_BOTNAMEを指定することで単一のデータベース / テーブルに複数のRubotyが頭脳を置けるようにしてあるので、Heroku | Postgresの無料部分にもやさしい設計です。

今後の展望とまとめ

より便利にするために、今後もちまちまと開発を続けていきたいと思っています。今後の展望としては…

ということで無事ドワンゴ Advent Calendar 2015も完走し、うまく休みをゲットできたため今日から冬休みです。have a merry coding and happy hacking!