CTS-KB

Claude Code ベストプラクティス:CLAUDE.md・hooks・skills 統合運用

⏱ 約 7 分で読めます
#Claude Code #CLAUDE.md #hooks #skills #ステアリング駆動開発

🧭 .claude/ は「AI の開発者体験」そのもの

ステアリング駆動開発を支えるのは Claude Code の .claude/ 設定です。ここが貧弱なら、どれだけ素晴らしい仕様を書いても AI は毎回「再学習」からやり直します。逆に言えば、.claude/ を丁寧に設計すれば 「何度セッションを再開してもプロジェクトルール通りに動く AI」 が手に入ります。

シリーズ第 7 回では、CTS-EC の .claude/ 構成をベースに、CLAUDE.md・hooks・commands・skills の 4 つを統合運用するベストプラクティスを解説します。

🗂️ .claude/ ディレクトリ構成の全体像

.claude/
├── CLAUDE.md              ← プロジェクトの必須ルール(10 個)
├── SKILLS.md              ← skills / commands のナビゲーション
├── settings.json          ← permissions / hooks
├── settings.local.json    ← 個人の上書き(git 管理外)
├── agents/                ← サブエージェント(12 体)
├── commands/              ← スラッシュコマンド(11 個)
├── skills/                ← スキル(when-to-use で自動発火)
│   ├── common/            ← 常時適用
│   ├── dotnet/            ← dotnet/**/* で発火
│   ├── frontend/          ← frontend/**/* で発火
│   ├── python/            ← python/**/* で発火
│   ├── steering/          ← タスク管理
│   └── ...
├── agent-memory/          ← サブエージェントの project memory
├── document/              ← 参考資料(CSV / PDF / DOCX など)
└── templates/             ← 進捗報告 / blockers / test-summary

2026-04 時点で CTS-EC の .claude/ 配下は 3,500 行超に達しています。このボリュームを「毎回読ませる」のは非現実的。paths: frontmatter と hooks で 必要な時だけロード する構造が肝です。

📜 CLAUDE.md 設計:10 の必須ルールだけに絞る

CLAUDE.md はセッション冒頭に常時ロードされるため、 書きすぎると cache プレフィックスが肥大化します。CTS-EC では 10 個の必須ルールだけに絞っています。

#必須ルール違反時の挙動
0pre-push/lint FAIL を「無関係」と判断するな生ログ確認を強制
1main への直接 Push 禁止hook で自動 block
2Push と MR 作成は同時に実行パイプライン重複防止
3Push 前にテスト実行CI コスト削減
4TDD 必須テストなし変更は即取り消し
5ステアリング作成後はレビュー + オーナー承認必須2 段レビューゲート
6GCP インフラは Terraform 経由gcloud CLI 直接作成禁止
7仕様準拠・推測禁止・指摘即対応tdd-spec-gate で強制
8実装前調査必須公式ドキュメント + ログ追加
9実装完成度(TODO / stub 残し禁止)implementation-validator で検出
10Skill 自動起動の原則(Skill-First)when-to-use マッチで起動

詳細は各スキル / ドキュメントに委譲し、CLAUDE.md 本体は クイックリファレンス に徹します。

🪝 hooks:人間のレビュー漏れを補う 6 ゲート

.claude/settings.json の hooks で、人間の確認漏れを構造的に防ぎます。CTS-EC では 6 つのフックを運用しています。

イベントmatcher処理目的
SessionStartsteering-auto-load.shアクティブステアリングの自動ロード
SessionStartensure-watch-running.shファイル監視プロセスの常駐確認
UserPromptSubmitevidence-gate-detector.sh「確認」キーワード検出時にツール実行強制
PreToolUseBash(git push*)pre-push-main-guard.shmain 直接 Push を block
PreToolUseBash(git push*)check-push-readiness.sh/pre-push 未実施を警告
PreToolUseBash(./scripts/test-all.sh*)block 判定test-all.sh 直接実行を禁止(/test を強制)
PostToolUseEditpost-edit-format.sh編集直後に自動フォーマット
PostToolUseWritepost-write-steering-check.sh新規ファイル書き込み時にステアリング整合を確認
Stopsession-learning.shセッション終了時の学習ログ収集

