Developers開発の実験等々、クイックサーブのメンバーが好き好きに書き込んでいく場所です。1.4.7概要BacklogのWebhook機能を用いて、Sinatraで実装したWebアプリケーションを経由し、チャットワークにリアルタイム更新通知を行ったお話。メール通知より圧倒的に早いリアルタイム通知による、プロジェクト管理の効率化ができる可能性を探る。今回は試験的実装のため、課題作成時に課題の作成者、タイトル、URLをチャットワークのマイチャットに投稿するだけの簡単なシステムを実装した。今回は非常に軽量なシステムとなるので、Rubyの軽量WebフレームワークであるSinatraを採用しているが、Sinatraについては本記事から脱線するので詳しい解説は割愛する。Webhookとは端的に言えばアプリケーションで何らかの更新アクションが発生した時、その内容を特定のURLに対してPOSTしてくれる機能。Backlogの場合、課題が追加された、更新された、削除されたなどの情報を、指定したURLに対してJSONでPOSTさせることができる。技術とかツールでなく、ただの機能の名称なので注意。@QiitaWebhookの設定を行うBacklogでのWebhookの設定はプロジェクト単位で行う。プロジェクト設定に、Webhookの項目があるので、そこから設定する。Webhook名と説明は適当に入力し、WebHookURLに更新通知をPOSTさせたいURLを入力する。インターネットからアクセスできる場所でないといけないので、ローカル開発環境などを指定しても動作しない。「通知するイベント」は、Backlogのどの更新アクションをWebhookで通知するかを指定できる。今回は課題の追加時にチャットワークで通知したいので、「課題の追加」にのみチェックを入れるWebhookの受け口作成(Sinatra)本記事では、Webhookの受け口に、Rubyの軽量WebアプリケーションフレームワークであるSinatraを用いる。いっても、POSTされたデータをチャットワークに流すだけなので、フレームワークも不要なレベルだが、導入が簡単なので今回はSinatraを用いることにした。Sinatra環境の構築には、手前味噌だが以下を用いた。endendBacklogのWebhookでは、指定したURLに対して、リクエストボディがJSONのPOSTリクエストが飛んで来る。上記コードでは、それを受け取ってJSONをparseし、標準出力している。APIと概ね一緒なのでここでは割愛する。QS-DEVSでも触れている。ようにコードを修正して、必要な情報のみ抜き出す。次に、チャットワーク連携用のロジックを用意する。こちらについても手前味噌だが、RubyでチャットワークAPIを利用するクラスを以前作っていたので、それをベースにする。QS-DEVS今回はAPIの認証と、メッセージの送信ができればいいので、大幅にコードを削って以下のようなクラスに仕上げた。endend環境変数”CHATWORKAPI”にAPIキーを設定し、このクラスのインスタンスを生成後、sendMessageメソッドを呼び出せばチャットワークにメッセージを送信できる。今回はメッセージの送信先として、マイチャットを指定している。課題の更新を通知する前項で実装したChatworkクラスを用いて、Webhookで送られた更新情報をチャットワークに通知する。Sinatraの使い方としてはかなりお行儀が悪いが、プライベートメソッドmakeChatworkMessageを実装し、チャットワークに送信するメッセージを作成、それをチャットワークに送信するようにした。endend動作確認サーバを起動し、課題の作成を行うと、チャットワークのマイチャットにリアルタイムで通知が届くことが確認できた。Webhookを使ったが、かなりリアルタイムに近い。コメントをキャンセルメールアドレスが公開されることはありません。