Gem
ChangeLog
CHANGELOG.md

Changelogの更新で消耗しないための自動化

この記事は SmartDrive Advent Calendar 2017の14日目の記事です。
こんにちは、SmartDriveでフロントエンドエンジニアをしている@kefi3104です。

Changelogの更新、めんどくさいですよね?
今日はGitHub Changelog Generatorを使ったChangelogの自動化をやってみたので、その簡単な手順をご紹介します。

GitHub Changelog Generatorとは

GitHub上のタグやマージ済みのプルリク、Issue、ラベルを利用してChangelogを自動で生成してくれるgemです。
つまり、GitHubにコミットしている内容からChangelogを勝手に作ってくれるので、Changelogの更新で消耗しなくて済むというわけです!

準備

GitHub Changelog Generatorをgemでインストールします。

$ sudo gem install github-changelog-generator

GitHub tokenを取得します。
scopeはrepoのみ選択します。
image.png

取得したtokenを環境変数に設定します。

~/.bash_profile
export CHANGELOG_GITHUB_TOKEN="取得したGitHub token"

作業ディレクトリでのsourceも忘れずに

$ source ~/.bash_profile

ここまでで準備完了です。

Changelog更新

準備ができたら、以下のコマンドで生成開始です!

github_changelog_generator -u <ユーザー名> -p <プロジェクト名>

以上で、しばらく待てばChangelogが自動で生成されます!すごく簡単ですね!

出力内容のカスタマイズ

デフォルトではサンプルのようなChangelogが吐き出されます。
変更内容がいくつかの区分に分けられていますが、これらはプルリクに設定したラベルに基づいています。

デフォルトでは、

  • Implemented enhancements:は「enhancements」ラベル
  • Fixed bugs:は「bug」ラベル
  • Merged pull requests:は上記ラベル以外(除外設定されているものを除く)

が割り当てられています。

これらは、.github_changelog_generatorをプロジェクトのルートディレクトリに作成し、オプションを記述することで変更が可能です。

例えば、私は以下のようなオプション設定を行っています。

 .github_changelog_generator
pr-label=### Added
enhancement-label=### Changed
bugs-label=### Fixed
enhancement-labels=enhancement,change
bug_labels=bug,hotfix
exclude-labels=release
unreleased-label=Unreleased

 オプション設定によって以下のように変更しました、

  • pr-labelによってMerged pull requests:Added
  • enhancement-labelによってImplemented enhancements:Changed
  • bugs-labelによってFixed bugs:Fixed

他にも、enhancement-labelsbug_labelsで該当するラベルを設定することで、変更内容を好きな区分に振り分けることができます。
また、私はmasterへのプルリクをAddedに入れたくなかったので、リリース系のプルリクには「release」ラベルを割り振ってexclude-labels=releaseとしました。

GitHub Changelog Generatorを導入してみて

今日のリリースで早速使用してみました!すごく便利!
が、ラベルを設定していなかったプルリクが多かったので、改めてラベルを振る作業が必要に :innocent:
とはいえ、リリース内容の管理の一環として、プルリクにきちんとラベル振るようになったのは良かったと思っています。

これでChangelogの生成が自動化されたので、今度はgh-release辺りとうまく組み合わせて、リリース作業を自動化してみたいと思います。