← LLMルーティング 自律開発ループ →

03 Claude Code統合 — SSOTをClaude Codeと接続する

CLAUDE.md・settings.json・Hooksを使ってSSOTをAIの「長期記憶」にする


3層設定アーキテクチャ

Layer 1: グローバル設定
~/.claude/CLAUDE.md          ← 全プロジェクト共通のルール
~/.claude/settings.json      ← Hooks・権限・環境変数

Layer 2: プロジェクト設定
<repo>/CLAUDE.md             ← このプロジェクト固有のルール

Layer 3: ディレクトリ設定
<repo>/<dir>/CLAUDE.md       ← 特定ディレクトリのルール(必要時のみ)

重要: 下位レイヤーが上位レイヤーを上書きする(Layer 3 > Layer 2 > Layer 1)


CLAUDE.mdの設計

グローバルCLAUDE.mdに書くべきこと

# グローバル設定

## 基本ルール
- 日本語で回答する
- コードは変更前に既存実装を理解してから変更する

## LLM利用ポリシー(環境別)

**WSL CLI版**: `ANTHROPIC_BASE_URL` をglm-rate-proxy(localhost:8787)に向けることでClaude Code CLI自体をGLMで動作させる。MiniMaxはレート制限時のフォールバック先としてプロキシに設定。

**Windows Desktop版**: エンドポイント変更不可のためLLMはSonnet固定。GLM/MiniMaxはMCPサーバー(glm MCP / minimax MCP)経由でSonnetから委譲して使う。

```markdown
## LLM利用ポリシー(WSL CLI版の例)
- メインLLM: GLM(glm-rate-proxy経由)
- フォールバック: MiniMax(レート制限時・ピーク時)
- Sonnet直接回答: 要ユーザー許可

セキュリティ

SSOT参照


### プロジェクトCLAUDE.mdに書くべきこと

```markdown
# プロジェクトA固有設定

## 技術スタック
- Python 3.12 + FastAPI
- PostgreSQL(Supabase)
- テスト: pytest

## ブランチ運用
- main直接コミット
- PRは外部公開機能のみ

## 禁止事項
- `rm -rf` 系コマンド
- 本番DBへの直接接続

Hooks設計

4種のHookでClaude Codeを自動化:

Hook タイミング 用途
PreToolUse ツール実行前 危険コマンドのブロック
PostToolUse ツール実行後 ログ記録・通知
SessionStart セッション開始時 前回引継ぎ・バックログ表示
Stop セッション終了時 日記の自動更新

PreToolUseで危険コマンドをブロック

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "Bash",
      "hooks": [{
        "type": "command",
        "command": "python3 ~/.claude/scripts/check-command-safety.py"
      }]
    }]
  }
}
# check-command-safety.py(概念)
import json, sys

BLOCKED = ["rm -rf", "DROP TABLE", "git push --force", "sudo"]

data = json.load(sys.stdin)
cmd = data.get("tool_input", {}).get("command", "")

for pattern in BLOCKED:
    if pattern in cmd:
        print(json.dumps({"decision": "block", "reason": f"危険コマンド: {pattern}"}))
        sys.exit(0)

print(json.dumps({"decision": "allow"}))

SessionStartで前回引継ぎを表示

#!/bin/bash
# session-start.sh

# 最新の引継ぎファイルを表示
HANDOFF="$HOME/.claude/state/handoff.md"
if [ -f "$HANDOFF" ]; then
    echo "=== 前回の引継ぎ ==="
    cat "$HANDOFF"
    echo ""
fi

# 今日の日付と作業カウント
echo "📅 $(date +%Y-%m-%d) | セッション開始"

Stopでセッション終了を記録

#!/bin/bash
# session-stop.sh

DAILY_DIR="$HOME/projects/ssot/10_DAILY"
TODAY=$(date +%Y-%m-%d)
DAILY_FILE="$DAILY_DIR/$TODAY.md"

# 終了時刻を記録
echo "" >> "$DAILY_FILE"
echo "---" >> "$DAILY_FILE"
echo "セッション終了: $(date +%H:%M)" >> "$DAILY_FILE"

