コンテンツへスキップ

media AI活用の最前線

【2026年最新】CLAUDE.md高度設定術|hooks・MCP連携解説

【2026年最新】CLAUDE.md高度設定術|hooks・MCP連携解説

結論: CLAUDE.mdの真の力は「基本設定」ではなく、hooksによる自動品質保証・MCPによるツール統合・サブエージェント設計の組み合わせにあります。この3つを組み合わせると、Claude Codeは「AIアシスタント」から「自律的に動くチームメンバー」に変わります。

この記事の要点:

  • hooksは14種類のライフサイクルイベントをトリガーにできる。PreToolUseで全ツール実行を制御可能
  • MCPをCLAUDE.mdと組み合わせるとSlack・Jira・GitHub・DBを自然言語で操作できる
  • サブエージェントに専門役割を持たせると、1人の人間が5人分の仕事を並列で回せる

対象読者: CLAUDE.mdの基本設定は済んでいて、さらに深く使いこなしたいエンジニア・技術系マネージャー

読了後にできること: PreToolUseフックを書いてClaude Codeが特定コマンドを実行する前に承認確認を入れる


「CLAUDE.mdに書いても、Claudeが同じことを何度も聞いてくる」

Claude Code研修で一番よく出るこの悩み、実はCLAUDE.mdの構造的な問題ではなく「hookを使っていない」ことが原因です。先日、ある開発会社のCTOから「テストを書かずにコードをコミットしようとするClaudeをどう止めるか」と相談されました。答えはシンプルで、PreToolUseフックでBashツールのコミットコマンドを監視し、テストが未実行なら自動でブロックする設定を追加するだけです。

実際に設定したら、「レビューなしのコミット」が翌週からゼロになりました。CLAUDE.mdに「必ずテストを実行してから」と書くのと、hooksで強制するのでは、信頼性が全く違います。LLMへの「お願い」ではなく、コードとして実行される「ルール」になるからです。

この記事では、CLAUDE.md × hooks × MCP × サブエージェントの連携設計を、コピペで使えるサンプル付きで全公開します。

まず試したい「5分即効」設定3選

即効設定1:PreToolUseフックで危険コマンドをブロック

Claude Codeが予期せずrm -rfgit push --forceを実行するリスクをゼロにします。

# ~/.claude/hooks/dangerous-command-check.sh
#!/bin/bash

# Claude Codeが実行しようとするコマンドをチェック
TOOL_INPUT="$1"
DANGEROUS_PATTERNS="rm -rf|git push --force|drop table|DELETE FROM.*WHERE.*1=1"

if echo "$TOOL_INPUT" | grep -qiE "$DANGEROUS_PATTERNS"; then
  echo "DENY: 危険なコマンドを検出しました。実行前に確認が必要です。"
  echo "コマンド: $TOOL_INPUT"
  exit 1  # exit 1でClaudeの実行をブロック
fi

exit 0  # exit 0で実行を許可

このスクリプトをCLAUDE.mdから参照する設定:

# ~/.claude/CLAUDE.md への追記例

## フック設定

危険なコマンドは実行前に必ずチェックすること。
hooks設定: ~/.claude/settings.json の hooks.PreToolUse を参照。

不足している情報があれば、最初に質問してから作業を開始してください。
// ~/.claude/settings.json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "bash ~/.claude/hooks/dangerous-command-check.sh "$TOOL_INPUT""
          }
        ]
      }
    ]
  }
}

効果: 顧問先で設定後、Claude Codeによる意図しない本番DBのデータ削除リスクをゼロに(研修での実証: 2026年2月〜3月、3社で検証)

即効設定2:PostToolUseフックでコード品質を自動チェック

Claude Codeがファイルを編集するたびに自動でlintを走らせる設定です。

// ~/.claude/settings.json に追加
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit",
        "hooks": [
          {
            "type": "command",
            "command": "npx eslint "$TOOL_OUTPUT_FILE" --fix --quiet 2>/dev/null || true"
          }
        ]
      },
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "command": "npx prettier --write "$TOOL_OUTPUT_FILE" 2>/dev/null || true"
          }
        ]
      }
    ]
  }
}

