Closed3

commitzenによるコミットメッセージの定型文化

chima91chima91

はじめに

コミットメッセージをいつもテキトーに書いてしまう自分の悪い癖を直すため、かつ、チーム開発で定められたフォーマットに沿ってコミットメッセージを書くために、commitizenというツールを導入する。

https://github.com/commitizen/cz-cli

これを使えば、対話的に、フォーマットに沿ったコミットメッセージを書くことができる。

commitizenの導入

% npm i -g commitizen

commitizenの使用

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

package.jsonscriptsを書き、コミットするときは、git commitの代わりにnpm run commit を実行する、、

% npm run commit

> hogehoge@1.0.0 commit
> commitizen

  Commitizen has two command line tools:

    1) cz         -- used for making commits according to convention
                     note: you can run 'git cz' if installed with -g
    2) git-cz     -- alias for 'cz'
    3) commitizen -- used for installing adapters into your project

  Generally if you're using someone else's repo and they've already set up an
  adapter, you're going to just be running:

       cz

  However, if you create a new repo and you want to make it easier for future
  contributors to follow your commit message conventions using commitizen then
  you'll need to run a command like this one to add this adapter to your config:

       commitizen init cz-conventional-changelog --save

  You should swap out cz-conventional-changelog for the NPM package name of the
  adapter you wish you install in your project's package.json.

  Detailed usage:

    1) commitizen <sub-command>

       init <adapter-npm-name> [args]

         description: Install a commitizen adapter from npm and adds it to your
                      config.commitizen in your package.json file.

         args:
           --save         Install the adapter to package.json dependencies
           --save-dev     Install the adapter to devDependencies
           --save-exact   Install an exact version instead of a range
           --force        Force install the adapter, even if a previous one exists.

    2) cz <any regular git commit arguments>

        description: Runs the commitizen prompter, asking you questions so that you
                     follow the commit conventions of the repository of the current
                     directory.

                     note: cz may even be run as 'git cz' if installed with -g.

のだが、現状だと、フォーマットをインストールしていないため、commitizenの使い方が出力されて終わってしまう。

Commitizen has two command line tools:

commitizenには2つのコマンドラインツールがあるよと言っている。

  • 一つ目は、czgit-czczのエイリアス)
    • フォーマット(commitizenではadapterと呼んでいる)に従ってコミットするために使用する。チーム開発などで、既にフォーマットが設定されている場合は、czを実行するだけ。
  • 二つ目は、commitizen
    • プロジェクトにフォーマットをインストールするために使用する。新しいリポジトリを作成し、今後のコミットメッセージがフォーマットに従うようにしたい場合はcommitizen init [好きなフォーマット] --save-dev --save-exactを実行する。フォーマットはGitHubにいろいろ用意されているので、自分やチームに合ったものを選択可能。

今回は公式のGitHubでも例として使われている、cz-conventional-changelogを使ってみる。

% commitizen init cz-conventional-changelog --save-dev --save-exact

フォーマットが設定できたので、scriptscommitizenからczに書き換える。

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

これで、npm run commitをすると、対話形式でコミットを行うことができるようになる。

chima91chima91

cz-emoji

cz-emojiというフォーマットを使ってみる。

% npm i -D cz-emoji

package.jsonに以下を追記。

package.json
"config": {
   "commitizen": {
     "path": "./node_modules/cz-emoji"
   }
 }

このコマンドを打つだけでもok。

commitizen init cz-emoji --save-dev --save-exact

czを実行すると、

% cz
cz-cli@4.2.4, cz-emoji@1.3.1

? Select the type of change you're committing: (Use arrow keys or type to search)
❯ style         🎨  Improving structure / format of the code. 
  perf          ⚡️  Improving performance. 
  prune         🔥  Removing code or files. 
  fix           🐛  Fixing a bug. 
  quickfix      🚑  Critical hotfix. 
  feature       ✨  Introducing new features. 
  docs          📝  Writing docs. 
(Move up and down to reveal more choices)

こんな感じで絵文字付きのフォーマットに沿ったコミットメッセージを作ることができる。

chima91chima91

commitlintと併用する

commitlintはフォーマットに沿っていないコミットメッセージを弾いてくれるもの。
commitlintの各種パッケージをインストールする。

% npm i -D @commitlint/cli @commitlint/config-conventional @commitlint/cz-commitlint

commitlintの設定ファイルを作成し、package.jsonの設定も変更する。

commitlint.config.js
module.exports = {extends: ['@commitlint/config-conventional']};
package.json
...,
"config": {
    "commitizen": {
      "path": "@commitlint/cz-commitlint"
    }
  },
...,

huskyもインストールし、コミット時にコミットメッセージをcommitlintでチェックするようにする。

% npm i -D husky
% npx husky install
% npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'

インストール後に自動的にGitフックを有効にするには、package.jsonにnpmスクリプトを追加しておく。

% npm set-script prepare "husky install"
このスクラップは2023/07/22にクローズされました