BackLogの進捗一覧を楽チンお手軽に整形済み状態でコピペできるようにしてみた

eyecatch-backlog

はじめに

BackLogはガントチャート等での進捗の可視化が手軽で、スケジュール状況の把握しやすさも魅力の一つです。定期的にその時点での進捗を記録に残したい場合でも、APIを利用した進捗出力という手段を取ることが出来ます。

サービスグループでは、定期的な全体の定例や各施策での進捗状況の振り返り用途に、Backlogにて進捗のあった課題を一覧化するコマンドがまとまっています。

ただ、振り返りをおこなっていくうちにそのコマンド入力自体が面倒になってきました。そこで、如何にしてこれを楽にできるかを試してみました。

BackLogAPIでの実行について

API Keyの発行が必要になります。以下の記事を参考に操作してください。

APIでの進捗取得方法

課題の一覧取得APIを利用します。

% BACKLOG_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
% curl -s -G "https://XXXX.backlog.jp/api/v2/issues" -d "apiKey=$BACKLOG_API_KEY"

詳細なコマンドオプションについては以下のドキュメントを参考にします。

効率のよいドキュメント化をすすめる

出力結果に合わせてjqでの整形が一番手軽だと思われますが、それにもう少しひねりを加えてみます。

Markdown形式への整形

Confluence、JIRA、Backlog等の、Markdownが使える環境下にて課題のURLへ手軽にジャンプできるように汎用的なフォーマット化を行います。

% BACKLOG_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
% curl -s -G "https://XXXX.backlog.jp/api/v2/issues" -d "apiKey=$BACKLOG_API_KEY" -d "projectId[]=***********" -d "sort=updated" -d "updatedSince=$(date -v-8d '+%Y-%m-%d')" | jq -r '.[] | "- (" + .status.name  + ") " + .milestone[].name +" [" + .issueKey + " " + .summary + "](https://XXXX.backlog.jp/view/" + .issueKey + ")"'

- (未対応) XXXXXXX [XXXX-1 XXXXXXX](https://XXXX.backlog.jp/view/XXXX-1)
- (未対応) XXXX [XXXX-2 XXXX](https://XXXX.backlog.jp/view/XXXX-2)
- (処理中) XXXXXXXX [XXXX-3 XXXXXXXX](https://XXXX.backlog.jp/view/XXXX-3)
- (完了) XX [XXXX-4 XX](https://XXXX.backlog.jp/view/XXXX-4)
- (処理中) XXXXXX [XXXX-5 XXXXXX](https://XXXX.backlog.jp/view/XXXX-5)

これで整形の手間が省けました。

実行時にAPIKEYを意識して扱わないようにする

毎回BacklogAPI KEY一覧を参照するのも手間ですから、手元に記録しておきたいものの、できればコピペする事自体を避けたいものです。

direnvにて、特定のディレクトリ環境下に限りますが、直接触れる必要をなくしてみました

% mkdir backlog_prj_workdir
% cd backlog_prj_workdir
% direnv edit .
export BACKLOG_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
% direnv allow .
% curl -s -G "https://XXXX.backlog.jp/api/v2/issues" -d "apiKey=$BACKLOG_API_KEY" -d "projectId[]=***********" -d "sort=updated" -d "updatedSince=$(date -v-8d '+%Y-%m-%d')" | jq -r '.[] | "- (" + .status.name  + ") " + .milestone[].name +" [" + .issueKey + " " + .summary + "](https://XXXX.backlog.jp/view/" + .issueKey + ")"'

これで所定のディレクトリへ移動することで、curlを実行するだけで出力可能になりました

curlを実行する必要もなくしてみる

ただ、curlの引数が若干長めなのも問題です。コピペ間違えでのエラーは勿論、長い為に間違えた場所が分かり難い可能性もでてきます。

そこで、curlの実行もdirenvに突っ込みます

% direnv edit .
export BACKLOG_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
curl -s -G "https://XXXX.backlog.jp/api/v2/issues" -d "apiKey=$BACKLOG_API_KEY" -d "projectId[]=***********" -d "sort=updated" -d "updatedSince=$(date -v-8d '+%Y-%m-%d')" | jq -r '.[] | "- (" + .status.name  + ") " + .milestone[].name +" [" + .issueKey + " " + .summary + "](https://XXXX.backlog.jp/view/" + .issueKey + ")"'
% direnv allow .

これでディレクトリへ移動するだけでコンソール上に出力されるようになりました。

整形結果の手動コピーする手間もなくしてみる

さて、実際に作業してみると、コンソール上の出力をコピペミスするケースに気が付きます。見た目正確にコピーしたつもりでも若干ズレるのはよくあることです。

そこで、コピー自体もdirenvに突っ込みます

% direnv edit .
export BACKLOG_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
curl -s -G "https://XXXX.backlog.jp/api/v2/issues" -d "apiKey=$BACKLOG_API_KEY" -d "projectId[]=***********" -d "sort=updated" -d "updatedSince=$(date -v-8d '+%Y-%m-%d')" | jq -r '.[] | "- (" + .status.name  + ") " + .milestone[].name +" [" + .issueKey + " " + .summary + "](https://XXXX.backlog.jp/view/" + .issueKey + ")"'
curl -s -G "https://XXXX.backlog.jp/api/v2/issues" -d "apiKey=$BACKLOG_API_KEY" -d "projectId[]=***********" -d "sort=updated" -d "updatedSince=$(date -v-8d '+%Y-%m-%d')" | jq -r '.[] | "- (" + .status.name  + ") " + .milestone[].name +" [" + .issueKey + " " + .summary + "](https://XXXX.backlog.jp/view/" + .issueKey + ")"' | pbcopy
% direnv allow .

1回目の実行でpbcopyに渡される内容のチェックを目的に、2回目で結果をpbcopyに渡しています。もう少しスマートにできるかもしれませんが、単純コピーの上でpbcopyへ渡すのが早いと判断しました。

これでディレクトリに入るだけで、ドキュメント向けのmarkdownフォーマット化されたBacklog課題一覧のテキストを確認できる上に、且つクリップボードに収まるようになりました

複数のプロジェクトが存在する場合

今回は単一のプロジェクトの課題が必要であることを前提にしています。混在しつつも複数取る場合はprojectId[]にカンマ区切りで渡しますが、jqのクエリ指定も修正する必要があります。

事故防止を考えて、プロジェクト毎にディレクトリを作成するのが個人的にはオススメです

まとめ

より手軽な手段を検討した末に、ディレクトリ移動後に貼り付けるだけで完了の流れになりました。ディレクトリへの移動指定が面倒であれば、shellのrcファイルにaliasにて移動するコマンドを短縮登録する手もあります。

秘匿すべきKEYを使った作業が面倒だと感じている方の参考になれば幸いです。