Open1

commitlint と commitizen を使ってコミットメッセージの形式を統一する方法

なつきなつき

この記事では、コミットメッセージの形式を統一して、チーム開発やレビューを効率的にするためのツールである commitlint と commitizen の使い方について紹介します。commitlint はコミットメッセージがあらかじめ決められたルールに従っているかをチェックし、commitizen は対話式のプロンプトでコミットメッセージを作成することができます。これらのツールを組み合わせることで、コミットメッセージの品質を向上させることができます。

commitlint の導入

commitlintのパッケージと共有設定のパッケージをインストールします。

yarn add -D @commitlint/config-conventional @commitlint/cli 

commitlint の設定ファイルを作成します。

echo "module.exports = { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js

husky をインストールして、Git のフックを有効化します。

yarn add -D husky
yarn husky install

commit-msg フックに commitlint を実行するスクリプトを追加します。

npx husky add .husky/commit-msg  'npx --no -- commitlint --edit ${1}'

commitizen の導入

commitizen のパッケージとアダプターのパッケージをインストールします。

yarn add -D commitizen cz-conventional-changelog 

commitizen の設定ファイルを作成します。

echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc

package.json に commit スクリプトを追加します。

package.json
{
    "scripts": {
        ...,
        "commit": "cz"
    }
}

コミット

変更をステージングして、コミットします。

git add .
yarn commit
cz-cli@4.3.0, cz-conventional-changelog@3.3.0

? Select the type of change that you're committing: chore:    Other changes that don't modify src or test files
? What is the scope of this change (e.g. component or file name): (press enter to skip) core
? Write a short, imperative tense description of the change (max 87 chars):
 (17) lint on commigmsg
? Provide a longer description of the change: (press enter to skip)
 
? Are there any breaking changes? No
? Does this change affect any open issues? No