Memoryシステム

Claude Codeには4種のメモリタイプがある:

~/.claude/projects/<project-hash>/memory/
├── user_role.md          ← ユーザーの役割・専門知識
├── feedback_*.md         ← 過去の指摘・好みのパターン
├── project_*.md          ← 現在進行中のタスク・決定
└── MEMORY.md             ← メモリインデックス(自動ロード)
タイプ 内容 更新タイミング
user 役割・知識レベル・好み 初回セッション時
feedback 指摘された問題・確認された方法 修正指示があった時
project 現在の意思決定・背景 プロジェクトの方針変更時
reference 外部システムの場所 参照先が決まった時

SSOT + Claude Code の統合フロー

セッション開始
    ↓
SessionStart Hook
    ├── 前回handoff.md を表示
    ├── バックログを確認
    └── INDEX drift警告を出力
    ↓
作業中
    ├── CLAUDE.md のルールに従って実装
    ├── 決定ファイルを 01_DECISIONS/ に作成
    └── git commit時に自動でSSOT記録を要求
    ↓
セッション終了
    ├── Stop Hook が日記に終了時刻を記録
    └── handoff.md を更新(次のセッションへ)

settings.jsonテンプレート

{
  "defaultMode": "acceptEdits",
  "env": {
    "ANTHROPIC_BASE_URL": "http://localhost:8787"
  },
  "permissions": {
    "allow": [
      "Bash(git *)",
      "Bash(python3 *)",
      "Bash(npm *)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(sudo *)"
    ]
  },
  "hooks": {
    "PreToolUse": [{
      "matcher": "Bash",
      "hooks": [{"type": "command", "command": "~/.claude/scripts/check-safety.sh"}]
    }],
    "SessionStart": [{"type": "command", "command": "~/.claude/scripts/session-start.sh"}],
    "Stop": [{"type": "command", "command": "~/.claude/scripts/session-stop.sh"}]
  }
}

スキル管理体系

Claude Codeのスキル(~/.claude/skills/)を管理し、SSOTとの同期を確保する。

既存スキル一覧

スキル名 トリガー 用途
ssot-record 「記録して」「保存して」等 SSOTへの記録・振り分けの自動化
ssot-search 「SSOTから探して」等 SSOT内を検索
ssot-sync 「SSOT整合性チェックして」「整理して」等 SSOTと実態の乖離をチェック・修正
teian 「提案して」「どう思う」等 軽量提案(brainstormingへの誘導も)
record-decision 「判断を記録して」等 技術決定の記録
update-guide 「/update-guide」 ガイドサイトの更新キュー処理

ssot-sync スキル(整合性チェック)

トリガーワード:

チェック対象:

乖離が蓄積する構造と定期運用:

SSOTの記述(自動化.md/MCPガイド/repo-index.yaml等)は、実態(Cron実体・MCP構成・リポ数・プロジェクト追加)の変更に追従しきれず、徐々に乖離が蓄積する。これは例外ではなく構造的な性質(記述は手動・実態は自動/頻繁更新)。主な乖離パターン:

→ 月金の ssot-sync auto(高重要度のみ自動修正)+ 対話モードでの深掘り検証(sentaku L2 で実測ベースの淘汰)が乖離回収の主回路。深掘り検証では「表層の数だけでなく実態を計測する」(例: バックログ退避対象0件の実測がゴーストCronの実体化を退ける)。

スキル追加時のルール

新しいスキルを ~/.claude/skills/ に作成した時は:

  1. 01_DECISIONS/claude-code/_INDEX.md に記録
  2. ssot-guide のこのセクションに追記
  3. 自動化関連なら 00_SYSTEM/自動化.md も更新

ssot-record と ssot-sync の使い分け

状況 スキル
作業内容を記録したい ssot-record(「記録して」)
SSOTの情報が古いか確認したい ssot-sync(「SSOT整理して」)
SSOTから情報を探したい ssot-search(「SSOTから探して」)