この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
サーモン大好き横山です。
本日はバックログの自分のアクティビティをBacklog APIから取得し、CSV化するスクリプトを書いたので紹介します。
前提
以下の環境で動作確認しています。
- Mac OS X 10.11.6
- jq 1.5
- curl 7.43.0
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G1510
$ jq -V
jq-1.5
$ curl -V
curl 7.43.0 (x86_64-apple-darwin15.0) libcurl/7.43.0 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets
準備
Backlog API Key を取得しましょう
対象のBacklogスペースにログインしましたら、ページ右上のアイコンをクリックし「個人設定」をクリックします。
開きましたら、左カラムの「API」の項目をクリックし、メモにAPIの利用目的等を書き、「登録」をクリックします。
画面右下に「登録されたAPIキー」にAPIキーが作成されるのでそちらをメモしておきます。
スクリプト
以下のスクリプトを実行しますと、最近100件のアクティビティのAPIが取得出来ます。
主に以下のAPIを叩いています。
#!/bin/bash
APIKEY="hy59xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSyv3"
BACKLOG_URL="https://xxx.backlog.jp"
TYPE_JSON='["",
"課題の追加",
"課題の更新",
"課題にコメント",
"課題の削除",
"Wikiを追加",
"Wikiを更新",
"Wikiを削除",
"共有ファイルを追加",
"有ファイルを更新",
"共有ファイルを削除",
"Subversionコミット",
"GITプッシュ",
"GITリポジトリ作成",
"課題をまとめて更新",
"プロジェクトに参加",
"プロジェクトから脱退",
"コメントにお知らせを追加",
"プルリクエストの追加",
"プルリクエストの更新",
"プルリクエストにコメント"]'
ME=$(curl -s $BACKLOG_URL/api/v2/users/myself\?apiKey=$APIKEY | jq -r '.id')
echo "ID,日時,種別,プロジェクトURL,プロジェクトの課題URL,課題タイトル"
curl -s $BACKLOG_URL/api/v2/users/$ME/activities\?apiKey=$APIKEY\&count=100 |
jq -r --argjson types "$TYPE_JSON" '.[] | [.id,
.created,
$types[.type],
"'$BACKLOG_URL'/projects/"+.project.projectKey,
if .content.key_id == null then
"" else
"'$BACKLOG_URL'/view/"+.project.projectKey+"-"+(.content.key_id|tostring)
+ (if .content.comment.id != null then
"#comment-"+(.content.comment.id|tostring) else
"" end)
end,
if .content.summary then .content.summary else "" end] | @csv'
設定
APIKEY
上記で設定したBacklog APIキーを設定してください
BACKLOG_URL
上記で設定したBacklog APIキーを設定したBacklogスペースのURLを設定してください
実行結果
$ bash activities.bash
ID,日時,種別,プロジェクトURL,プロジェクトの課題URL,課題タイトル
xxxxx8023,"20xx-xx-xxT17:00:20Z","GITプッシュ","https://xxx.backlog.jp/projects/PROJECT","",""
xxxxx8021,"20xx-xx-xxT17:00:17Z","GITプッシュ","https://xxx.backlog.jp/projects/PROJECT","",""
xxxxx8714,"20xx-xx-xxT17:00:11Z","GITプッシュ","https://xxx.backlog.jp/projects/PROJECT","",""
xxxxx3384,"20xx-xx-xxT07:49:05Z","課題にコメント","https://xxx.backlog.jp/projects/PROJECT","https://xxx.backlog.jp/view/PROJECT-2#comment-xxx","SUMMARY-2"
xxxxx5306,"20xx-xx-xxT10:27:06Z","課題にコメント","https://xxx.backlog.jp/projects/PROJECT","https://xxx.backlog.jp/view/PROJECT-2#comment-xxx","SUMMARY-2"
xxxxx8074,"20xx-xx-xxT17:00:06Z","GITプッシュ","https://xxx.backlog.jp/projects/PROJECT","",""
xxxxx3873,"20xx-xx-xxT09:03:27Z","課題の更新","https://xxx.backlog.jp/projects/PROJECT","https://xxx.backlog.jp/view/PROJECTO-1#comment-xxx","SUMMARY-1"
xxxxx9408,"20xx-xx-xxT03:18:52Z","課題の更新","https://xxx.backlog.jp/projects/PROJECT","https://xxx.backlog.jp/view/PROJECTO-1#comment-xxx","SUMMARY-1"
:
:
:
ぇ、100件じゃ足りないですか?
Backlog APIの制限上一度に100件以上は取得することが出来ません。
ですので、これ以上の件数を取得する場合はループを作成し、query stringに maxId
を指定します。
Backlog API側で件数制限をしている部分もありますので、過度なAPI呼び出しをしないようご注意願います。
スクリプト
以下スクリプトは100件を3ページ分取ってくる設定です。
#!/bin/bash
APIKEY="hy59xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSyv3"
BACKLOG_URL="https://xxx.backlog.jp"
SIZE=100
PAGE=3
TYPE_JSON='["",
"課題の追加",
"課題の更新",
"課題にコメント",
"課題の削除",
"Wikiを追加",
"Wikiを更新",
"Wikiを削除",
"共有ファイルを追加",
"有ファイルを更新",
"共有ファイルを削除",
"Subversionコミット",
"GITプッシュ",
"GITリポジトリ作成",
"課題をまとめて更新",
"プロジェクトに参加",
"プロジェクトから脱退",
"コメントにお知らせを追加",
"プルリクエストの追加",
"プルリクエストの更新",
"プルリクエストにコメント"]'
function getActities() {
JSON="$1" && shift
echo $JSON | jq -c --argjson types "$TYPE_JSON" '[.[] | [.id,
.created,
$types[.type],
"'$BACKLOG_URL'/projects/"+.project.projectKey,
if .content.key_id == null then
"" else
"'$BACKLOG_URL'/view/"+.project.projectKey+"-"+(.content.key_id|tostring)
+ (if .content.comment.id != null then
"#comment-"+(.content.comment.id|tostring) else
"" end)
end,
if .content.summary then .content.summary else "" end]]'
}
ME=$(curl -s $BACKLOG_URL/api/v2/users/myself\?apiKey=$APIKEY | jq -r '.id')
JSON=$(curl -s $BACKLOG_URL/api/v2/users/$ME/activities\?apiKey=$APIKEY\&count=$SIZE)
echo "ID,日時,種別,プロジェクトURL,プロジェクトの課題URL,課題タイトル"
ACTIVITIES=$(getActities "$JSON")
echo $ACTIVITIES | jq -r '.[] | @csv'
# PAGEが2ページ未満の設定ならここで終了する
if [ $PAGE -lt 2 ]; then
exit 0
fi
# APIの呼び出しを最大5回までに留める
if [ $PAGE -gt 5 ]; then
PAGE=5
fi
for n in $(seq 2 $PAGE); do
MAXID=$(echo $ACTIVITIES | jq -r '.[-1][0]')
JSON=$(curl -s $BACKLOG_URL/api/v2/users/$ME/activities\?apiKey=$APIKEY\&count=$SIZE\&maxId=$MAXID)
if [ "0" == "$(echo $JSON | jq '. | length')" ]; then
break
fi
ACTIVITIES=$(getActities "$JSON")
echo $ACTIVITIES | jq -r '.[] | @csv'
done
設定
APIKEY
上記で設定したBacklog APIキーを設定してください
BACKLOG_URL
上記で設定したBacklog APIキーを設定したBacklogスペースのURLを設定してください
SIZE
1度のAPI呼び出しで取得する件数。 (1 <= SIZE <= 100)
PAGE
API呼び出し回数。 (1 <= PAGE <= 5)
まとめ
こちらのスクリプトを使うことでBacklogで最近どんな作業をやったかのExcelなどにまとめる事が出来ると思います。
作業可視化の方法として思い出していただけると幸いです。