effidevFlutter・Cloudflareエッジ・クラウドコスト最適化
日本語

Claude Code CLIチーム自動化:Hooks・MCP構築

Claude Code CLIチーム自動化とCustom Hooks・MCP構築

開発チームでAIコーディングエージェントを導入する際、よく直面する課題が**「個人によって成果物の品質が極端に変わる」**という点です。ある開発者はガイドラインに完全に沿った美しいコードを得られる一方で、別の開発者はプロジェクトの規約を無視した使い捨てのコードを生成してしまいます。これはAIモデルの限界ではなく、チームレベルでのコンテキストエンジニアリング(Context Engineering)とフック(Hooks)自動化システムの欠如が原因です。

AnthropicのClaude Code CLIは、単にターミナルでチャットを行うためのツールではありません。.claude/settings.jsonに基づくCustom Hooks、プロジェクトの文脈を機械的に注入する**CLAUDE.md、そしてデータベース・Jira・GitHubを連携するMCP(Model Context Protocol)**レイヤーを備えた、チーム単位のAI実行ランタイムです。

本記事では、Claude Code CLIをチームの標準開発環境として定着させるための3大要素——Custom Hooksエコシステム、CLAUDE.mdコンテキストエンジニアリング、チーム共有MCPパイプラインの設定方法——について、実践的なサンプルコードとともに詳しく解説します。

要約

  • コンテキストエンジニアリング > プロンプトエンジニアリング: AIのハルシネーションの90%は、プロンプト不足ではなく文脈(Context)の欠如から発生します。プロジェクトルートにCLAUDE.mdを配置し、アーキテクチャルールを自動提供する必要があります。
  • Custom Hooksの役割: PreToolUse(ファイル変更前のセキュリティ/検証)、PostToolUse(変更後の自動リンティング/Prettier)、SessionStart(環境初期化)フックにより、AIの動作を決定論的(Deterministic)に制御します。
  • チーム共有MCPの設定: .claude/settings.jsonをGitにコミットし、チーム全員で同じMCPサーバー(PostgreSQL、GitHub、Figma)とセキュリティフックを共有します。
  • セキュリティパイプライン: フックを通じて.envファイルへのアクセス遮断、rm -rfなどの危険なコマンド実行の拒否、秘密鍵の漏洩検査をゲートウェイレベルで自動化します。

1. プロンプトエンジニアリングから「コンテキストエンジニアリング」へのパラダイムシフト

2024年までは「プロンプトをいかに長く精密に記述するか」が話題の中心でした。しかし、2026年の大規模言語モデル(LLM)環境において、チームのコア生産性は**「コンテキストエンジニアリング(Context Engineering)」**から生み出されます。

[従来のプロンプトエンジニアリング]
開発者 ──(毎回500文字のプロンプト作成)──► AIエージェント ──► 規約違反コードの生成

[2026年のコンテキストエンジニアリング]
開発者 ──(簡潔な指示)──► [CLAUDE.md + Custom Hooks + MCP] ──► AIエージェント ──► 規約を100%遵守したコード

AIがプロジェクトのアーキテクチャ、パッケージのバージョン、コードスタイル、禁止事項をすでに把握していれば、開発者は「Userログイン機能を追加して」という一行の指示だけでプロダクションレベルのコードを得ることができます。

CLAUDE.mdの構成標準規格

プロジェクトのルートに配置するCLAUDE.mdは、Claude Codeがセッションを開始する際に最も優先して読み込む文脈ファイルです。Claude Code公式ドキュメントの推奨規格に合わせた例は以下の通りです。

# プロジェクトアーキテクチャ & 開発規約

## 技術スタック
- Framework: Next.js 15 (App Router), React 19
- Styling: Tailwind CSS v4, shadcn/ui
- State: TanStack Query v5, Zustand
- Test: Vitest, Playwright