main ガード hook の具体例

# PreToolUse: Bash(git push*) にマッチ
./scripts/hooks/pre-push-main-guard.sh

# 内部で以下を判定
git diff --name-only HEAD~1 HEAD \
  | grep -vE '^(docs/|\.claude/|\.steering/|.*\.md$|.*\.mmd$)'

# コード変更が検出されたら block(手動スキップ不可)

--no-verify でスキップされないよう、CTS-EC では settings.json の permissions 側で --no-verify を禁止する方針も検討中です。

🧨 permissions:deny リストで事故を構造的に防ぐ

.claude/settings.jsondeny は、AI が誤って破壊的操作を実行しないための ハードガード です。

"deny": [
  "Bash(rm -rf /*)",
  "Bash(rm -rf /)",
  "Bash(rm -rf ~*)",
  "Bash(rm -rf $HOME*)",
  "Bash(git push --force*)",
  "Bash(git push -f*)",
  "Bash(git reset --hard*)",
  "Bash(git clean -fd*)",
  "Bash(git branch -D*)",
  "Bash(dropdb:*)",
  "Bash(psql*DROP DATABASE*)",
  "Bash(psql*DROP TABLE*)",
  "Bash(gcloud*delete*)",
  "Bash(terraform destroy*)"
]

「ユーザーが承認しなければ実行できない」のは建前ですが、deny に書いておくと AI は承認プロンプトすら出さずに拒否 します。事故率が明確に下がります。

⚡ commands:責務を分割した 11 個のスラッシュコマンド

.claude/commands/ は 11 個のコマンドで構成されています。責務分割が徹底されており、1 コマンド = 1 目的です。

コマンド責務関連エージェント
/steering壁打ち〜規模判定〜ステアリング作成brainstorming skill
/steering-status進捗確認 + 次フェーズを TodoWrite に自動転記-
/steering-completetasklist 最終確認 → archive 移動 → Serena メモリ保存-
/resume前回セッションの続きを再開-
/prepare-contextキーワードベースでコンテキスト事前収集context-preparer
/testテスト実行(スタンプ管理)test-runner
/check-test-quality型別テスト網羅性チェックtest-quality-checker
/review-docsドキュメント品質レビューdoc-reviewer
/review-codeコードレビュー(TDD/DDD/SOLID)code-reviewer
/pre-pushPush 前統合ゲートtest-runner + code-reviewer + validator
/daily-report日次進捗レポート生成daily-reporter

/pre-push が統合ゲートの要

/pre-push は単独の品質チェックではなく、複数エージェントを順次起動する統合ゲート です。Step 1 ブランチ確認 → Step 2 未コミット確認 → Step 3 テスト → Step 4 code-reviewer → Step 5 implementation-validator → Step 6 スタンプ発行、という流れで、 どれか 1 つでも失敗したら即中断 します。

🧪 skills:.claude/rules/ を統合した「paths:」ベースの条件ロード

Cursor 由来の .claude/rules/ ディレクトリを、2026-04-17 に skills へ統合しました(常時ロード -27%、-145 MB)。

paths: frontmatter による条件ロード

---
name: dotnet
description: .NET プロジェクトでのコーディング規約・TDD パターン
paths:
  - "dotnet/**/*"
allowed-tools: Read, Edit, Bash(dotnet:*)
---

paths にマッチするファイルを編集 / 読み込みしたときだけスキルが発火します。常時ロードする common/ と、条件発火の dotnet/ / frontend/ / python/ を使い分けることで、cache プレフィックスを太らせずに済みます。

