rcmdnk's blog

Changelog: Notebook for developer | Original developer gift idea for farewell

アプリケーションのソースコードのレポジトリにはREADMEとともに CHANGELOGが置かれてることが良くありますが、 Github-changelog-generator: https://skywinder.github.io/github-changelog-generator/ を使うとGitHubで管理しているレポジトリのchange logを自動で作ることが出来ます。

Github-changelog-generator

  • https://github.com/skywinder/github-changelog-generator
  • Github-changelog-generator by skywinder: https://skywinder.github.io/github-changelog-generator/

インストールはgem

$ gem install github_changelog_generator

インストールするとgithub_changelog_generatorというコマンドが使える様になります。

使い方はchange logを作りたいレポジトリをcloneしてきてそのディレクトリに行って、

$ github_changelog_generator

をするだけ。

もしくは適当なディレクトリで

$ github_changelog_generator -u <user> -p <project (repository)>

の様にユーザー名とプロジェクト名(レポジトリ名)を入れると ローカルにそのレポジトリが無くてもchange logが作れます。

ただし、change logを作る際にGitHub APIを使って情報を取ってくるのですが、 そのままだと1時間に60回の制限があるのでちょっとしたレポジトリでも すぐに

Error: GitHub API rate limit exceeded for xxx.xxx.xxx.xx.

というエラーが出て失敗してしまいます。 ので、Access Tokenを作ってこれを回避します。

Github-changelog-generator用にはrepoにだけチェックを入れてAccess Tokenを作ります。

作ったtokenを

$ github_changelog_generator -t <token>

と言うように-tで渡してあげるとlimit exceededを回避出来ます。

もしくは

$ export CHANGELOG_GITHUB_TOKEN=<token>

の様に環境変数に設定しておくと自動的に読み込んでくれます。

よく使うなら.bashrcなどに書いておくと便利です。 ただし、dotfiles 的な感じで管理していてそれをPublicなGitHubのレポジトリに入れてる様な場合は 直接書かず、

if [ -r "~/.changelog_github_token" ]; then
  source "~/.changelog_github_token"
fi

の様なことを.bashrcに書いて、~/.changelog_github_tokenの中に上のexpot ...を書いて置きます。

これで.bashrcはdotfilesで管理して~/.changelog_github_tokenの方は dotfilesに入れなければプライベートに管理できます。(.changelog_github_tokenがない環境では無視するだけ。)

これを使って出来上がったものがこちら:

homebrew-file/CHANGELOG.md

各Releaseとそれの作成日、そしてFull Changelogというリンクがあります。 このリンクは前のReleaseとのdiffの結果のページになっています。

また、IssueやPull Requestがあった場合、 それらが完了した後に作ったReleaseの下にそれらの情報が加えられています。

ぱっと見で分かりやすく整理されています。

一方でGitHubにはもともとReleasesとうい機能があります。

上のHomebrew-fileのRelasesは

Releases · rcmdnk/homebrew-file

ここにある感じ。

各Releaseの作成日とそれへのコメント(隠れてる)と アーカイブがリストされています。

ただし、Homebrew-fileではまだ実際にReleaseを作っていません。 単にvX.X.Xというタグを作ってそれがそのままReleasesに載ってるだけです。

Creating Releases - User Documentation

上のページに従って各タグをReleaseにすると そのタグの部分が別表記になり、また、最新版のリリースにはLatest releaseタグが付きます。

Releases · rcmdnk/evernote_mail

Github-changelog-generatorに関しては単にタグのリストを見てるみたいで リリースの作業をしてもしなくても同じ様に情報を取ってくるようです。

Github-changelog-generatorとGitHubのReleasesの違いとしては

  • Github-changelog-generator: 各タグ(またはリリース)のコメントは取ってこない
  • Release: Issue等へは自動的に結び付けられない

という所。

Github-changelog-generatorの方に関して言うと、 GitHub Flow に従ってアップデートを全てPull Requestで入れていれば すべてのアップデートが表示される事になります。

一方Releaseの所でも各リリースのコメントにIssueとかの番号を入れておくことも出来ます。

自動化、という意味ではGithub-changelog-generatorでやったほうが簡単ですが、 リリースのコメントも入れられる様になれば良いのにな、と。(コマンドのヘルプを見る限りでは無さそうだった)

レポジトリにCHANGELOG.mdがあるとまたそれっぽくなるので CHANGELOGを自分で作ってない場合はGithub-changelog-generatorを使って取り敢えずでも 入れておくと良い感じになると思います。

GitHub Flowに従っていればきちんと意味のあるchange logになるので Github-changelog-generatorを使うのであればGitHub Flowに従うと良いと思います。

Sponsored Links
Sponsored Links

« Dellから世界初の無接点充電搭載のノートパソコンが発売される Amazonで流行中の詐欺に引っかかってしまった »

}