Claude Code の生成コードをローカル LLM でレビューする 3 つの構成パターン

Claude Code は強力なコード生成能力を持ちますが、生成されたコードを別の視点でレビューしたい場面があります。クラウド API にコードを送りたくない場合や、コスト削減のためにローカル LLM を活用したい場合です。

この記事では、Ollama + Qwen3(ローカル LLM)と OpenHands(オープンソースのコーディングエージェント)を組み合わせて、Claude Code の生成コードを自動レビューする 3 つの構成パターンを紹介します。

前提となる構成

以下のツールがインストール済みであることを前提とします。

ツール役割インストール
Claude Codeコード生成(エージェント)npm install -g @anthropic-ai/claude-code
Ollamaローカル LLM 実行(ランタイム)ollama.com
Qwen3レビュー用 AI モデル(LLM)ollama pull qwen3:14b
OpenHandsレビュー実行(エージェント)※パターン 2・3pip install openhands-ai

構成図で示すと、Claude Code(クラウド)が書いたコードを、ローカル環境でレビューする構造です。

Claude Code(Anthropic API)
  ↓  コードを生成・編集
ローカルリポジトリ(あなたの PC)
  ↓  レビュー依頼
OpenHands / Git フック
  ↓
Ollama(ローカルランタイム)
  ↓
Qwen3(ローカル LLM)→ レビュー結果を出力

パターン 1:Git フック + Ollama 直接呼び出し(最もシンプル)

OpenHands は不要です。Claude Code がコミットするタイミングで、Git の pre-commit フックが Ollama に差分を送り、Qwen3 にレビューさせます。

仕組み

Claude Code → git commit → pre-commit フック発火
                              ↓
                     git diff を Ollama API に送信
                              ↓
                     Qwen3 がレビューコメントを生成
                              ↓
                     review.md に出力 or コミット中断

設定手順

プロジェクトの .git/hooks/pre-commit を作成します。

 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
cat << 'HOOK' > .git/hooks/pre-commit
#!/bin/bash
DIFF=$(git diff --cached)
if [ -z "$DIFF" ]; then exit 0; fi

# 差分が大きすぎる場合はスキップ(トークン制限対策)
DIFF_LINES=$(echo "$DIFF" | wc -l)
if [ "$DIFF_LINES" -gt 500 ]; then
  echo "差分が大きすぎるためレビューをスキップします(${DIFF_LINES}行)"
  exit 0
fi

echo "ローカル LLM でコードレビュー中..."

REVIEW=$(curl -s http://localhost:11434/api/chat -d "{
  \"model\": \"qwen3:14b\",
  \"stream\": false,
  \"messages\": [{
    \"role\": \"user\",
    \"content\": \"以下の git diff をコードレビューしてください。バグ、セキュリティ問題、パフォーマンス問題、改善点を日本語で指摘してください。問題がなければ LGTM と回答してください。\n\n\`\`\`diff\n${DIFF}\n\`\`\`\"
  }]
}" | jq -r '.message.content')

echo "$REVIEW" > review.md
echo "---"
echo "$REVIEW"
echo "---"
echo "レビュー結果を review.md に出力しました"
HOOK
chmod +x .git/hooks/pre-commit

動作例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Claude Code がコードを編集した後...
$ git add -A && git commit -m "Add user authentication"

ローカル LLM でコードレビュー中...
---
## レビュー結果

1. **セキュリティ**: パスワードのハッシュ化に MD5 を使用しています。
   bcrypt または argon2 に変更してください。

2. **バグ**: 42行目の `if user = None` は代入になっています。
   `if user is None` に修正してください。

3. **改善**: try-except ブロックで Exception を捕捉しています。
   より具体的な例外型を指定してください。
---
レビュー結果を review.md に出力しました

向いているケース

  • セットアップを最小限にしたい
  • コミット単位の差分レビューで十分
  • 追加ツールをインストールしたくない

パターン 2:OpenHands ヘッドレスモードで本格レビュー

Claude Code の作業後に OpenHands を呼び出し、ファイル全体を読み、テストを実行し、改善提案まで自律的に行わせます。

仕組み

Claude Code → コード生成・編集
      ↓
OpenHands(ヘッドレス)→ ファイル全体を読む
                        → テストを実行する
                        → レビューコメントを生成
                        → 必要なら修正も提案
      ↓
Ollama + Qwen3(ローカル LLM)

設定手順

OpenHands CLI をインストールし、Ollama をバックエンドに設定します。

1
2
3
4
5
# OpenHands をインストール
pip install openhands-ai

# Ollama のコンテキスト長を拡張して起動(必須)
OLLAMA_CONTEXT_LENGTH=32768 ollama serve

使い方

