Satoryu's Diary

Rubyが好きなプログラマーの日記。日々の生活、開発に関するメモとか考えとか。


2016年07月09日 [長年日記]

_ 第2回botソン @ Toreta に行ってきた。

Failed Open URL.. https://www.instagram.com/p/BHoT_IYBbgQ/
859: unexpected token at ''

昨日にサービス開始から3周年を迎えたトレタさんで、なんでもいいからbotを作るハッカソンを開催するというので行ってきました。 諸事情により開始から大分遅れてしまい、3時間くらいモクモクと作業したのですが、個人的にはとても良い成果が出せたと思います。

つくったもの

HipChatのIntegrationという仕組みを使って、投稿したメッセージをダジャレに変換する/dajare コマンドを昨年末にリリースしました。

今回はそれを更に便利にするため、Atlassian connectの仕組みを使って、コマンドを使わなくても、投稿されたメッセージ全てをダジャレにするbot にアップグレードしました。

Demo

こんな風に全てダジャレで返してくるので、非常にウザいです。

学んだこと

Atlassian Connect の仕組みを大雑把にですが理解することができました。基本はWebhookの仕組みなので、メッセージやイベントがPOSTリクエストでエンドポイントに送信され、そのレスポンスがHipChatのルームへの通知やメッセージの投稿として認識されます。またbot自体がどのようなWebhookのエンドポイントを持っているかや対応するイベントやパーミッションをJSONで定義するだけです。この挙動を宣言するJSONをCapabilities descriptor と呼びます。

今回の開発でのハマりどころは、このCapabilities descriptor の記述の仕方です。ドキュメント を見ると、何が必須でどういった形なのかが分かりづらいです。 実際にデプロイしてみても、Integration としての追加がうまくいかず、何が原因かはHipChatのIntegration追加画面では表示されません。Capabilities Descriptor の記述の助けになったのが、Atlassian Connect Validator です。このValidator で随時確認するのをオススメします。

特別新しい技術を知らなくても、Webアプリケーションの開発ができるのであれば、簡単に実装できるのがAtlassian Connect の良い所だと思います。インストールもURLがわかれば、特定のroomやアカウントに関係なく、またOAuth認証などをわざわざ実装する必要もありません。しかしながら、セキュリティは気をつけなければいけません。通信は全てHTTPSで行われたとしても、登録したbotが安全なのかどうかを判断することは難しいです。 ですので、他のOAuthを用いたアプリケーションと同様に、パーミッションが適切なのか、そのbotが何をしているのかを予め知っておくことは大切なのかと思います。

ソース

ちなみにこのダジャレAdd on は、OSS としてGithub上で公開しています。

中身はRubyとSinatraで実装されたシンプルなアプリケーションですので、Rubyがわかれば中身を見れば、どういった挙動かがわかるかと。そして、Rubyが起動できる環境であれば、そこにもインストールできるようになります。ですので、どこぞの知らないところにメッセージが流れてしまうのが嫌だ、という場合にもお好みの環境にインストールしてご利用いただけます*1

ということで、みなさんもダジャレで涼しい夏を過ごしましょう。

*1 ボットサービスは色々出るのでしょうけど、メッセージが駄々漏れとも言えるので最新の注意が必要だと思います。なのでOSSとして公開して、状況にあわせて環境を用意する方が安全かな、と。


最近の投稿

翻訳しました(ちょっとだけ)

follow us in feedly