作ったものとか » Softs

git-cx

2025-01-03 11:05:35 git

gitのコミットメッセージを、コマンドラインで選択しながら構築していくツール

Conventional Commits を意識したコミットメッセージを構築するためのツールです。

ダウンロード

スクリーンショット

型の選択

型の選択

スコープの選択

スコープの選択

その他の入力

その他の入力

git log

git log

使い方

設定の生成

git cx gen

Conventional Commits の型を含む git-cx の設定をファイルとして出力します。

生成された設定を書き換えて、自身の使う複数のリポジトリー共通の設定としたり、リポジトリーごとに異なる設定にしたりすることもできます。

git cx gen --emoji で絵文字付きのテンプレートも生成できます。

生成された設定ファイル

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
headerformat: '{{.type}}{{.scope_with_parens}}{{.bang}}: {{.emoji_unicode}}{{.description}}'
headerformathint: .type, .scope, .scope_with_parens, .bang(if BREAKING CHANGE), .emoji, .emoji_unicode, .description
types:
    '# comment1':
        desc: 'comment starts with #'
        emoji: ""
    '# comment2':
        desc: This default definition is from https://github.com/angular/angular/blob/main/CONTRIBUTING.md#-commit-message-guidelines
        emoji: ""
    feat:
        desc: A new feature
        emoji: '✨'
    fix:
        desc: A bug fix
        emoji: '🐛'
    docs:
        desc: Documentation only changes
        emoji: '📝'
    refactor:
        desc: A code change that neither fixes a bug nor adds a feature
        emoji: '♻️'
    perf:
        desc: A code change that improves performance
        emoji: '⚡'
    test:
        desc: Adding missing tests or correcting existing tests
        emoji: '🧪'
    build:
        desc: Changes that affect the build system or external dependencies
        emoji: '📦'
    ci:
        desc: Changes to our CI configuration files and scripts
        emoji: '🔨'
    revert:
        desc: Reverts a previous commit
        emoji: '⏪'
denyemptytype: false
denyadlibtype: false
usebreakingchange: false

※ このサイトでは :sparkles: が ✨ に変換されるなど、絵文字向けの文字列が絵文字に変換されています。

型以外の設定

headerformat

コミットメッセージの1行目の構成を指定することができます。

1
headerformat: '{{.type}}{{.scope_with_parens}}{{.bang}}: {{.emoji_unicode}}{{.description}}'

各コンポーネントは {{.hoge}} の形式で記述します。 {{}} の外にある個所は固定の文字列として扱われます。

コンポーネント

生成された設定ファイルの2行目にある headerformathint には、記述できるコンポーネントが列挙されています。 (このフィールドは、それ自身は何か設定をしているわけではありません)

2
headerformathint: .type, .scope, .scope_with_parens, .bang(if BREAKING CHANGE), .emoji, .emoji_unicode, .description

denyemptytype

true を指定することで、型を必須にします。

denyadlibtype

true を指定することで、設定ファイルにある型しか選択できなくします。

usebreakingchange

true を指定することで、BREAKING CHANGEフッターの入力ができるようになります。

設定ファイルの置き場

生成された設定ファイル .cx.yaml を以下のいずれかの場所においておきます。

  1. gitconfig ([cx] rule={PATH_FROM_REPOS_ROOT})
  2. ワークツリーのルート
  3. 以下のディレクトリー
  4. git-cx があるディレクトリー

使い勝手が良いのは、2 か 3 でしょうか。

自分のメッセージのスタイルを一貫させたい場合は3が合っているでしょう。

一方で、共同開発する場合に設定を合わせたい場合は、2のように、そのリポジトリーに設定ファイルを含めてしまうのが良いでしょう。

スコープの候補

スコープはリポジトリー毎に内容が異なるのと、途中で増えることも想像されるため、型とは違い予め決めておく方式とはしませんでした。

入力されたスコープを記録しておき、それを候補として表示するようにしています。

ただし、予め、スコープの記録をするファイルを gitconfig で指定しておきます。

1
2
[cx]
  scopes = myscopes.yaml

scopes には、リポジトリーのルートからのパスで指定します。

このファイルには git-cx を介してコミットをした際のスコープが記録され、結果的にスコープの候補となります。

ダウンロード

ダウンロード