作者:UncleSam
プロジェクトのオープンソースURL:github.com/unclesam-ly/git-air
01. きっかけ:AIでコードを書くのは一瞬、レビューは地獄
今のエンジニアは、コードを書くのに AI の補助なしではいられなくなっています(Cursor、Copilot、各種大規模言語モデルのプラグインなど)。
数秒で数百行のコードをバーッと生成できて、開発スピードは確かに爆速です。
でも、どんどん頭を悩ませる痛いポイントに気づいていませんか?
- AI が書いたコードは「完璧に見えすぎる」:整形もコメントも美しく、文法にも一切のミスがないため、つい盲目的に信頼してしまう;
- 生成した AI に「バグはある?」と聞いても、自画自賛しかしない:同じ会話の文脈の中では、コードを生成した AI は強い「思考の慣性」と「ナルシズム的な幻覚」を持ちがちで、「この書き方で合ってる?」と聞けば、たいてい自信満々に「コードは完全に正しい、ロジックは非常に堅牢です!」と答えます;
-
人間の目では、潜んだ落とし穴を見つけるのは極めて難しい:例えば、ある見えにくい
if err != nilの early return でアンロックし忘れていたり(Mutex リーク)、ゴルーチン内部にrecoverがなかったり、ループ内で未クローズのコネクションを頻繁に作っていたり……こういった問題はパッと見ただけでは見逃しやすいのです。
これが、AI がコードを大量生産し、人間のエンジニアが深夜の本番障害で尻拭いをするという、気まずい堂々巡りを生みます。
そこで思いついたのが:「チャットの文脈から完全に切り離された、独立していて冷徹な"第三者レビュアー"を、ローカルでコミット前に拡大鏡で厳しくチェックさせる」ことができないか?
そうして午後まるごと使って、Go でこの軽量な CLI の小さいおもちゃ——git-air を書きました。
02. このおもちゃは何をするの?
簡単に言うと、あなたの席の隣に座っている、ちょっと口は悪いけど目は驚くほど鋭いベテランアーキテクトの同僚のようなものです。
手書きか AI 生成かなんて一切気にしませんし、会話の文脈にも一切影響されません。ターミナルでコードを書き終えたら、コマンドラインで一行叩くだけ:
git air
すると、変更したコードの差分(git diff)を自動で取得し、最も厳しい視点でスキャンして、ターミナルにレビュー意見を一字一句吐き出します:
[git-air] コードレビュー中... (Engine: gemini / gemini-3.7-flash)
─────────────────────────────────────────────────────────────────
#### 変更概要
ユーザーログインAPIにRedisキャッシュのロジックを追加しました。
#### 詳細レビュー意見
- [BLOCKER] internal/service/user.go:45 - 致命的欠陥:ループ内でSQL文字列を直接連結しており、明らかなSQLインジェクションのリスクがあり、パラメータのバリデーションも行われていません。
// 修正コード
db.Where("username = ?", inputName).First(&user)
- [WARNING] internal/service/user.go:82 - 潜在的なリスク:Redisのクエリに失敗したエラーを無視しており、キャッシュの落雷(キャッシュストーム)が起きた際に全トラフィックがDBに押し寄せます。
- [WARNING] internal/service/user.go:103 - リソースリーク:AIが生成したコードは early return の分岐で defer unlock() を呼んでおらず、並行処理でのデッドロックのリスクがあります。
#### レビュー結論
- 結論: [REJECT]
- スコア: 60 / 100
─────────────────────────────────────────────────────────────────
偽りのお世辞もなく、「全体的に素晴らしいですね」といったリップサービスもなし。バグがあればバグと言い、修正前後のコードパッチまで直接提示してくれます。
AI の拡大鏡で、AI が生成したコードをレビューする——これこそ**「魔法で魔法を倒す」**というわけです。
03. どんな面白い特徴があるの?
数百行の Go コードでできた小さなおもちゃですが、小さいながらも必要な機能はしっかり揃っています:
1. 空気のように軽い(超高速シングルバイナリ)
純粋な Go で書かれており、複雑なバックグラウンドのデーモンも不要、Docker も不要。go install でインストールすれば独立した小さなツールになり、git status を叩くのと同じ感覚で使えます。
2. トークンを無駄にしない(スマートなノイズ除去)
普段の git diff は、数万行の go.sum や package-lock.json、自動生成された *.pb.go など、うんざりするようなファイルをたくさん引き連れてきます。
git-air はこうしたゴミのようなロックファイルを自動でフィルタリングし、本当に手書きしたコアコードだけを AI に送るので、コストも時間も節約できます。
3. 世の中の大規模言語モデルが全部使える
好きなモデルを使えます。国内外のほぼすべての大規模モデルの公式エンドポイントがあらかじめ組み込まれており、一行コマンドで切り替えられます:
- 超高速で安く済ませたいなら:Google Gemini;
- 深いロジック推論を見たいなら:DeepSeek;
- コードを外部に送るのが不安なら:ローカルの Ollama(100% オフラインのプライバシーレビュー、ネットが切れても動きます);
- ほかにも Claude-3.7、Grok、通義千問 Qwen、智譜 GLM、Kimi、OpenAI など、好きなものを選べます。
4. チームルール(.airules)
プロジェクトのルートに .airules というファイルを置いて、チームの鉄の掟(例えば、「生SQLを書くの禁止」「並行処理は必ずContextを渡す」)を書き込んでください。
AI はレビュー時にあなたたち専用の家訓を基準にコードをチェックするので、チーム全体のコードスタイル統一に特に役立ちます。
04. どうやって使うの?
手元に Go 環境さえあれば、2ステップで完了です:
ステップ1:インストール
go install github.com/unclesam-ly/git-air@latest
ステップ2:キーを設定
例えば Gemini を使う場合(おすすめ、爆速です):
git air config set --provider gemini --key "あなたのAPI_KEY"
または DeepSeek を使う場合:
git air config set --provider deepseek --key "あなたのKEY" --model deepseek-chat
ステップ3:あとは実行するだけ!
好きな Git プロジェクトのディレクトリに入って:
# 現在の変更コードをレビューする
git air
# 直前にコミットした内容をレビューする
git air HEAD~1
# 特定のファイルだけをレビューする
git air internal/service/chat.go
さらに git air hook install と一行叩けば、自動で Git のコミットブロッカーの門番になり、高危険度のコードがコミットされる際にターミナルで教えてくれます。
05. 結び
これを作ったのは、大げさな「企業のデジタル革命」を起こすためではなく、AI でコードを書く効率を享受しつつ、冷静で客観的な「門番」を一人増やして、低レベルなバグを少しでも減らし、無意味な残業を少しでも減らすためです。
ついでに、かなりかわいいマスコットのロゴも描きました:フライトゴーグルを頭につけ、小さなマントを羽織り、拡大鏡でバグを探す Go のホリネズミ(gopher)です。
コードは GitHub で完全にオープンソース化しており、全部で数百行の Go コードで、構成はとてもクリーンです。普段からコマンドラインをヘビーに使っている方なら、ぜひおもちゃとして遊んでみてください。Star を押したり、PR を投げて一緒に改良したりも大歓迎です!
🔗 GitHub リポジトリ:https://github.com/unclesam-ly/git-air