🤖

[Tips] ChatGPT に git のコミットログから簡易 Change log を生成してもらう

2023/05/13に公開

ただの小ネタです。

最近 ISUCON の素振りをやってまして。後から何をどう変更したのかの履歴を振り返りたい & 同僚氏にも共有したいなと思いました。

変更点は git でコミットしていたので、README にコミットログの表形式が web link 付きで提示できてたらわかりやすいかな?と思ったので ChatGPT さんに頑張ってもらいました。

(自分が知らないだけでコマンドラインのみで完結しそうな用事じゃね?という気はしている)

Output

結果はこんな感じで、意図したような markdown のテーブル表現が得られました。

Input

git log --oneline

で出力した結果を与えました。サンプルはこんな感じ

convert the text into markdown table.
the input text is git commit logs.

satisfy the requiements as follows.

- the table has two columns, "Commit hash" and "Description"
- commit hash column value is a web link to github commit. owner is "<repository-owner>", repository is "<repository>"
- line order is reversed from input
- show markdown text representation

the text that conversion source is shown below.

```
0123456 (HEAD -> main, origin/main) commit 2
0123456 commit 1
0123456 initial
```

GPT 3.5 だと行のリバースを意図したように汲み取ってもらえなかったので 4.0 にしましたが、入力側がタイムスタンプ昇順になっていればいいので linux コマンドをパイプで噛ませて最初から入力が逆順になるようにしてあげるといいかと思います。 --reverse や tac というコマンドが使えます。

git log --oneline --reverse
git log --oneline | tac

また、これは ChatGPT とは直接関係のないことですが、入力側を綺麗に出せるように人間側が意識しておくことで応用の余地が広がるというのを感じました。

例えばコミットメッセージのプレフィックスです。fix, perf, style, doc といったプレフィックスを導入していれば、grep あたりもっと本質的な変更に絞ったものだけ抽出できそうです。今回の場合だと README の変更ログなど除外したコミットもあるので、それらは ChatGPT への入力テキストを作成する時点で弾きたいんですよね。個人の素振り用レポジトリだったとはいえ、そのへんきちんとしておけばよかったなぁ、と思ったりしました。また、そのへんを振り返る過程で --no-merge, --branches など知っておくと色々便利そうなオプションがあることも知れました。そのへんのキャッチアップが促されたのがいい感じの副次効果になりました。

いろんなチャレンジや調べ物をしやすくするきっかけを与えてくれるのが良いですね。答えに近い情報が欲しい場面もありますけど、やはり自分は「自分がやろうとしていること、知りたいことのきっかけ・最初の一歩をサポートしてくれる存在」として AI と付き合うのが好きだなと思いました


追記

行の逆順を除けば、3.5 でも意図した通りに動いてくれるパターンもあるようです。
再現性はないけど、まあ仕方なさそう。

Input

0123456 initial
0123456 commit 1
0123456 (HEAD -> main, origin/main) commit 2

Output

Here is the converted markdown table:

```
| Commit hash | Description    |
|-------------|----------------|
| [0123456](https://github.com/<repository-owner>/<repository>/commit/0123456) | initial |
| [0123456](https://github.com/<repository-owner>/<repository>/commit/0123456) | commit 1 |
| [0123456](https://github.com/<repository-owner>/<repository>/commit/0123456) | commit 2 |
```

追記2

複雑な要求がうまいこと期待通りの動作をした場合、あるいは微妙に期待通りでなかった場合は できるだけ サービスにフィードバック送りましょうね。存続してほしいサービスに無料で具体的に貢献できるアクションですから。

アンサー領域の右上にある thumbs-up とかからいけます。

今回のやつに関しては、4.0 で期待通りの動作をしたときの出力に対してこんな感じで送りました。

Satisfy all requirements. thanks. In GPT 3.5, the request to reverse row order did not work as expected.

Discussion