Git tagとGitHub ReleasesとCHANGELOG.mdの自動化について
GitHub Releases
GitHubには Releases という機能があります。
簡単に言えば、gitのtagやbranchに文章や添付ファイルを追加して公開出来るページです。
基本的にはgit tagと連携してるので、tagを付けてgit push --tags
をしていれば、自動的に追加されます。
メリットとしては以下のような事が行えます。
- git tagにパーマネントリンクがつく(重要!)
- メッセージ(リリースノート等)が書ける
- 添付ファイル(zip)をアップロード出来る(配布するバイナリとか)
- RSS Feedsが自動的に生成される(TagとReleaseの2種類がある)
- ライブラリ等にtagがついてると利用しやすい。
git tagとGitHub Rleases
git tagでつけたものが自動的にReleaseになるのは知ってる人が多いと思いますが、 この時にメッセージも自動的に入れることも出来ます。
以下にサンプルのリポジトリを用意してあります。
具体的にはgit tagを付けるときに-a
と-m
オプションでそれぞれタイトルとメッセージを指定出来ます。
git tag -a "annotation title" -m "release message body"
-a
リリースのタイトル-m
リリースのメッセージボディ
GitHub Releasesのページは自動的にtagについてるメッセージを読み取って表示してくれます。
NOTE
微妙にバグっぽい挙動があって、この-m
でつけたメッセージはMarkdownも指定は出来るのですが、
なぜかh1タグ等が無視されている気がします。
ただし、RSSなどにはちゃんと# title
などがレンダリングされて表示されます。
リリースとリリースノートの自動化
汎用的なものはまだ無いですが、npm(node.js)向けには以下のようなツールを使うとgit tagとリリースノート(CHANGELOG)を自動的に生成出来ます。
release-changelog <increment> [options]
このツールはwebpro/release-itとajoslin/conventional-changelogをラップしたツールです。
webpro/release-it はpackage.json等のversion更新とgit tagとnpm publish等を一括で行ってくれます。
ajoslin/conventional-changelog はAngularJSの Git Commit Guidelinesにしたがってコミットを書くと自動的にCHANGELOG.md
ファイルを生成出来ます。
azu/release-changelogはこの2つをまとめたツールです
- CHANGELOG.mdを自動生成
git tag -m
にそのバージョンの変更内容を自動的に追加- release-itでtag付け+release
release-changelog
のオプションはrelease-itと全く同じです。
これでReleaseした内容は以下で見られます。
先ほど書いたように自動的にレンダリングされない部分があったりするのは若干微妙ですが、RSSなどはちゃんとレンダリングされた状態で出てくるので何もしないよりはいい感じです。
npmのものしか対応してないので、もっといろんなものに柔軟に拡張して対応できるものが欲しい…
その他
CHANGELOGを自動生成するツールは他にも幾つかあります
- infews/anchorman
- jasmine jasmine/release_notes at v2.0.0 · pivotal/jasmine で使われてる
- lalitkapoor/github-changes
- コミットメッセージやマージメッセージから生成
- olivierlacan/keep-a-changelog
- ChangelogHQ - Hosted Changelog for Your Company
- changelogを作るサービス
- defunctzombie/changelog
- リリースとChangelog生成
おわりに
最近では多くのソフトウェアやライブラリがリリースしてもGitHubだけで完結しているものが増えました。 しかし、GitHubのReleaseをちゃんと使ってるものはそこまで多くはありません。(変更内容がコミットを見ないと分からない)
個人的にはもっとGitHubがリリースしやすい機能(リリースノートを書きやすい機能)を入れてくれるのがいいですが、現状でもgit tag -a "annotation title" -m "release message body"
を使うことで自動的にリリースメッセージを入れることができると思います。
GitHub Releaseは自動的にパーマネントリンクが作成されるという意味でも言及しやすくなるので有用です。何でも自動化するのは現実的じゃない面がでてきますが、もっと活用する方法がでてくるといいなーと思います。
結論: もっとリリースノート書いて下さい。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。