Commitizenとcz-emojiの設定を晒す

## 経緯

これまで[Emoji Prefix](https://github.com/atom/atom/blob/master/CONTRIBUTING.md#git-commit-messages)な文化で育ってきたけど、
共同開発をしているとルールがブレるのが気になったので、[Commitizen](https://github.com/commitizen/cz-cli)に乗り換えることにした。
とは言え、絵文字の可愛さは捨てがたいのでAdaptorには[cz-emoji](https://github.com/ngryman/cz-emoji)を使う。
ところが、cz-emojiを使うと[ConventionalなCommit Message](https://www.conventionalcommits.org/ja/v1.0.0/)ではなくなるので、cz-emojiを使いつつConventional Commitsになるようカスタマイズすることにした。

## インストール

自分の場合はOSの環境構築用スクリプトがあるので、とりあえず `Commitizen` と `cz-emoji` をグローバルにインストールすることにしている。
Commitizenを強制したいプロジェクトにはローカルでもインストールする。

```shell
npm install -g commitizen
npm install -g cz-emoji
```

## 設定

### `~/.czrc`

```json:~/.czrc
{
  "path": "cz-emoji",
  "config": {
    "cz-emoji": {
      "subjectMaxLength": 72,
      "skipQuestions": ["scope"],
      "types": [
        {
          "name": "feat",
          "code": "feat: :+1:",
          "emoji": "👍",
          "description": "Feature     (実装)"
        },
        {
          "name": "fix",
          "code": "fix: :bug:",
          "emoji": "🐛",
          "description": "Fix         (修復)"
        },
        {
          "name": "wip",
          "code": "wip: :construction:",
          "emoji": "🚧",
          "description": "WIP         (工事)"
        },
        {
          "name": "chore",
          "code": "chore: :paperclip:",
          "emoji": "📎",
          "description": "Chore       (雑務)"
        },
        {
          "name": "style",
          "code": "style: :sparkles:",
          "emoji": "✨",
          "description": "Style       (美観)"
        },
        {
          "name": "docs",
          "code": "docs: :notebook:",
          "emoji": "📓",
          "description": "Documents   (文書)"
        },
        {
          "name": "perf",
          "code": "perf: :zap:",
          "emoji": "⚡",
          "description": "Performance (改善)"
        },
        {
          "name": "refactor",
          "code": "refactor: :bulb:",
          "emoji": "💡",
          "description": "Refactoring (改築)"
        },
        {
          "name": "test",
          "code": "test: :100:",
          "emoji": "💯",
          "description": "Test        (試験)"
        },
        {
          "name": "release",
          "code": "release :tada:",
          "emoji": "🎉",
          "description": "Release     (公開)"
        }
      ]
    }
  }
}
```

### 補足

「Subjectは72文字以内」派より「50文字以内」派の権勢が強まっているが、
`docs: :notebook:` で16文字取ってしまうので、 `subjectMaxLength` は72文字にしている。
`scope` をうまく使えた試しがないので、これを機にスキップすることにした。
ついでに漢字2文字で各Typeの説明を添えた。
海外の人はぜひこれを参考にしてタトゥーを入れてほしい。

![tatoo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234167/eb4826fc-3704-25c1-4b2a-a8f6f9a7ba32.jpeg)


### `$(PROJECT_ROOT)/cz.json`

```cz.json
{"commitizen": {}}
```

### 補足

`~/.czrc` が効いてさえいれば、各プロジェクトには設定不要。

## 使い方

### Commit

```shell
git cz # or `cz c`
```

![Screen Shot 2021-02-22 at 17.29.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234167/64696efc-02ba-26e1-68d5-7bdfb7f86bcf.png)
![Screen Shot 2021-02-22 at 17.30.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234167/81884937-504a-0684-c69c-bdfcaa8ad047.png)

### Log

![Screen Shot 2021-02-22 at 17.31.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234167/e7b699b5-37f6-fc59-b4f2-eabcedc7f1aa.png)

### Bump

cz-emojiのせいなのか、 `cz bump` コマンドが使えなくなるので、
[standard-version](https://github.com/conventional-changelog/standard-version)を別途インストールする。
とは言え、自分の場合、ライブラリを開発することはほとんどないので[SemVar](https://semver.org/lang/ja/)したいこともなく、入れないことの方が多い。

```shell
npm install standard-version
```

```package.json
  "scripts": {
    "cz": "git-cz",
    "release:patch": "standard-version --release-as patch",
    "release:minor": "standard-version --release-as minor",
    "release:major": "standard-version --release-as major"
  },
```

## 参考

- [diff001a/cz-emoji-japanese - GitHub](https://github.com/diff001a/cz-emoji-japanese)
- [standard-versionとgit-czを使って、CHANGELOGやバージョンを日本語で管理しよう！ - Zenn](https://zenn.dev/uttk/articles/a3379837de7cd567a52f)