feat(cli): 新增 AI 智能 Commit Message 生成与多语言支持
- 新增 `git air msg` 命令,支持根据暂存区或历史 Diff 自动生成 Conventional Commits 提交说明 - 支持中、英、日、韩多语言自适应及通过 CLI/配置文件/环境变量进行定制 - 完善全局配置体系,新增 `commit_lang` 选项及相关单元测试
This commit is contained in:
1 parent
4d9674831b
commit
6eda653db6
9 files changed
+457
-41
No files matched your search
+61
-26
@@ -48,6 +48,7 @@ GitHubなどのCI/CD上で動作するボットも優秀ですが、**`git-air`
|
||||
- �孱�� **繧ケ繝槭�繝医↑繝弱う繧コ髯、蜴サ**�啻go.sum` 繧� `package-lock.json`縲∬�蜍慕函謌舌&繧後◆ `*.pb.go` 繧定�蜍暮勁螟悶5oken豸郁イサ繧呈椛縺医∵晁�Ν繝シ繝励r髦イ縺弱∪縺吶�
|
||||
- �識 **蜴ウ譬シ縺ェ繧キ繝九い繧ィ繝ウ繧ク繝九い蝓コ貅�**�壹♀荳冶セ槭d辟。鬧�哨縺ッ荳蛻�↑縺励ゆクヲ陦悟�逅��遶カ蜷医√ョ繝�ラ繝ュ繝�け縲ヾQL繧、繝ウ繧ク繧ァ繧ッ繧キ繝ァ繝ウ縲¨ULL繝昴う繝ウ繧ソ縲√Μ繧ス繝シ繧ケ繝ェ繝シ繧ッ繧呈欠鞫倥@縲∝�菴鍋噪縺ェ菫ョ豁」繧ウ繝シ繝峨r逶エ謗・謠千、コ縺励∪縺吶�
|
||||
- �投 **Token豸郁イサ驥上→雋サ逕ィ縺ョ繝ェ繧「繝ォ繧ソ繧、繝�隕狗ゥ阪b繧�**�壼�蜃コ蜉婬oken謨ー繧呈ュ」遒コ縺ォ髮�ィ医@縲∝推遉セ譛譁ー縺ョ蜈ャ蠑乗侭驥題。ィ縺ォ蝓コ縺・縺�※螳溯。後さ繧ケ繝医r蜊ウ蠎ァ縺ォ險育ョ暦シ医Ο繝シ繧ォ繝ォ螳悟�繧ェ繝輔Λ繧、繝ウ繝「繝�Ν縺ッ辟。譁呵。ィ遉コ�峨�
|
||||
- 笨ィ **AI 繧ウ繝溘ャ繝医Γ繝�そ繝シ繧ク閾ェ蜍慕函謌�**�壼、画峩蟾ョ蛻�°繧� Conventional Commits 貅匁侠縺ョ鬮伜刀雉ェ縺ェ繝。繝�そ繝シ繧ク繧堤函謌撰シ�**譌・譛ャ隱槭�闍ア隱槭�髻灘嵜隱槭�荳ュ蝗ス隱�**縺ォ閾ェ蜍暮←蠢懶シ峨�
|
||||
- �搭 **繝√�繝�隕冗エ��隱ュ縺ソ霎シ縺ソ��.airules`��**�壹Μ繝昴ず繝医Μ逶エ荳九↓ `.airules` 繧帝�鄂ョ縺吶k縺�縺代〒縲√メ繝シ繝�蝗コ譛峨�繧「繝シ繧ュ繝�け繝√Ε隕冗エ�r譛蜆ェ蜈医〒驕ゥ逕ィ縲�
|
||||
- �ェ� **繝ッ繝ウ繧ッ繝ェ繝�け縺ァ Pre-commit 繝輔ャ繧ッ蛹�**�壹さ繝槭Φ繝�1逋コ縺ァGit繝輔ャ繧ッ縺ィ縺励※逋サ骭イ縲ょ些髯コ縺ェ繧ウ繝シ繝峨�繧ウ繝溘ャ繝医r譛ェ辟カ縺ォ繝悶Ο繝�け縺励∪縺吶�
|
||||
|
||||
@@ -64,46 +65,80 @@ $ git air
|
||||
繝ヲ繝シ繧カ繝シ隱崎ィシ繝上Φ繝峨Λ繝シ縺ォ Redis 繧ュ繝」繝�す繝・螻、繧定ソス蜉�縺励,ontext 縺ョ繧ソ繧、繝�繧「繧ヲ繝井シ晄眺繧剃ソョ豁」縲�
|
||||
|
||||
#### 隧ウ邏ー繝ャ繝薙Η繝シ邨先棡
|
||||
- [BLOCKER] internal/service/user.go:45 - 重大なセキュリティ脆弱性: ループ内で生SQL文字列を直接結合しています。SQLインジェクションのリスクがあります。
|
||||
// 推奨修正コード:
|
||||
db.Where("username = ?", inputName).First(&user)
|
||||
- [BLOCKER] internal/service/user.go:45 - 驥榊、ァ縺ェ繧サ繧ュ繝・繝ェ繝�ぅ�# 迚ケ螳壹�繝輔ぃ繧、繝ォ縺ョ縺ソ繧偵Ξ繝薙Η繝シ
|
||||
git air internal/service/chat.go
|
||||
|
||||
- [WARNING] internal/service/user.go:82 - 潜在的リスク: Redis 接続エラーを握りつぶしています。キャッシュ障害時にDBへ負荷が集中します。
|
||||
|
||||
- [WARNING] internal/service/user.go:103 - 並行処理の欠陥: 早期リターン時に Mutex の Unlock を忘れています(Mutex Leak)。デッドロックの危険性があります。
|
||||
|
||||
#### 結論
|
||||
- 判定: [REJECT]
|
||||
- スコア: 60 / 100
|
||||
|
||||
📊 Token: 入力 1,243 / 出力 412 | ≈ $0.0025
|
||||
─────────────────────────────────────────────────────────────────
|
||||
# 荳譎ら噪縺ォ繝「繝�Ν繧Пrovider繧呈欠螳壹@縺ヲ螳溯。�
|
||||
git air --provider deepseek --model deepseek-chat
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📦 インストール
|
||||
### 3. AI 繧ウ繝溘ャ繝医Γ繝�そ繝シ繧ク閾ェ蜍慕函謌� (`git air msg`)
|
||||
|
||||
### 方法 1: Go Install(推奨)
|
||||
```bash
|
||||
go install github.com/unclesam-ly/git-air@latest
|
||||
```
|
||||
繧ウ繝溘ャ繝医Γ繝�そ繝シ繧ク縺ョ菴懈�縺ォ謔ゥ繧蠢�ヲ√�繧ゅ≧縺ゅj縺セ縺帙s縲Agit-air` 縺後せ繝��繧ク繝ウ繧ー縺輔l縺溷キョ蛻�r蛻�梵縺励,onventional Commits 貅匁侠縺ョ繝。繝�そ繝シ繧ク繧�**螟夊ィ隱櫁�蜍暮←蠢�**縺ァ逕滓�縺励∪縺呻シ�
|
||||
|
||||
### 方法 2: ソースコードからビルド
|
||||
```bash
|
||||
git clone https://github.com/unclesam-ly/git-air.git
|
||||
cd git-air
|
||||
go build -o git-air .
|
||||
sudo mv git-air /usr/local/bin/
|
||||
# 1. 繧キ繧ケ繝�Β險隱槭r閾ェ蜍墓、懷�縺励※逕滓� & 蟇セ隧ア蝙九さ繝溘ャ繝�
|
||||
git air msg
|
||||
|
||||
# 2. 闍ア隱槭〒逕滓��医が繝シ繝励Φ繧ス繝シ繧ケ繝サ蝗ス髫帙�繝ュ繧ク繧ァ繧ッ繝亥髄縺托シ�
|
||||
git air msg -l en
|
||||
|
||||
# 3. 譌・譛ャ隱� / 髻灘嵜隱槭〒逕滓�
|
||||
git air msg -l ja
|
||||
git air msg -l ko
|
||||
|
||||
# 4. 遒コ隱阪↑縺励〒逶エ謗・ git commit 繧貞ョ溯。�
|
||||
git air msg -c
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 クイックスタート
|
||||
### 4. 繝ッ繝ウ繧ソ繝�メ縺ァ Pre-commit 繝輔ャ繧ッ繧堤匳骭イ
|
||||
|
||||
### 1. モデルと API Key の設定
|
||||
Git 繝ェ繝昴ず繝医Μ逶エ荳九〒莉・荳九r螳溯。鯉シ�
|
||||
```bash
|
||||
git air hook install
|
||||
```
|
||||
- **繧ウ繝溘ャ繝郁�蜍輔ヶ繝ュ繝�け讖溯�**�壹Ξ繝薙Η繝シ縺ァ `[BLOCKER]` 驥榊、ァ谺�髯・繧� `[REJECT]` 蛻、螳壹′讀懷�縺輔l縺溷�エ蜷医~git-air` 縺ッ髱槭ぞ繝ュ縺ョ邨ゆコ�さ繝シ繝峨〒**繧ウ繝溘ャ繝茨シ�git commit`�峨r閾ェ蜍慕噪縺ォ荳ュ譁ュ繝サ繝悶Ο繝�け**縺励∪縺呻シ�
|
||||
- **蜴ウ譬シ繝「繝シ繝� (`--strict`)**�啻[WARNING]` 隴ヲ蜻翫〒繧ゅさ繝溘ャ繝医r繝悶Ο繝�け縺励◆縺��エ蜷医� `git air --strict` 繧剃スソ逕ィ��
|
||||
- **荳譎ら噪縺ェ繝悶Ο繝�け隗」髯、**�夂キ頑・縺ァ繧ウ繝溘ャ繝医r蠑キ蛻カ縺励◆縺��エ蜷医�縲;it 讓呎コ悶� `git commit --no-verify` 縺セ縺溘� `git air --no-block` 繧剃サ倅ク弱@縺セ縺吶�
|
||||
|
||||
`git-air` は国内外の主要LLMのエンドポイントと推奨モデルを標準プリセットしています。`--provider` を指定するだけで簡単に切り替えられます:
|
||||
繝輔ャ繧ッ繧定ァ」髯、縺吶k蝣エ蜷茨シ�
|
||||
```bash
|
||||
git air hook uninstall
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 笞呻ク� 險ュ螳壹�蜆ェ蜈磯��ス�
|
||||
|
||||
1. **繧ウ繝槭Φ繝峨Λ繧、繝ウ蠑墓焚** (`--key`, `--model`, `--provider`, `--prompt`, `--lang`, `--price-input`, `--price-output`, `--strict`, `--no-block`)
|
||||
2. **迺ー蠅�、画焚** (`GIT_AIR_API_KEY`, `GIT_AIR_PROVIDER`, `GIT_AIR_MODEL`, `GIT_AIR_COMMIT_LANG`)
|
||||
3. **繝励Ο繧ク繧ァ繧ッ繝亥句挨險ュ螳�** (繝ェ繝昴ず繝医Μ逶エ荳九� `./config.yaml` 縺セ縺溘� `./.git-air.yaml`)
|
||||
4. **繧ー繝ュ繝シ繝舌Ν險ュ螳�** (`~/.git-air/config.yaml`)
|
||||
|
||||
### `config.yaml` 險ュ螳壹ヵ繧。繧、繝ォ萓具シ�
|
||||
```yaml
|
||||
# 繝励Ο繝舌う繝繝シ: gemini, claude, grok, deepseek, qwen, zhipu, moonshot, siliconflow, ollama, openai, custom
|
||||
provider: "gemini"
|
||||
api_key: "YOUR_API_KEY_HERE"
|
||||
model: "gemini-3.7-flash"
|
||||
|
||||
# 繧ォ繧ケ繧ソ繝� API 繧ィ繝ウ繝峨�繧、繝ウ繝� (莉サ諢�)
|
||||
# base_url: "https://api.deepseek.com/v1"
|
||||
|
||||
# 繧ォ繧ケ繧ソ繝� System Prompt (莉サ諢�)
|
||||
# custom_prompt: ""
|
||||
|
||||
# 繧ォ繧ケ繧ソ繝� Token 譁咎≡險ュ螳� (莉サ諢上∝腰菴�: 邀ウ繝峨Ν / 1M Tokens)
|
||||
# price_input: 0.75
|
||||
# price_output: 3.75
|
||||
|
||||
# AI 繧ウ繝溘ャ繝医Γ繝�そ繝シ繧ク險隱櫁ィュ螳� (莉サ諢�: auto, zh, en, ja, ko)
|
||||
# commit_lang: "auto"
|
||||
```LLM縺ョ繧ィ繝ウ繝峨�繧、繝ウ繝医→謗ィ螂ィ繝「繝�Ν繧呈ィ呎コ悶�繝ェ繧サ繝�ヨ縺励※縺�∪縺吶A--provider` 繧呈欠螳壹☆繧九□縺代〒邁。蜊倥↓蛻�j譖ソ縺医i繧後∪縺呻シ�
|
||||
|
||||
```bash
|
||||
# 1. Google Gemini (謗ィ螂ィ: 鬮倬溘�菴弱さ繧ケ繝�)
|
||||
|
||||
Reference in new issue
Block a user