この雑な文章は、ChatOps Advent Calendar 2015 の11日目の記事です。
こんにちは、図書委員長です
その昔、会社の新人研修で「社内ツール作ってよ。本の貸出管理するやつ」と言われ、エンジニアが本の貸し借りや購入依頼のできる(割と普通な) Web サービスを作りました。
でもそれだけじゃ面白くないので、どうするどうすると考えて生み出されたのが「ChatOps できる蔵書管理ツール」、通称書庫たんです。
新人研修が終わってからも、ちまちまと週末に書庫たんを開発、たまに「本がない」「登録して」などのお問い合わせに対応していたら、気付けば図書委員長と呼ばれるようになっていました。
そんなうちの書庫たんを紹介したいと思います。
なぜ蔵書管理を ChatOps したか
蔵書管理ツールを開発する上での勘所は「どのように本の貸し借りを行えるようにするか」です。
初めは図書館でよくあるようなバーコード読み取りを考えましたが、あえて ChatOps で本の貸し借りを行えるようにしました。
理由はざっくりと以下のような感じです。
- Web サービスならアクセスしないといけないけど、チャットツールならいつも開いてるから楽そう
- 対話を通して本を探したり借りたりできれば、サービス自体に愛着を持ってもらえそう
- 本に対するアクションがチャットで見えるため、それを基点にコミュニケーションが生まれそう
- エンジニアなら面白がって使ってくれそう
- 誰もやったことなさそうだから作るの楽しそう
- ちょうど社内で Bot が浸透しつつあった
とはいえ、当時は私が一番反対していました。ChatOps は、必ずしも万人向けではないからです。
- エンジニア以外の人が使いづらくなる
- チャットルームでの本の貸し借りに抵抗を感じる人がいそう
そんな懸念はありましたが、最終的には「面白そう」「現時点で使うのはエンジニア」「抵抗ある人は Web から貸し借りすればいい」という判断で、チャットでの貸し借りを実装しました。
書庫たんが ChatOps でできること
現状、書庫たんは Web サービスで行われた「本の登録・編集・貸出・返却・予約・購入申請・レビュー投稿」といった操作の通知をしてくれる他、
チャットから Web サービスへの「検索・貸出・返却・予約」を依頼できます。
スクショを見せるのが一番イメージが湧くと思うので、いくつかスクショを貼っていきます。
本を検索する
Web サービスの DB から、キーワードをタイトルに含む本を持ってきて表示します。
検索しても該当する本がなかったらこんなエラーを出します。
本を借りる
検索したときに出てくる番号を指定すると、その本を借りることができます。
内部では Hipchat の メンション名を渡していて、それを Web サービス側で登録しているユーザ情報と照合して貸し出し処理をしています。
本を返す
(ここは仕様に悩んだところですが) 直前に借りた本をすぐ返すことができます。
ついでに、社内の Qiita::Team へのレビュー投稿を促します。笑
本を予約する
既に誰かがその本を借りていたときは、予約ができるよ!と案内します。
予約しておくと、本を返却されたときに「○○さん、借りられますよ!」と名前を呼んでくれます。
書庫たんを通じた ChatOps で感じていること
ChatOps に適した機能かどうか
実際、書庫たんは思っていたより、チャットから使われてはいません。
「本を借りて読む」という行為自体がスパンの長いというか、ちょっと腰の重いものなので仕方なくもないのですが
それでも Web サービスからは定期的に使っている人がいますし、その操作でチャットに通知が届き、そこからコミュニケーションが生まれることもあります。
それは、やはり ChatOps は今新しく起きたことの通知、あるいはごく単純なアクションに向いていて、主体的に何か複雑なアクションを起こしにいくのは向いていないからなのかも、と思っています。
例えば、書庫たんで言うと「特定の本の指定」のやり方については、悩みの種でした。ISBNコードをチャットから打ってもらうのは面倒、かといってキーワードは一意性がない。
構想としてはより対話に近づけて、コンテキストを読み取って本を特定できるようにしたいです。が、それもなかなか難しいよなーと悩んではいます。
チャットで使って分かりやすい機能かどうか
複数のやりとりが必要だったり、次に何が起こるのか想像しにくかったりすると、機能としては使われにくくなってしまいます。
蔵書管理 ChatOps はちょっと挑戦的な試みだったので、やはりチャットから本の貸し借りをするフローがイメージしづらかったなとも思います。
書庫たんでいうと、特に予約機能が「検索して借りようとしたときに他の人が借りている」かつ「既に予約していない」という条件下でしか使えないため、「なにか使いどころのよく分からない機能」となっています。
もっとチャットというインターフェースを活かせるような機能を模索したいなーと思ったりもします。
面白くて使いたくなるかどうか
やっぱり ChatOps って「技術のいろんな使い道を模索して面白がるエンジニア文化」だからこそのものだと思っていて、やっぱり面白いものを作りたいですよね。
そういう意味で書庫たんはまだまだ発展途上です。うちの書庫たんをもっと可愛がってもらえるように頑張りたいです。来年以降からがんばります!笑
明日は @treby さんです!よろしくお願いします!