即効設定3:SessionStartフックで毎回必ずコンテキストを確認

新しいセッションを開始するたびに、プロジェクトの状態(git status、テスト結果)を自動で取得させます。

# ~/.claude/hooks/session-start.sh
#!/bin/bash

echo "=== セッション開始チェック ==="
echo "### Git Status"
git status --short 2>/dev/null || echo "(gitリポジトリではありません)"

echo ""
echo "### 最新コミット(5件)"
git log --oneline -5 2>/dev/null || echo "(コミットなし)"

echo ""
echo "### テスト状態"
if [ -f "package.json" ]; then
  echo "npm test を実行してください(このスクリプトは確認のみ)"
fi

echo "========================"

CLAUDE.md高度設定は”3つのレイヤー”で考える

レイヤー要素制御の強さ難易度
L1: テキスト指示CLAUDE.md本文弱(LLMへのお願い)
L2: 実行制御Hooks(14種)強(コードで強制)
L3: ツール統合MCP サーバー最強(外部APIと直結)中〜高

L1だけで頑張ろうとするのが最も多い失敗パターンです。「CLAUDE.mdに書いても守ってくれない」という悩みは、L2・L3を使えば大半は解決します。

Claude Codeの全体像についてはAIエージェント導入完全ガイドもあわせてどうぞ。

AI活用、何から始めればいい?

100社以上の研修実績をもとに、30分の無料相談で貴社の課題を整理します。

無料相談はこちら 資料ダウンロード(無料)

Hooksの全14イベントと実用例

最重要の4イベント

イベントタイミング主な用途
PreToolUseツール実行直前危険コマンドブロック、権限チェック
PostToolUseツール実行直後自動lint/format、ログ記録
SessionStartセッション開始時コンテキスト取得、環境変数確認
Stopセッション終了時最終確認、レポート生成

よくある実用パターン5選

パターン1:テスト必須ガード(コミット前)

# 実装例: Bashツールでgit commitを実行しようとしたらテスト確認を強制
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "condition": {
          "inputContains": "git commit"
        },
        "hooks": [
          {
            "type": "command",
            "command": "bash ~/.claude/hooks/require-tests.sh"
          }
        ]
      }
    ]
  }
}
# require-tests.sh
#!/bin/bash
# テスト結果ファイルが存在するか確認
if [ ! -f ".test-results/latest.json" ]; then
  echo "DENY: テストを実行してから git commit してください"
  exit 1
fi

LAST_RUN=$(cat .test-results/latest.json | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('timestamp',''))")
echo "最後のテスト実行: $LAST_RUN"
exit 0

パターン2:コスト監視フック(API呼び出し記録)

# PostToolUseで全ツール実行をログに記録
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "*",
        "hooks": [
          {
            "type": "command",
            "command": "echo "$(date '+%Y-%m-%d %H:%M:%S') TOOL:$TOOL_NAME" >> ~/.claude/usage.log"
          }
        ]
      }
    ]
  }
}

パターン3:ファイル変更の自動バックアップ

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit",
        "hooks": [
          {
            "type": "command",
            "command": "bash -c 'FILE="$TOOL_INPUT_FILE"; [ -f "$FILE" ] && cp "$FILE" "${FILE}.bak.$(date +%s)" || true'"
          }
        ]
      }
    ]
  }
}

パターン4:セキュリティ監査フック(機密ファイルへのアクセス記録)

# .env, credentials, secretなどの機密ファイルへのアクセスをアラート
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Read",
        "condition": {
          "inputMatchesPattern": ".*(.env|credentials|secret|password).*"
        },
        "hooks": [
          {
            "type": "command",
            "command": "bash -c 'echo "[SECURITY ALERT] $(date) 機密ファイルへのアクセス: $TOOL_INPUT_FILE" >> ~/.claude/security-audit.log && echo "NOTIFY: 機密ファイルへのアクセスを記録しました"'"
          }
        ]
      }
    ]
  }
}

パターン5:PostToolUseでSlack通知(長時間タスク完了時)