Claude Code の作業が終わったら、以下のコマンドでレビューを実行します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 直近のコミットをレビュー
openhands --headless -t "
このリポジトリの直近のコミットをレビューしてください。
1. git diff HEAD~1 で差分を確認
2. 変更されたファイルの全体を読んで文脈を理解
3. テストがあれば実行して結果を確認
4. 以下の観点でレビュー:
   - バグ・ロジックエラー
   - セキュリティ脆弱性
   - パフォーマンス問題
   - 設計上の懸念
   - テストの網羅性
5. review.md にレビュー結果を出力
"

シェルエイリアスにしておくと便利です。

1
2
# ~/.zshrc に追加
alias ai-review='openhands --headless -t "直近のコミットをレビューして review.md に出力してください。バグ、セキュリティ、パフォーマンス、設計の観点で指摘してください。テストがあれば実行してください。"'
1
2
# Claude Code で作業した後
$ ai-review

パターン 1 との違い

パターン 1(Git フック)パターン 2(OpenHands)
レビュー範囲diff のみファイル全体 + テスト実行
文脈理解差分の前後数行プロジェクト全体の構造
テスト実行できないできる
修正提案テキストのみコード修正まで可能
実行時間数十秒〜数分数分〜数十分

向いているケース

  • 差分だけでなくファイル全体の文脈を踏まえたレビューが欲しい
  • テストの実行結果も含めた品質確認をしたい
  • レビュー結果に基づく修正案も欲しい

パターン 3:Claude Code フック + OpenHands(完全自動化)

Claude Code の hooks 機能を使い、コード編集のたびにバックグラウンドで自動レビューを走らせます。

仕組み

Claude Code が Edit/Write ツールを使用
      ↓ (PostToolUse フック自動発火)
OpenHands がバックグラウンドでレビュー開始
      ↓
Ollama + Qwen3 でローカルレビュー
      ↓
review.md に結果出力(デスクトップ通知)

設定手順

プロジェクトの .claude/settings.json にフックを設定します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "command": "bash -c 'openhands --headless -t \"$(git diff) をレビューして review.md に出力\" > /dev/null 2>&1 &'"
      }
    ]
  }
}

注意点

  • リソース消費: 編集のたびにレビューが走るため、CPU/GPU の負荷が高くなります
  • 競合: Claude Code と OpenHands が同時にファイルを操作すると競合する可能性があります
  • 実用的な運用: matcherWrite のみに絞る、あるいは特定のファイルパターンに限定するなどの調整が必要です

向いているケース

  • レビューの自動化を徹底したい
  • マシンスペックに余裕がある(VRAM 24GB 以上推奨)
  • Claude Code の作業中に並行してレビューを走らせたい

3 パターンの比較

パターン 1パターン 2パターン 3
仕組みGit フック + OllamaOpenHands ヘッドレスClaude Code フック + OpenHands
タイミングコミット時手動実行編集のたび
レビューの深さ差分のみファイル全体 + テスト差分〜ファイル全体
セットアップ難易度低い中程度やや高い
必要ツールOllama のみOllama + OpenHandsOllama + OpenHands
リソース消費
おすすめまずはこれから本格的なレビュー完全自動化したい人

実践的なおすすめ構成

ステップ 1: パターン 1(Git フック)から始める。セットアップが簡単で、コミットのたびに基本的なレビューが得られます。

ステップ 2: レビューの深さが足りないと感じたら、パターン 2(OpenHands ヘッドレス)に移行。ai-review エイリアスで手軽に本格レビューを実行できます。

ステップ 3: 完全自動化が必要な場合のみ、パターン 3 を検討。ただしリソース消費が大きいため、マシンスペックと相談してください。

速度とコストのトレードオフ

構成速度レビュー品質コスト
Claude Code + Claude API でレビュー速い最高API 従量課金
パターン 1(Git フック + Qwen3 14B)数十秒〜数分実用的無料
パターン 2(OpenHands + Qwen3 14B)数分〜数十分高い無料

ローカル LLM でのレビューはクラウド API より遅くなりますが、コードを外部に送信しないというプライバシー上の利点と、追加コストゼロという経済的な利点があります。

まとめ

  • パターン 1(Git フック)が最初の一歩: Ollama だけで動く最もシンプルな構成。pre-commit フックで差分を Qwen3 に送り、review.md に結果を出力
  • パターン 2(OpenHands ヘッドレス)で本格化: ファイル全体の文脈理解、テスト実行、修正提案まで可能。ai-review エイリアスで手軽に実行
  • パターン 3(Claude Code フック)で完全自動化: 編集のたびにバックグラウンドレビューが走る。リソース消費に注意
  • ローカルレビューの最大の利点はプライバシーとコスト: コードを外部に送信せず、追加コストなしでレビューが得られる
  • 段階的に導入する: パターン 1 → 2 → 3 とステップアップするのが現実的

参考