Backlog APIを使って自分のアクティビティを調べよう
サーモン大好き横山です。
本日はバックログの自分のアクティビティを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などにまとめる事が出来ると思います。
作業可視化の方法として思い出していただけると幸いです。