Open6
Conventional Commits に従ったコミットメッセージを簡単に書く方法を模索する
Conventional Commits に従ったコミットメッセージをいかに手間を減らして書くかを試行錯誤します。
Background
- 普段は手打ちでコミットメッセージを書いている
- 基本的には手癖で書けるが、関連する絵文字を忘れがち
- いい感じのツールがあるならそれを使ってチームにも紹介したい
- streamich/git-cz が一番いい感じだけど、 scope が手入力できないのがモヤりポイント
Goal
- 次のような Conventional Commits に従ったコミットメッセージを楽に書くことができること。
- <description> の冒頭には <type> と関連付けられた絵文字を記載する
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
Option
npm
- commitizen/cz-cli + leoforfree/cz-customizable
- commitizen/cz-cli + withblocks/cz-customizable
- commitizen/cz-cli + streamich/git-cz
- commitizen/cz-cli + ngryman/cz-emoji
- [commitizen/cz-cli + ]Zhengqbbb/cz-git
fish
Rus
Conclusion
次の組み合わせが良さそう
感想
- 似たような名前、似たような機能が沢山あって迷った
- ChatGPT に相談しながら作業したけど惑わされただけだった
cz-git
Install
npm install -g cz-git commitizen
echo '{ "path": "cz-git", "$schema": "https://cdn.jsdelivr.net/gh/Zhengqbbb/cz-git@1.11.0/docs/public/schema/cz-git.json" }' > ~/.czrc
Configuration
~/.commitlintrc.json
{
"rules": {
},
"prompt": {
"alias": { "fd": "docs: fix typos" },
"messages": {
"type": "Select the type of change that you're committing:",
"scope": "Denote the SCOPE of this change (optional):",
"customScope": "Denote the SCOPE of this change:",
"subject": "Write a SHORT, IMPERATIVE tense description of the change:\n",
"body": "Provide a LONGER description of the change (optional). Use \"|\" to break new line:\n",
"breaking": "List any BREAKING CHANGES (optional). Use \"|\" to break new line:\n",
"footerPrefixesSelect": "Select the ISSUES type of changeList by this change (optional):",
"customFooterPrefix": "Input ISSUES prefix:",
"footer": "List any ISSUES by this change. E.g.: #31, #34:\n",
"generatingByAI": "Generating your AI commit subject...",
"generatedSelectByAI": "Select suitable subject by AI generated:",
"confirmCommit": "Are you sure you want to proceed with the commit above?"
},
"types": [
{ "value": "feat", "name": "feat: ✨ A new feature", "emoji": "✨" },
{ "value": "fix", "name": "fix: 🐛 A bug fix", "emoji": "🐛" },
{ "value": "docs", "name": "docs: 📝 Documentation only changes", "emoji": "📝 " },
{ "value": "style", "name": "style: 💄 Changes that do not affect the meaning of the code", "emoji": "💄" },
{ "value": "refactor", "name": "refactor: ☘️ A code change that neither fixes a bug nor adds a feature", "emoji": "☘️" },
{ "value": "perf", "name": "perf: ⚡️ A code change that improves performance", "emoji": "⚡️" },
{ "value": "test", "name": "test: ✅ Adding missing tests or correcting existing tests", "emoji": "✅" },
{ "value": "build", "name": "build: 📦️ Changes that affect the build system or external dependencies", "emoji": "📦️" },
{ "value": "ci", "name": "ci: 🎡 Changes to our CI configuration files and scripts", "emoji": "🎡" },
{ "value": "chore", "name": "chore: 🔨 Other changes that don't modify src or test files", "emoji": "🔨" },
{ "value": "revert", "name": "revert: ⏪️ Reverts a previous commit", "emoji": "⏪️" }
],
"useEmoji": true,
"emojiAlign": "center",
"useAI": false,
"aiNumber": 1,
"themeColorCode": "",
"scopes": ["git","github","terraform","docker","script"],
"allowCustomScopes": true,
"allowEmptyScopes": true,
"customScopesAlign": "bottom",
"customScopesAlias": "custom",
"emptyScopesAlias": "empty",
"upperCaseSubject": false,
"markBreakingChangeMode": false,
"allowBreakingChanges": ["feat", "fix"],
"breaklineNumber": 100,
"breaklineChar": "|",
"skipQuestions": [],
"issuePrefixes": [{ "value": "closed", "name": "closed: ISSUES has been processed" }],
"customIssuePrefixAlign": "top",
"emptyIssuePrefixAlias": "skip",
"customIssuePrefixAlias": "custom",
"allowCustomIssuePrefix": true,
"allowEmptyIssuePrefix": true,
"confirmColorize": true,
"minSubjectLength": 0,
"defaultBody": "",
"defaultIssues": "",
"defaultScope": "",
"defaultSubject": ""
}
}
実行結果
leoforfree/cz-customizable
git-cz
- スゴく良い
- scope が選択式でしか入力できないのだけ悩みポイント