1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

backlog APIで課題管理

Last updated at Posted at 2020-07-13

経緯

いちいちBacklogにログインして(もしくはブクマ踏んで)ガントチャートみたり、タスク一覧見るのが面倒
チャットツールに必要最低限の情報を通知してくれれば良くね?

やってみる

Backlogの課題一覧の取得APIを使う

サンプル

期限が一週間後の自分が担当の課題一覧をslackにぶん投げる。

echo -n "{\"text\":\"@hogehoge 以下の期限が迫ってます。ご対応ください。\n $(curl --globoff -k "https://${スペース名}.backlog.jp/api/v2/issues?apiKey=API_KEYを入れて&projectId[0]=プロジェクトID入れて&statusId[0]=1&statusId[1]=2&statusId[2]=3&assigneeId[0]=自分のassigneeId入れて&dueDateUntil=$(date "+%Y-%m-%d" -d week)&count=100"|jq|sed -n '/issueKey/,/dueDate/p'|grep 'issueKey\|dueDate'|sed -e "s/変換したい文字列/課題のURLの一部+変換したい文字列/g" -e "s/T00:00:00Z//g" -e "s/,//g"|awk '{print $2}' |sed -e "N;s/\n//g" -e "s/\"\"/\ /g" -e "s/\"//g" | sed -e "s/$/\\\\n/g")\"}"  |curl -X POST -H 'Content-type: application/json' -d @- ${投稿したいチャンネルのWebhook URL}

こんな感じの結果がslackに通知される
cronとかで定期実行すれば毎日のリマインダーになるかと

スクリーンショット 2020-07-13 19.18.00.png

課題へのリンク 期限日
課題へのリンク 期限日
課題へのリンク 期限日
...
..

必要なもの

jqが必要です。
SlackのIncoming Webhooksを利用してます。
Backlogの個人設定からAPI KEYの発行が必要です。
自分のassigneeIdなどは無くても動くので、動かない場合は不要パラメータを削ってみてください。
動いた結果から自分のassigneeIdを見つけて絞り込みに使用してください。
他、スペース名など必要なものはググれば出るので、「Backlog API 使い方」とかでググってください

何をやっているのか

slackのIncoming Webhooksの--data引数のjson部分をecho -n で出力し、そのままcurlに**@-**で渡してます。
見づらいですが、やってることは下記です。
先頭のechoからcurlまでのなが〜い処理をbashのワンライナーでやってます。

echo -n "{"text":"表示したいもの"}"| curl -X POST -H 'Content-type: application/json' -d @- ${投稿したいチャンネルのWebhook URL}
echo -n "{\"text\":\"@hogehoge 以下の期限が迫ってます。ご対応ください。\n $(curl --globoff -k "https://${スペース名}.backlog.jp/api/v2/issues?apiKey=API_KEYを入れて&projectId[0]=プロジェクトID入れて&statusId[0]=1&statusId[1]=2&statusId[2]=3&assigneeId[0]=自分のassigneeId入れて&dueDateUntil=$(date "+%Y-%m-%d" -d week)&count=100"|jq|sed -n '/issueKey/,/dueDate/p'|grep 'issueKey\|dueDate'|sed -e "s/変換したい文字列/課題のURLの一部+変換したい文字列/g" -e "s/T00:00:00Z//g" -e "s/,//g"|awk '{print $2}' |sed -e "N;s/\n//g" -e "s/\"\"/\ /g" -e "s/\"//g" | sed -e "s/$/\\\\n/g")\"}"  |curl -X POST -H 'Content-type: application/json' -d @- ${投稿したいチャンネルのWebhook URL}

おまけ

bashワンライナーの部分の解説。
下記の部分が上記で言うなが〜い処理に当たります。

echo -n "{\"text\":\"@hogehoge 以下の期限が迫ってます。ご対応ください。\n $(curl --globoff -k "https://${スペース名}.backlog.jp/api/v2/issues?apiKey=API_KEYを入れて&projectId[0]=プロジェクトID入れて&statusId[0]=1&statusId[1]=2&statusId[2]=3&assigneeId[0]=自分のassigneeId入れて&dueDateUntil=$(date "+%Y-%m-%d" -d week)&count=100"|jq|sed -n '/issueKey/,/dueDate/p'|grep 'issueKey\|dueDate'|sed -e "s/変換したい文字列/課題のURLの一部+変換したい文字列/g" -e "s/T00:00:00Z//g" -e "s/,//g"|awk '{print $2}' |sed -e "N;s/\n//g" -e "s/\"\"/\ /g" -e "s/\"//g" -e "s/$/\\\\n/g")\"}" 

パーツに分解するとこんな感じ
echo -n でダブルクォーテーションで囲った部分(上記nの直後から最後まで)を改行なし画面出力

echo -n 

単なる文字列"{"text":"文字列"}"の前半の一部

"{\"text\":\"@hogehoge 以下の期限が迫ってます。ご対応ください。\n

$(bash command)$()で囲まれた内部の結果を変数として渡しています。
$()の中身はcurlで自分の所属するbacklogのAPIを叩いている

projectId    //自分の所属するグループのプロジェクトID
statusId     //今回は1~3で完了以外を取ってるつもり
assigneeId   //担当が自分
dueDateUntil //締め切り日
count        //100件が上限らしいので100件超える場合は取れない。。。
jq           //jqコマンドでjsonを改行ありで見やすく整形
sed -n '/issueKey/,/dueDate/p' // issueKeyからdueDateまでの範囲の行を抽出
grep 'issueKey\|dueDate'       // issueKeyとdueDateだけを抽出
sed -e "s/変換したい文字列/課題のURLの一部+変換したい文字列/g" // 課題のURIを生成するために変換
-e "s/T00:00:00Z//g" // 締め切り日に不要なT00:00:00Zが付いているので削除
-e "s/,//g"          // jsonのカンマが付いているので削除
awk '{print $2}'     //"キー:" "バリュー"形式で値が取れるのでバリューだけ抽出
sed -e "N;s/\n//g"   //上下2段に必要な情報が分かれて表示されるので1行に統合
-e "s/\"\"/\ /g"     //上記1行に統合したので間のダブルクォーテーションをスペースに変換
-e "s/\"//g"         //他のダブルクォーテーションは削除
sed -e "s/$/\\\\n/g" //各行の末尾に改行コード(\n)を入れる
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?