📜

【小ネタ】コミットメッセージから Pull Request のコメントを生成してコミットメッセージを書くモチベーションを上げよう!

2023/02/01に公開
2

こんにちは!アルダグラムでエンジニアをしている @sukechannnn です。

git、GitHub を使って開発する際に、コミットメッセージに変更の意図や背景をちゃんと残すのはとても大切なことです。
コミットメッセージがあれば、開発した時の背景を未来の人(自分含む)に伝えることができます。git blame とても便利ですね。

それと同時に、プルリクエストを作る際に書くコメントも大切です。アルダグラムでは、テンプレート機能を使って、プルリク作成時に書いて欲しいコメントの雛形を作るようにしています。

プルリクコメント雛形
## 関連チケット
https://github.com/aldagram/kanna/issues/{number}

## 概要
このPRで変更したことの概要を書いてください。

## 動作確認方法
どのような動作確認が必要か書いてください。

## 気になっているところ/補足
自信のないところや特にレビューしてほしいところ、その他補足したいことがあれば記載してください。

そしてある時気づきました。
プルリクエストのコメントに書いている内容とコミットメッセージに書いてある内容がほとんど同じであることに。

多くの開発現場では、チケットの管理を GitHub issue や Jira で管理しているのではないでしょうか?その場合、基本的に背景などはそちらに書かれているため、プルリクエストにはそのリンクを貼れば事が足りることが多いです。

そのため、プルリクエストのコメントには、具体的なコード変更の背景や目的について書いてあればOKです。つまり、コミットメッセージをしっかり書けば、それがそのままプルリクコメントになってしまうのです...!

ということで、コミットメッセージからプルリクエストのコメントを生成するコマンドを作ってみました。

$ git log --reverse --pretty=format:"- %C(reset)%h%C(reset) %s%C(auto)%n%w(0,2,2)%b%-"

内容を簡単に解説すると、

  • --reverse オプションで古い順に表示
  • --pretty=format: オプションで表示時のフォーマットを指定
    • - %C(reset)%h%C(reset) %s%C(auto) はコミットハッシュとコメント1行目がハイフンで始まる
    • %n%w(0,2,2)%b%- は3行目以降のコメントは1行目から改行し、インデントを2つ入れる

という感じです。僕は3行目以降のコメントはハイフンを付けて書いてるのでこんな感じですが、適宜カスタマイズしてください。

これを .zshrc に alias として追加して、実行しやすくしてます(git log messages => glm)。

.zshrc
alias glm='git log --reverse --pretty=format:"- %C(reset)%h%C(reset) %s%C(auto)%n%w(0,2,2)%b%-"'

こうすることで、コミットログを以下のように積み上げた時に、

$ git commit --message ':sparkles: Implement HOGE to achieve something

- hogehoge
- fugafuga
'
$ git commit --message ':bug: Fix bug piyopiyo

- This bug caused by something
'

以下のような標準出力を得ることができます。

$ glm -2

- 25a5370 :sparkles: Implement HOGE to achieve something
  - hogehoge
  - fugafuga
- 210df94 :bug: Fix bug piyopiyo
  - This bug caused by something

Mac であれば pbcopy が使えるので、$ glm -2 | pbcopy でクリップボードにコピーできます。
あとはそれをプルリクコメントに貼り付けるだけです。

コミットメッセージをしっかり書けば自然とプルリクエストのコメントになるので、コミットメッセージを書く動機にもなります。コミットメッセージは大事です(2回目)。

ということで、これを活用して、今までコミットメッセージをあまり書いてなかった人もこれを期に書いてみてはいかがでしょうか!

アルダグラム Tech Blog

Discussion

Hiroshi Yamato / dropcontrolHiroshi Yamato / dropcontrol

大変参考になりました。僕のほうではこんな感じで利用してます(引数渡して表示の行数を指定できるようにした)。

alias glm='git log --reverse --pretty=format:"- %C(reset)%h%C(reset) %s%C(auto)%n%w(0,2,2)%b%-" -n'