# Stop イベントでセッション終了時にSlack通知
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash ~/.claude/hooks/notify-slack.sh"
          }
        ]
      }
    ]
  }
}
# notify-slack.sh
#!/bin/bash
SLACK_WEBHOOK="$SLACK_WEBHOOK_URL"
MESSAGE="Claude Codeセッション完了: $(pwd) | $(date '+%H:%M')"

if [ -n "$SLACK_WEBHOOK" ]; then
  curl -s -X POST -H 'Content-type: application/json' 
    --data "{"text":"$MESSAGE"}" 
    "$SLACK_WEBHOOK" > /dev/null
fi

MCP連携の高度な設定

企業でのClaude Code活用で最も威力を発揮するのがMCP(Model Context Protocol)との連携です。研修先のCTOが「これを知ってたら半年前から使い倒してた」と言っていた設定を紹介します。

代表的なMCPサーバーと用途

MCPサーバーできること設定難易度
GitHub MCPPR作成・レビュー・Issue管理を自然言語で
Jira MCPチケット作成・ステータス更新
Slack MCPチャンネルへの投稿・DM送信
PostgreSQL MCPDBクエリをSQLなしで実行
Google Drive MCPドキュメント読み取り・作成
Figma MCPデザイントークン取得・コンポーネント確認

MCPの設定例(GitHub + Slack)

// .claude/mcp.json(プロジェクト固有のMCP設定)
{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@anthropic/mcp-server-github"],
      "env": {
        "GITHUB_TOKEN": "$GITHUB_TOKEN"
      }
    },
    "slack": {
      "command": "npx",
      "args": ["-y", "@anthropic/mcp-server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "$SLACK_BOT_TOKEN",
        "SLACK_TEAM_ID": "$SLACK_TEAM_ID"
      }
    }
  }
}

CLAUDE.mdでMCPツールの使い方を指定する

# .claude/CLAUDE.md(プロジェクトレベル)

## ツール利用ルール

### GitHubとの連携
- コードレビューを依頼されたらgithub MCPでPRの差分を取得すること
- バグ報告を受けたらgithub MCPでIssueを自動作成すること
- マージ前にgithub MCPでCIステータスを確認すること

### Slackへの通知
- 重大なエラーを発見したらslack MCPで #alerts チャンネルに即通知
- デプロイ完了時はslack MCPで #deploy チャンネルに通知
- 通知文は「[環境] [状態] [タイムスタンプ]」の形式で

### データベース操作
- 本番DBへのWRITE操作は必ずユーザーの明示的な承認を得ること
- READクエリは承認なしで実行可能
- 結果は必ず件数を確認してから次の処理に進むこと

サブエージェント設計:専門家チームを作る

Claude Codeのサブエージェント機能を使うと、特定の専門領域に特化したAIエージェントを複数作り、並列で動かせます。顧問先の開発会社で「セキュリティレビュー担当」「テスト担当」「ドキュメント担当」の3エージェントを作ったら、コードレビューの品質と速度が劇的に変わりました。

サブエージェントの定義ファイル例

# ~/.claude/agents/security-reviewer.md
---
name: security-reviewer
description: セキュリティレビュー専門エージェント。コードのセキュリティ問題を検出する
model: claude-sonnet-4-6
permissionMode: readonly
tools:
  - Read
  - Bash
disallowedTools:
  - Write
  - Edit
---

あなたはシニアセキュリティエンジニアです。コードのセキュリティレビューに特化してください。

## レビュー基準
1. OWASP Top 10 の脆弱性チェック
2. SQLインジェクション・XSS・CSRF
3. 認証・認可の設計ミス
4. 機密情報のハードコーディング
5. 依存ライブラリの既知脆弱性

## 出力形式
- CRITICAL: 即座に修正が必要
- HIGH: 早急に修正が必要
- MEDIUM: 次のスプリントで対応
- LOW: 改善推奨

重要度CRITICALとHIGHのみ、具体的な修正コード例を添付すること。
# ~/.claude/agents/test-generator.md
---
name: test-generator
description: テストコード生成専門エージェント
model: claude-sonnet-4-6
permissionMode: readWrite
tools:
  - Read
  - Write
  - Bash
---

あなたはシニアQAエンジニアです。テストコードの生成・改善に特化してください。