## コードスタイルルール
- すべてのアーティファクトはTypeScript Strict Modeに準拠する(`any`の使用禁止)。
- コンポーネントは`src/components/`配下に目的別に分離し、`export default`ではなくNamed Exportを使用する。
- データフェッチは必ずServer Actionsまたは`useQuery`カスタムフック経由で実行する。

## 禁止事項(Strict Rules)
- `.env`および`.env.local`ファイルの内容を読み込んだり変更したりしない。
- `node_modules`配下のファイルを直接変更しない。
- `git push --force`コマンドを実行しない。

## よく使うコマンド
- Build: `npm run build`
- Test: `npm run test`
- Lint: `npx eslint . --fix`

2. Custom Hooks:AIエージェントの決定論的制御手段

CLAUDE.mdがルールを「宣言」するガイドラインであるならば、Custom HooksはAIがルールに違反できないように強制的に実行されるサンドボックスパイプラインです。

フック実行のライフサイクルイベント

フックイベント 実行タイミング 主な活用事例
SessionStart Claude Codeセッション開始時 環境変数の検証、一時ファイルの整理、最新メインブランチ(master/main)の同期
PreToolUse ツール(ファイル書き込み、コマンド実行など)呼び出し前 危険コマンドの遮断、機密ファイルへのアクセス拒否、セキュリティ検査
PostToolUse ツール実行完了直後 ESLint / Prettierによる自動修正、生成されたコードの型チェック
SessionEnd セッション終了時 作業ログの記録、一時ブランチのクリーンアップ

.claude/settings.jsonの実践設定コード

チームプロジェクトに適用できる.claude/settings.json設定ファイルの構造です。このファイルをGitリポジトリにコミットすれば、チームメンバー全員に同じセキュリティフックと自動化が適用されます。

{
  "hooks": {
    "PreToolUse": [
      {
        "type": "command",
        "command": "node .claude/hooks/security-guard.js"
      }
    ],
    "PostToolUse": [
      {
        "type": "command",
        "command": "npx prettier --write \"$CLAUDE_CHANGED_FILE\" && npx eslint --fix \"$CLAUDE_CHANGED_FILE\""
      }
    ]
  }
}

セキュリティ検査フックの実装例(.claude/hooks/security-guard.js

AIが.envファイルを読み込もうとしたり、rm -rfのような 破壊的な操作を試みたりした際に、フックスクリプトがexit code 1を返して遮断します。

// .claude/hooks/security-guard.js
const input = JSON.parse(process.env.CLAUDE_TOOL_INPUT || '{}');
const toolName = process.env.CLAUDE_TOOL_NAME;

// 1. 機密ファイルへのアクセス遮断
if (input.path && (input.path.includes('.env') || input.path.includes('id_rsa'))) {
  console.error('❌ [セキュリティ違反] 機密ファイルにアクセスできません:', input.path);
  process.exit(1);
}

// 2. 危険な破壊的コマンドの遮断
if (toolName === 'Bash' && input.command) {
  const dangerousCmds = ['rm -rf /', 'git reset --hard', 'drop database'];
  if (dangerousCmds.some(cmd => input.command.includes(cmd))) {
    console.error('❌ [セキュリティ違反] 危険なコマンドの実行が禁止されています:', input.command);
    process.exit(1);
  }
}

process.exit(0);

このフックシステムにより、AIが誤ってデータベースを削除したりキーを漏洩させたりする事故を100%未然に防ぐことができます。

3. チーム共有MCP(Model Context Protocol)パイプラインの構築

MCPは、Claude Codeが外部データベース、イシュートラッカー、デザインツールと通信するための標準USB-Cポートのような存在です。個人ごとにMCPを設定するとキー管理が煩雑になりますが、チーム単位で共有MCPを構成することでコラボレーション効率が飛躍的に向上します。

[Claude Code CLI] 

       ├─► [Figma MCP] ─────► デザイントークン & コンポーネントレイアウトの受信
       ├─► [Postgres MCP] ──► 実際のDBスキーマ & 型の自動インスペクション
       └─► [GitHub MCP] ────► PR作成 & レビュー履歴の自動参照

チームMCP設定ファイル(.claude/mcp-config.json

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
      }
    },
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres", "${DATABASE_URL}"]
    }
  }
}

