トップ画像
コミットメッセージとバージョンアップとタグ付けと更新履歴を自動化しよう

執筆者: sasigume

最終更新: 9/23/2021

コミットメッセージの構文を統一し、レポジトリのCHANGELOG.mdの更新とタグ付けを自動化します。

参考


この記事でやること

  • コミットメッセージの記法を統一
  • 更新履歴とタグの自動化


前提知識

Conventional Commits

https://www.conventionalcommits.org/ja/v1.0.0/

Conventional Commits の仕様はコミットメッセージのための軽量の規約です。 明示的なコミット履歴を作成するための簡単なルールを提供します。この規則に従うことで自動化ツールの導入を簡単にします。 コミットメッセージで機能追加・修正・破壊的変更などを説明することで、この規約は SemVer と協調動作します。


SemVerは流石に知ってたんですが、私はこれを知らずに思考停止でコミットメッセージ書いてたんですよ。いけませんね。

VSCodeにConventional Commitsの拡張機能を入れる

https://marketplace.visualstudio.com/items?itemName=vivaxy.vscode-conventional-commits

▲これを入れます。


レポジトリパネルに丸マークが出ます。

commitlintのhookを用意する

次に、コミットメッセージを制限します。

yarn add -D husky @commitlint/{config-conventional,cli} 
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js

Windowsでは @commitlint/config-conventional @commitlint/cli という風に分けて書きます。

commitlint.config.js がルートに作成されているか確認してください。

yarn husky install
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'

上記コマンドでhookを用意します。

package.json

{
  (...略)
  "config": {
    "commitizen": {
      "path": "cz-conventional-changelog"
    }
  },
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  }
}

package.json を編集。これでcommit-msg のhookが準備できました。

この状態で適当なコミットをすると、「Conventional Commitsの記法になってない」という理由で怒られます。

はじめてのConventional Commit


変更をステージしてから、さっきの丸マークを押します。


あとは画面の指示に従って選択肢を選びます。まずは「タイプ」。


次に「スコープ」。コミットが関係する領域です。一回作れば使いまわせます。

その後「絵文字」「概要」「詳細」「関係するissue」の順番で書いていきます。


Conventional Commitの記法に従って、以下のメッセージが生成されます。

<タイプ>(スコープ):(絵文字) 概要
詳細
関係するissue

issueを閉じたいなら、最後(手順6/6)にclose #1 と書けばいいんです。

standard-versionで更新履歴とタグを自動化

yarn add -D standard-version

めっちゃ便利な神パッケージです。CHANGELOG.md を自動で書いてくれます。

package.json

{
  (略)
  "scripts": {
    "release": "standard-version",
    "push": "git push --follow-tags origin main"
    (略)
  },
 (略)
}

releaseコマンドで作業をトリガーします。

初回リリース

yarn run release --first-release

初回は--first-release オプションをつけます。

yarn run release
# yarn run v1.22.11
# $ standard-version
# ✔ bumping version in package.json from 0.1.1 to 0.1.2
# ✔ outputting changes to CHANGELOG.md
# ✔ committing package.json and CHANGELOG.md
# ✔ tagging release v0.1.2
# ℹ Run `git push --follow-tags origin main` to publish
# ✨  Done in 4.70s

これでバージョンが上がってタグが付き、更新履歴が自動で更新されます。

CHANGELOG.md

# Changelog


All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.


### [0.1.3](https://github.com/sasigume/project-21600/compare/v0.1.2...v0.1.3) (2021-09-16)


### [0.1.2](https://github.com/sasigume/project-21600/compare/v0.1.1...v0.1.2) (2021-09-16)



### Bug Fixes


* **lint:** :ambulance: commitlintの余計な打ち間違いを削除 ([8aa522f](https://github.com/sasigume/project-21600/commit/8aa522f1333f2fd2df60c8d2e285b8e7b8d60e2a)), closes [#1](https://github.com/sasigume/project-21600/issues/1)

自動生成された結果です。改行が無駄に多い気がしますね。

バージョン指定

なおyarn run release --release-as x.x.x でバージョン指定もできます。

最後にyarn run pushタグ付きでプッシュしましょう。

取得に失敗しました

2021年度 入部

Twitter GitHub YouTube