🍣

git-czを導入して、Prefixに迷わずにコミットメッセージを書く

2021/10/31に公開

以前書いた記事でCommitlintを導入して、git commit時にコミットメッセージに対する書式のチェックを行うようにしました。

https://zenn.dev/chida/articles/c46151006dc1a7

しかし、Commitlintのprefixはデフォルトで11個もあり、コミットメッセージを打つ度にどれを使おうか考えてしまうため、git-czを導入してコミット時に対話形式でPrefixを選択出来るようにします。

Prefixとは、Gitのコミットメッセージの先頭に付けるfix feat test などのことです。

まずは、git-czをインストールします。

❯ yarn global add git-cz
yarn global v1.22.11
warning package.json: No license field
[1/4] 🔍  Resolving packages...
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
warning " > ts-node@10.2.1" has unmet peer dependency "@types/node@*".
warning " > ts-node@10.2.1" has unmet peer dependency "typescript@>=2.7".
[4/4] 🔨  Building fresh packages...
success Installed "git-cz@4.8.0" with binaries:
      - git-cz
      - gitcz
✨  Done in 2.90s.

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

❯ touch ~/changelog.config.js

こちらのドキュメントにある内容をコピペして、自分用に変更します。

~/changelog.config.js
module.exports = {
  disableEmoji: false,
  format: "{type}: {subject}",
  list: [
    "fix",
    "feat",
    "refactor",
    "test",
    "style",
    "chore",
    "docs",
    "perf",
    "ci",
  ],
  maxMessageLength: 64,
  minMessageLength: 3,
  questions: ["type", "subject"],
  scopes: [],
  types: {
    chore: {
      description: "ドキュメントの生成やビルドプロセス、ライブラリなどの変更",
      value: "chore",
    },
    ci: {
      description: "CI用の設定やスクリプトに関する変更",
      value: "ci",
    },
    docs: {
      description: "ドキュメントのみの変更",
      value: "docs",
    },
    feat: {
      description: "新機能",
      value: "feat",
    },
    fix: {
      description: "不具合の修正",
      value: "fix",
    },
    perf: {
      description: "パフォーマンス改善を行うためのコードの変更",
      value: "perf",
    },
    refactor: {
      description: "バグ修正や機能の追加を行わないコードの変更",
      value: "refactor",
    },
    style: {
      description: "コードの処理に影響しない変更(スペースや書式設定など)",
      value: "style",
    },
    test: {
      description: "テストコードの変更",
      value: "test",
    },
  },
};

そしてGit管理しているプロジェクトのフォルダに移動して、何らかのファイルを編集してgit addした後にgit commitのタイミングでgit czを実行します。

❯ git cz

? Select the type of change that you're committing: 
  fix:        不具合の修正 
  feat:       新機能 
  refactor:   バグ修正や機能の追加を行わないコードの変更 
❯ test:       テストコードの変更 
  style:      コードの処理に影響しない変更(スペースや書式設定など) 
  chore:      ドキュメントの生成やビルドプロセス、ライブラリなどの変更 
  docs:       ドキュメントのみの変更 
(Move up and down to reveal more choices)

? Write a short, imperative mood description of the change: 
  [-------------------------------------------------------------] 36 chars left
   chore: eslintとprettierの導入

ログを見てみます。

❯ git log --oneline
e24c2e6 (HEAD -> main) chore: eslintとprettierの導入

問題なく機能しました。

参考

https://github.com/streamich/git-cz

Discussion