## テスト方針
- TDD(テスト先行)を徹底
- カバレッジ80%以上を必達
- ユニット・統合・E2Eの3層を網羅
- エッジケース・境界値を必ずテスト

## 出力ルール
- テストファイルは同一ディレクトリの __tests__/ または *.test.ts に配置
- テスト名は「[状況]のとき[操作]すると[結果]になる」形式
- 仮定した点は必ず"仮定"と明記してください。

CLAUDE.mdからサブエージェントを呼び出すタイミングを指定

# .claude/CLAUDE.md

## エージェント連携ルール

### コードを書いたら必ず実行
1. コードを新規作成・大幅修正したら security-reviewer を呼び出してレビューさせる
2. レビュー後、カバレッジが80%未満なら test-generator でテストを補完させる
3. 両方完了後に初めてコミットを検討する

### 並列実行の基準
- セキュリティレビューとテスト生成は並列実行してよい(互いに独立)
- ただしDBスキーマ変更は必ず直列(security → test の順序)

### 使ってはいけないパターン
- サブエージェントに本番DBへの書き込みを許可しない(permissionMode: readonly を維持)

プロジェクト種別テンプレート集

Webアプリ開発プロジェクト

# .claude/CLAUDE.md(React + TypeScript + Node.js プロジェクト)

## プロジェクト概要
[プロジェクト名] — [1〜2行で説明]

## 技術スタック
- Frontend: React 19 + TypeScript 5.4
- Backend: Node.js 22 + Express 5
- DB: PostgreSQL 16(ORM: Prisma)
- Test: Vitest + Playwright
- Lint: ESLint 9 + Prettier

## 必須ルール

### コーディング
- TypeScriptのstrictモードを常に有効に保つこと
- any型は禁止(unknown型を使う)
- nullableな値には必ずオプショナルチェーニングを使う

### テスト
- 新機能には必ずユニットテストを作成(Vitest)
- APIエンドポイントの変更には統合テストを追加
- カバレッジ目標: 80%以上

### セキュリティ
- .env ファイルは絶対にコミットしない
- ユーザー入力は必ずzodでバリデーション
- SQLクエリは必ずPrismaのORM経由(RAWクエリは原則禁止)

## 禁止事項
- git push --force(必ず承認を取る)
- 本番DBへの直接接続(開発DBのみ使用)
- コンソールログを残したままのコミット

データ分析プロジェクト

# .claude/CLAUDE.md(Python + Jupyter プロジェクト)

## プロジェクト概要
[プロジェクト名] — データ分析・機械学習プロジェクト

## 技術スタック
- Python 3.12
- pandas, numpy, scikit-learn
- Jupyter Notebook
- データ: [データソースの説明]

## 分析ルール
- 全ての数字には出典(データソース、収集日)を明記する
- 統計値には信頼区間またはサンプルサイズを添える
- 相関を因果として解釈しない(必ず「相関が見られる」と表現)

## データ品質
- 欠損値の処理方法を必ずコメントで記録する
- 外れ値の定義と処理方針を明示する
- データの前処理スクリプトはべき等(何度実行しても同じ結果)にする

## 再現性
- 乱数シードは必ず固定(random_state=42)
- 依存ライブラリはrequirements.txtにピン留め
- Notebookのアウトプットはコミット前にクリア(kerneлは再実行して確認)

【要注意】よくある設定ミスと回避策

失敗1:グローバルとプロジェクトのCLAUDE.mdが競合する

❌ グローバル(~/.claude/CLAUDE.md)に「Pythonを使え」と書き、プロジェクト(.claude/CLAUDE.md)に「Node.jsを使え」と書く

⭕ グローバルには普遍的なルール(コミットメッセージ形式・安全規則)のみ。言語・フレームワーク固有の指定はプロジェクトに書く

優先順位: プロジェクト > グローバル(プロジェクトが勝つ)

失敗2:hooksのexit codeを間違える

❌ exit 0でもClaudeの実行がブロックされると誤解する

⭕ exit 0 = 実行を許可、exit 1 = 実行をブロック、exit 2 = ユーザーに確認を求める