この設定を接続しておけば、開発者が「Issue #142に合わせてDBスキーマを更新し、PRを作成して」と依頼した際、ClaudeがJira/GitHubのIssue確認 ➔ Postgresスキーマの把握 ➔ コード修正 ➔ PR発行までのワークフロー全体を自律的に実行します。Cloudflare Agents SDKガイドで取り上げたステートフルエージェントパターンと組み合わせることで、エンタープライズレベルの自動化が完成します。

4. プロンプト規約とカスタムコマンド(Slash Commands)のチーム標準化

チームメンバーが頻繁に使用する繰り返しコマンドを、カスタムスラッシュコマンド(Slash Commands)として登録しておくことができます。.claude/commands/ディレクトリ内にマークダウンファイルとして定義します。

PR作成自動化コマンド(.claude/commands/make-pr.md

---
description: "現在のブランチの変更点を分析し、標準フォーマットのGitHub PRを作成します。"
---

以下の手順に従ってPRを作成してください:
1. `git diff main...HEAD`を実行し、変更されたすべてのファイルとロジックを分析する。
2. コミットメッセージと変更内容をもとに、PRのタイトルと本文を作成する。
3. PR本文には[主な変更点]、[テスト方法]、[影響範囲]のセクションを含める。
4. `gh pr create`コマンドを使用してPRを作成する。

開発者はターミナルで/make-prと一行入力するだけで、チームの規約に完全に沿ったPRが即座に作成されます。

5. チーム導入ガイド:3段階の移行ロードマップ

フェーズ 期間 主な作業 期待できる効果
フェーズ1:コンテキストの統一 1週目 CLAUDE.mdの作成およびリポジトリへのコミット、コーディング規約の明記 個人ごとのコード品質格差が50%減少
フェーズ2:セーフティネットの構築 2週目 Custom Hooks(セキュリティフック + Prettier/ESLintフック)の連携 ファイル・コマンド事故0件、フォーマット統一
フェーズ3:パイプラインの連携 3〜4週目 チーム共有MCP(GitHub、DB、Figma)およびカスタムコマンドの登録 PR作成やDBマイグレーションの自動化

よくある質問

CLAUDE.mdファイルが長くなりすぎるとパフォーマンスは低下しますか?

はい、低下します。CLAUDE.mdが肥大化しすぎると、コンテキストウィンドウのトークンを過剰に消費し、重要なルールを見落とすリスクが高まります。150〜300行以内に抑えることが推奨され、詳細なデザインガイドなどはClaudeデザインツールガイドのようにMCPや別ドキュメントに分離し、必要な時だけ参照する構成にするのがベストです。

Custom HooksはWindows環境んでも同様に動作しますか?

.claude/settings.jsoncommandにBashコマンドを直接記述すると、Windows(cmd/PowerShell)では動作しない場合があります。フックスクリプトをクロスプラットフォーム対応のNode.jsファイル(node .claude/hooks/script.js)で記述すれば、OSを問わず同様に動作します。

チームメンバーが個人キー(API Key)をGitに誤ってコミットするリスクはありませんか?

Custom HooksのPreToolUseイベントにGitステージングファイルの検査スクリプトを連携しておけば、.envsk-で始まるAPIキーが含まれるコードは、git commitの前の段階で自動的に遮断されます。

Claude Code CLIとCursorでは、チーム環境においてどちらが適していますか?

ターミナル中心のCI/CDパイプライン連携、強力なカスタムフックによる制御、大規模な複数ファイルのリファクタリングにはClaude Code CLIが圧倒的に有利です。一方で、リアルタイムのインライン自動補完やビジュアル編集がメインであればCursorが快適です。最近の優秀なチームでは両方のツールを併用し, .claude/settings.json.cursorrulesを同時に管理しています。