when-to-use を必ず書く

Skill-First 原則(CLAUDE.md §10)により、SKILL.md の冒頭には when-to-use セクションが必須です。自動起動できない「死にスキル」を防ぎます。

## when-to-use

### 自動起動条件
- ユーザーが「壁打ちしたい」と発言
- L 規模タスクの設計前

### 起動しない条件
- 単純なバグ修正(S 規模)
- 既に詳細仕様が存在する作業の継続

📘 SKILLS.md は「ナビゲーション」、SSoT は context-engineering.md

.claude/SKILLS.md は 10 行の薄いナビゲーションファイルです。コマンド・サブエージェントの SSoT は docs/context-engineering.md に集約しています。

理由は 2 つ:

  • SKILLS.md を肥大化させると cache プレフィックスが重くなる
  • 実運用の正として ADR・運用改善履歴が混ざるのは docs/ 側が向いている

🧩 agent-memory:サブエージェントに project memory を持たせる

各エージェント(code-reviewer / doc-reviewer / test-quality-checker 等)は agent-memory/[agent-name]/ に project memory を持ちます。

.claude/agent-memory/
├── code-reviewer/
├── design-reviewer/
├── doc-reviewer/
├── implementation-validator/
└── test-runner/

memory: project の宣言

---
name: doc-reviewer
description: ドキュメントの詳細レビュー
model: claude-sonnet-4-6
tools: [Read, Grep, Glob]
memory: project
---

memory: project を宣言すると、プロジェクト単位でレビュー傾向や過去指摘を記憶します。 同じ指摘を 2 回しない ためのしくみです。

🛠️ templates:進捗報告・ブロッカー・テストサマリー

.claude/templates/ に 3 つのテンプレートを置いています。

テンプレート用途
progress-template.md月 2 回の顧客向け進捗報告
blockers-template.mdブロッカー発生時の起票
test-summary-template.mdテスト結果サマリー

docs/progress-reports/YYYY-MM-DD.md はこのテンプレートを元に生成されます。

🧊 1 ファイルに 1 責務:肥大化を避ける運用

.claude/ を運用していると、つい 1 ファイルに機能を追加し続けてしまいます。CTS-EC では以下のしきい値を目安にしています。

ファイル推奨サイズ超過時の対処
CLAUDE.md200 行以内詳細は skills / commands に切り出す
SKILL.md500 行以内機能単位で分割(templates/ を別ファイルに)
コマンド200 行以内細分化(/steering-complete は別コマンド化済)
エージェント300 行以内責務分割(code-reviewer と implementation-validator)

⚠️ .claude/ 運用でやってはいけないこと

  • CLAUDE.md に「今日の TODO」など揮発情報を書く(cache プレフィックス汚染)
  • すべてのスキルを常時ロードにする(paths で条件分岐する)
  • when-to-use のないスキルを新規作成(自動起動できない)
  • hooks を --no-verify でスキップする
  • deny リストを書かずに AI に destructive command を許可する
  • コマンドを 1 本に統合する(責務分割して /pre-push のように組み合わせる)

📚 シリーズ記事

#タイトル内容
1概要ステアリング駆動開発の全体像
2壁打ち・規模判定編壁打ちの進め方、ADR の書き方、規模判定の基準
3ステアリング作成編M/L 規模のドキュメント作成、TDD タスク分解
4実装・完了編TodoWrite 連携、進捗管理、アーカイブ運用
5コンテキスト設計編AI に渡すコンテキストの最適化、skills 設計
6品質ゲート編doc-reviewer、テスト品質チェック、受入テスト
7Claude Code ベストプラクティス(本記事)CLAUDE.md 設計、hooks、commands、rules、skills
8Agent Teams 編agents 定義、チーム構成、マルチエージェント協調
9Remote Control 編スマホ・Web から CLI セッションを操る席拘束からの解放

🔗 関連記事

📖 関連用語