# exit codeの意味
exit 0   # 続行を許可
exit 1   # ブロック(エラーメッセージが表示される)
exit 2   # ユーザーに確認プロンプトを表示(危険な操作の確認など)

失敗3:MCPサーバーに広すぎる権限を与える

mcp__github__*(GitHub MCPの全ツール)を無制限に許可

⭕ 読み取りのみのツール(mcp__github__list_issues)と書き込みツール(mcp__github__create_pr)を分けて、後者には承認を必要とする設定にする

失敗4:サブエージェントが無限ループする

❌ サブエージェントAがサブエージェントBを呼び、BがAを呼ぶ設定

⭕ CLAUDE.mdに「サブエージェントから別のサブエージェントを呼び出さない」と明記 + maxTurnsで上限を設定

# サブエージェント定義でのループ防止
---
maxTurns: 20  # 20ターンで強制終了
---

失敗5:CLAUDE.mdが長すぎてコンテキスト汚染

❌ 3,000字を超えるCLAUDE.mdを書いてClaudeが「最重要」を見失う

⭕ CLAUDE.mdは500〜1,000字程度のコアルールのみ。詳細は別ファイル(.claude/rules/)に分けてCLAUDE.mdから参照する

上級者向け:メモリシステムとの連携

Claude Codeのメモリシステム(`~/.claude/projects//memory/`)とCLAUDE.mdを組み合わせると、会話をまたいで学習し続けるエージェントを作れます。

# CLAUDE.mdへの追記(メモリ指示)

## メモリ管理

### 自動的に記録すること
- このプロジェクト固有のコマンド・パス・設定値
- バグを発見したときのパターンと解決法
- ユーザーの好みや判断基準(確認なしで実行してよい操作 vs 必ず確認が必要な操作)

### 記録してはいけないこと
- APIキー・パスワード・個人情報
- 一時的なデバッグ情報
- 今のセッションだけに有効な設定

### メモリの読み方
セッション開始時に必ず関連するメモリを確認し、前回の作業状況を把握してから始めること。

まとめ:今日から始める3つのアクション

  1. 今日やること: まず「危険コマンドブロック」のPreToolUseフックを1つ設定する。git push –forceだけでもブロックしておくと開発事故が激減する
  2. 今週中: よく使うMCPサーバー(GitHub or Slack)を1つ追加し、CLAUDE.mdにその使い方の指示を書く。「PRを作るときはGitHub MCPを使え」と1行追加するだけで動きが変わる
  3. 今月中: セキュリティレビュー専門のサブエージェントを作り、コード変更後に自動で呼び出す設定を整える。チームで使う場合は.claude/ディレクトリをgit管理して全員に共有する

CLAUDE.mdは「書いておわり」ではなく、hooksで強制し・MCPでツール統合し・サブエージェントで役割分担することで初めて「自分専用AI」が完成します。

ChatGPTとの使い分けや全体的なAI活用戦略はChatGPTビジネス活用完全ガイドも参考にしてください。


参考・出典


著者: 佐藤傑(さとう・すぐる)
株式会社Uravation代表取締役。X(@SuguruKun_ai)フォロワー約10万人。100社以上の企業向けAI研修・導入支援。著書『AIエージェント仕事術』(SBクリエイティブ)。SoftBank IT連載7回執筆(NewsPicks最大1,125ピックス)。

ご質問・ご相談はお問い合わせフォームからお気軽にどうぞ。

あわせて読みたい

この記事をシェア

Claude Codeを本格的に使いこなしたい方へ

週1回・1時間のマンツーマン指導で、3ヶ月後にはClaude Codeで自走できる実力が身につきます。
現役エンジニアが貴方の業務に合わせてカリキュラムをカスタマイズ。

✓ 1対1のマンツーマン ✓ 全12回・3ヶ月 ✓ 実務ベースの指導
Claude Code 個別指導の詳細を見る まずは無料相談

contact お問い合わせ

生成AI研修や開発のご依頼、お見積りなど、
お気軽にご相談ください。

Claude Code 個別指導(1対1・12セッション)をご希望の方はこちらから別途お申し込みください

Claude Code 個別指導 無料相談