今日のPull request数を可視化して開発モチベーションを爆上げ
作ったもの
git push --set-upstream origin branchname
した際に、今日自分が作ったPull requestの数と一覧を表示してくれるようにしました。
% git push --set-upstream origin branchname
You have created 3 pull request(s) today.
Showing 3 of 3 pull requests in xxx/xxx that match your search
ID TITLE BRANCH CREATED AT
#1 PR1 feature/branch1 about 3 days ago
#2 PR2 feature/branch2 about 3 days ago
#3 PR3 fix/branch3 about 3 days ago
モチベーション
個人の目標というか、日々の行動の数値化としてその日に作ったPull requestの数を計測しています。
この数値設定の意味は簡単に説明すると手を動かすことを意識するためです。
自分はあれこれ考え出すと手が止まってしまったり、チャレンジしてみようと思っても他人からの目を気にしてアクションしないことがあります。
エンジニアである以上、どれだけコードを書いたかが"アクション"として計測できると思っています。(指標の1つにすぎませんが)
批判があっても良いですし、mergeせずcloseになっても良いので何かしらPull requestという形でアウトプットを意識するのが良いのではないか?という仮説から来ています。
元々は計測のために、週末に手作業で行っていたのですが数値がイマイチだった週があっても改善へとつながっていませんでした。
試行錯誤した結果、週末に測るよりもPull requestを作ったその瞬間に今日何個作っているかを可視化した方がモチベーションが上がるのではないかと思ったので、何か方法を模索してみました。
仕組み
結局動く仕組みはPull requestを作った時ではなくgit push --set-upstream origin branchname
した時になりましたが、ほぼイコールでPull requestを作った時だと思うので良しとしました。
ざっくり仕組みとしては
- gitのhookを利用しpushした時にスクリプトを走らせる
- 全てのリポジトリで実行したかったのでグローバルで
pre-push
を登録
- 全てのリポジトリで実行したかったのでグローバルで
- ghコマンドを使ってPR数を取得
と言った感じです。
実践する
git hookをグローバルに設定する
基本的にhookは特定のリポジトリに設定しますが、全てのリポジトリでpushを検知して欲しかったのでその手順です。
~/.config/git/hooks/pre-push
を作ります(ディレクトリはどこでもOK)
一旦空でOK
$ touch ~/.config/git/hooks/pre-push
$ git config --global core.hooksPath ~/.config/git/hooks
$ chmod +x ~/.config/git/hooks/pre-push
これだとリポジトリ個別のhookに対応しないので、もし必要であればこちらに書いてありました。
スクリプトを書く
push時のスクリプト。
やっていることの流れは、
- ブランチ名とリモート名を取得
- 特定のブランチがリモートに存在するかチェック
- 今日、自分が作成した全てのpull request(merged, closeなどを含む)をの数を取得
- echoでpull request数を出力
ちなみにgh
コマンドを使っているのでインストールしてください。macはbrew install gh
でインストールし、gh auth login
でログインできます。
#!/bin/sh
# 現在のブランチ名を取得
current_branch=$(git branch --show-current)
# リモート名を指定(ここでは 'origin' を使用)
remote_name="origin"
# 特定のブランチがリモートに存在するかチェック
if ! git ls-remote --heads $remote_name $current_branch | grep -q "refs/heads/$current_branch"; then
# 今日の日付をYYYY-MM-DD形式で取得
TODAY=$(date "+%Y-%m-%d")
# GitHubのユーザー名を取得
GH_USER=$(gh api user | jq -r '.login')
# 今日、指定したユーザーが作成したPRの数を取得
PR_COUNT=$(gh pr list --state all --search "created:$TODAY author:$GH_USER" --json number --jq '. | length')
# 結果を表示
echo "You have created \033[33m$PR_COUNT\033[0m pull request(s) today."
# open以外を含む全てのPRを表示
gh pr list --search "created:$TODAY author:$GH_USER" --state all
fi
# スクリプトが成功したことを示すために0を返す
exit 0
これでgit push --set-upstream origin branchname
した時にpull requestの数と、一覧を表示することができました。
% git push --set-upstream origin branchname
You have created 3 pull request(s) today.
Showing 3 of 3 pull requests in xxx/xxx that match your search
ID TITLE BRANCH CREATED AT
#1 PR1 feature/branch1 about 3 days ago
#2 PR2 feature/branch2 about 3 days ago
#3 PR3 fix/branch3 about 3 days ago
さいごに
やっていることは簡単ですが、普段の行動(git push)の行動をトリガーにして開発モチベーションを維持できるので良いデザインかなと思います。
表示するフォーマットとかは運用してみて改善していこうかなと思います。
(pull requestが0個だったら「がんばれ」メッセージ出すとか、適当な目標数を達成したらクラッカー🎉の絵文字出しまくるとか)
もし試された人がいたらフィードバックなりをコメントに書いてみてください!
Discussion