LoginSignup
0
0

More than 1 year has passed since last update.

Git logからChangeLogを自動生成する方法を考えたら、その考え自体が不適切だったという話

Last updated at Posted at 2021-06-30

Gitでコード管理してる自作ソフトをDebianパッケージにしたいとき、標準的な構成を自動生成できないかと考えました。標準的な構成とは何か、ですが、/usr/share/doc/(パッケージ名)の下にNEWS, ChangeLog, copyrightがあるくらいでしょうか(色々見た限りでは決まりは無いようで、単なる慣習だろうと思います)。copyrightは自分で用意してやるほかありませんが、ChangeLogはgit logコマンドで適当に作れそうだな、と思ったのが事の始まりです。

実際、そのような趣旨の記事やQ&Aページは沢山見つかります。下記はそのほんの一部。

ところがDebianパッケージのChangeLogを調べると、多くは次の書式を採用しています。

パッケージ名 (バージョン番号) stable/unstable/それに類する単語; urgency=low/medium/high
  * 更新内容の説明
 -- 作業者名 <メールアドレス>  曜日, 日 月 年 時刻 +GMT

前述の記事たちに、このような書式に整形する内容はありませんでした。

Gitでコード管理しているなら、

  • パッケージ名=リポジトリ名 … basename `pwd` すればOK
  • 更新内容の説明 … git logのコミットメッセージそのまま
  • 作業者名 … git config --listからuser.nameを取ってくればOK
  • メールアドレス … 同じくuser.emailを取ってくればOK
  • 日時 … 上のページたちにあるようにgit logに--prettyだの--decorateだのつければなんとかなる

んですが、バージョン番号やstable/unstable、urgencyなどはGitで管理してません。

残念でした、おしまい、とするのは何だかなので、背景をもう少し調べてみました。そもそもChangeLogとはどういうものなのか。

上記のページは大変参考になります。これらによれば、

  • git commitはコードの差分を端的に言語化するもので、説明的であってはならない
  • ChangeLogは開発者間のコミュニケーションの拠り所とするものなので、説明的でなければならない

のがそれぞれの趣旨である、と。相容れません。

もう一つ、ChangeLogでは

 - Mention whether you follow Semantic Versioning.

とされていて、気持ちとしてはSemantic Versioningに従うことを推奨されている雰囲気があります。
Semantic Versioningについては↓をご参照下さい。

一方、Gitの哲学では(完全に理解しているわけではありませんが、恐らく)コード管理するのに明示的なバージョン番号は不要、という考え方があります。これも相容れません。

ですから正しいやり方は、Git logからChangeLogを作るのではなくChangeLogを先に書き、それに基づいてGit操作する、具体的には、

  • ChangeLogに非説明的な見出しを付けて、それを抽出してコミットメッセージにする
  • Semantic Versioningに基づいてバージョン番号を自分で付け、それをコミットのタグにする
  • stable/unstableはブランチを分ける
  • urgencyはSemantic Versioningと整合するように自分で決める(Gitに明示的情報として残すのは諦める)

ということになろうかと思います。こちらはある程度自動化できそうです。

異論・反論・反証を歓迎します。調べが足りない部分もあろうと思いますので。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0