backlogの各プロジェクトに登録されている課題をSlackに通知する仕組みを、Backlog APIとGoogle Apps Scriptを使って実現しました。
backlogとは
プロジェクト・タスク管理ツールです。
チーム用と銘打っていますが、個人用のフリープランもあります(気づきにくい)
最近流行りのカンバン方式はドラッグするのが面倒なのですが、このツールはシンプルなリスト表示です。
キーワード
- backlog (及びそのAPI)
- Google Apps Script
- Slack (bot)
構成
Google Apps Script(以下GAS)を使うことで自分でサーバー構築をしなくても簡単にサーバーサイドスクリプトを書くことが出来ます。
さらに、トリガーと呼ばれる機能を使うことで、毎時間に指定の関数を起動するなどのルーティン処理を実行することができます。
backlog APIの使い方
リファレンスはこちら
https://developer.nulab-inc.com/ja/docs/backlog/
今回は以下の機能を使っています
- プロジェクト一覧の取得 (プロジェクト名を取得)
- 課題一覧の取得
リクエストするURLは、
https://{スペース名}.backlog.com/
(backlogにログインした後のホーム画面のURLに含まれている部分と同じ)
※一部記事では {スペース名}.backlog.jp となっていることがありますが、2018年9月現在では .backlog.comになっています。
この後ろに、リファレンスに書かれているURLを含めます。
/api/v2/issues
さらにその後ろに、認証のためのAPIキーの文字列を含めます。
?apiKey={APIキー}
クエリを含める場合には & でつなげましょう。 Idの番号が何を表すかは叩きながら確認しましょう...
"&statusId[]=1&statusId[]=2"
//状態 未対応:1, 処理中:2
"&priorityId[]=2&priorityId[]=3"
//優先度 高:2, 中:3
などなど...
プロジェクトIdは、backlogのプロジェクト設定画面の project.id=
後の数値です。
組み合わせたリクエストURLをGASの UrlFetchApp.fetch
で投げればレスポンスが返ってきます。
for文で要素を回しながら値を取得しましょう。
res[i]["summary"]
などなど...
slackの指定チャンネルに投稿
slack botを作成し、GASからWebhook URLを使って投稿します。
投稿先のチャンネルを表すIdの取得は、slackをWebで開くとURLに含まれている数値になります。
function sendSlack(message) {
var payloadData = {
"text": message,
"channel": SLACK_CHANNEL_ID,
"parse": "none",
"as_user": true,
"link_names": true
}
var payload = JSON.stringify(payloadData);
var options = {
"method": "post",
"contentType": "application/json",
"payload": payload
}
UrlFetchApp.fetch(WEBHOOK_URL, options);
}
こんな感じで関数作るとわかりやすいのかなと。
"as_user"でbotをユーザー認識させ、"link_names"でslackのメンション機能を有効化させています。
GASで毎日決まった時間にプログラムを実行
GASのエディタを開き、メニューバーの「編集」->「現在のプロジェクトのトリガー」をクリックし、トリガー設定を行えます。
例えばこのようにすると、毎日午前9時~10時にmain関数を実行してくれます。
もっと厳密な時間設定をする場合にはプログラムを書く必要があります。
参考
-
【GAS】Backlogの残タスク(課題チケット)をGASで取得してチャットワークに流す
異なる点はスプレッドシートとslack。 -
GAS のGoogle謹製CLIツール clasp
web上のGASエディタだけで開発するのが辛くなってきたガチ勢は使ってみては。
まとめ
GASとbacklog APIを使って、slackにbacklogの情報を通知する仕組みをご紹介しました。
backlogはiOS、Androidともに専用のアプリがあるので、それを見れば詳細情報を確認することもできますが、
slackのメンション機能を使うことで自動的にタスク情報が手に入るので楽になるのかなと思います。