問題
社内で GitHub の issues より Backlog を使うため、Backlog チケットと GitHub の PR はほとんど 1:1 関係になってますから、普段 PR を開ける時、こういう形で Backlog へのリンクを書きます:
Backlog: [チケット番号](チケットのリンク) Backlog のチケットのタイトル
毎回いちいちチケットのリンクとタイトルをコピーするのがややこしかったですから、サービスを作りました。
スクリプト
まずは CLI から PR メッセージを作成できるようにしました。
#!/usr/bin/env bash
API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
function usage(){
echo "Usage: $0 <issue_id>" 1>&2
exit 1
}
function unknown_issue(){
echo "Unknown issue: $1" 1>&2
exit 2
}
issue_id=$1
[ -z ${issue_id} ] && usage
issue_summary=$(curl -s https://company.backlog.jp/api/v2/issues/${issue_id}?apiKey=${API_KEY} | jq -r '.summary')
if [[ ${issue_summary} = null ]]; then
unknown_issue ${issue_id}
fi
issue_url=https://company.backlog.jp/view/${issue_id}
echo "Backlog: [${issue_id}](${issue_url}) ${issue_summary}"
API_KEY
は Backlog で生成された API キーです。
Backlog のチケット ID をパラメータとして読んで、 API を使ってこのチケットの情報を取得して、jq で情報から summary
を読みます。
チケットの URL は決まってますから、 ID だけ置き換えたら十分です。
最終的に PR メッセージを出します。
どこからも実行ができるため、ファイルに許可を与えて bin
にコピーしました:
chmod 755 pr_message.sh
mv pr_message.sh /usr/local/bin/pr_message
実行してみれば、メッセージがちゃんと作られています:
$ pr_message C-1234
Backlog: [C-1234](https://company.backlog.jp/view/C-1234) Backlog チケットのタイトル
Automator でサービスを作る
Automator で新しいサービスを選択します。
左側の ライブラリ
メニューから テキスト
を選択して、 テキストの入力を求める
を右側にドロップします。
左側から ユーティリティ
> シェルスクリプトを実行
をこの下にドロップして、入力の引き渡し方法を 引数として
にする。ここで、前のステップでもらった入力をスクリプトに渡します。
注意: この shell は .bash_profile
などを読まないため、自分で PATH を設定する必要あります。
出力をクリップボードにするため ユーティリティ
> クリップボードにコピー
を下に追加します。
ライブラリ/サービス
フォルダーの中に保存して再起動します。
実行
サービスはトップメニューから実行されます。
実行すれば、ダイアログが開けます。
入力・確認したら、後は ⌘V だけで終わります。
結論
Automator とサービスでできることはいくつでもあって、よく行う作業をかなりやりやすくできます。今回のサービスの改善として、メッセージをクリップボードにコピーするより、ブラウザーの中のコピーにした方が使いやすくなります。