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 リリースのメッセージボディ

demo

GitHub Releasesのページは自動的にtagについてるメッセージを読み取って表示してくれます。

NOTE

微妙にバグっぽい挙動があって、この-mでつけたメッセージはMarkdownも指定は出来るのですが、 なぜかh1タグ等が無視されている気がします。 ただし、RSSなどにはちゃんと# titleなどがレンダリングされて表示されます。

リリースとリリースノートの自動化

汎用的なものはまだ無いですが、npm(node.js)向けには以下のようなツールを使うとgit tagとリリースノート(CHANGELOG)を自動的に生成出来ます。

release-changelog <increment> [options]

gif

このツールはwebpro/release-itajoslin/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を自動生成するツールは他にも幾つかあります

おわりに

最近では多くのソフトウェアやライブラリがリリースしてもGitHubだけで完結しているものが増えました。 しかし、GitHubのReleaseをちゃんと使ってるものはそこまで多くはありません。(変更内容がコミットを見ないと分からない)

個人的にはもっとGitHubがリリースしやすい機能(リリースノートを書きやすい機能)を入れてくれるのがいいですが、現状でもgit tag -a "annotation title" -m "release message body"を使うことで自動的にリリースメッセージを入れることができると思います。

GitHub Releaseは自動的にパーマネントリンクが作成されるという意味でも言及しやすくなるので有用です。何でも自動化するのは現実的じゃない面がでてきますが、もっと活用する方法がでてくるといいなーと思います。

結論: もっとリリースノート書いて下さい。