blog

claude code 拡張機能|2026年版ガイド

Claude Code 拡張機能とは——できることと全体像

Claude Codeは、AnthropicのAIアシスタント「Claude」をターミナル上で動かすエージェント型コーディングツールです。その機能をさらに広げる手段として注目されているのが「拡張機能」の仕組みです。具体的には、MCP(Model Context Protocol)サーバーによる外部ツール連携、カスタムスラッシュコマンドCLAUDE.mdによるプロジェクト固有の指示設定、そしてフック(Hooks)によるイベント駆動の自動化という4つの軸で構成されています。

私たちクリスタルメソッドではClaude Codeを実務のメイン開発補助ツールとして日常的に利用しており、これらの拡張機能を組み合わせることで、素のClaude Codeとは一線を画した生産性を実現しています。本記事では、各拡張機能の仕組み・設定方法・実践的な活用例を網羅的に解説します。


拡張機能の全体構造

Claude Codeの拡張機能は大きく4つのレイヤーに整理できます。それぞれが独立しながら相互に組み合わせて使えるのが特徴です。

拡張レイヤー 主な役割 設定ファイル/手段
MCPサーバー 外部ツール・API・DBへの接続 claude_desktop_config.json / .mcp.json
カスタムスラッシュコマンド 繰り返しプロンプトの自動化 .claude/commands/ 配下のMarkdownファイル
CLAUDE.md プロジェクト・ユーザー固有の指示 CLAUDE.md(複数階層に配置可)
フック(Hooks) イベント発火時のスクリプト実行 settings.json の hooks セクション

MCPサーバー連携——Claude Codeの能力を外部へ広げる

MCP(Model Context Protocol)は、Anthropicが2024年に公開したオープンプロトコルで、AIモデルと外部ツールを標準化された方法で接続します。Claude CodeはMCPクライアントとして機能し、MCPサーバーが提供する「ツール」「リソース」「プロンプト」の3種類の機能を呼び出せます。

MCPサーバーの追加方法

Claude Codeへのサーバー追加はCLIコマンドまたは設定ファイルの直接編集で行います。最も手軽なのはCLIです。

# npxで起動するMCPサーバーを追加(プロジェクトスコープ)
claude mcp add <サーバー名> -- npx -y <パッケージ名>

# 例: GitHub MCPサーバーを追加
claude mcp add github -- npx -y @modelcontextprotocol/server-github

# 環境変数が必要な場合
claude mcp add github -e GITHUB_PERSONAL_ACCESS_TOKEN=ghp_xxxx -- npx -y @modelcontextprotocol/server-github

スコープはlocal(デフォルト、個人の~/.claude/)project(リポジトリの.mcp.json)user(全プロジェクト共通)の3段階で管理できます。チームで共有したい場合は--scope projectを指定してリポジトリにコミットするのが推奨パターンです。

# プロジェクトスコープで追加
claude mcp add github --scope project -- npx -y @modelcontextprotocol/server-github

# 追加済みサーバーの確認
claude mcp list

# 特定サーバーの詳細確認
claude mcp get github

主要な公式・コミュニティMCPサーバー一覧

カテゴリ サーバー名 できること
バージョン管理 @modelcontextprotocol/server-github PR作成・Issue管理・コードレビュー
データベース @modelcontextprotocol/server-postgres SQLクエリ実行・スキーマ参照
ファイルシステム @modelcontextprotocol/server-filesystem 指定ディレクトリへの安全なファイル操作
Web検索 @modelcontextprotocol/server-brave-search Brave Search APIでリアルタイム検索
ブラウザ操作 @playwright/mcp ブラウザ自動操作・E2Eテスト補助
タスク管理 @modelcontextprotocol/server-linear LinearのIssue/プロジェクト操作
Slack連携 @modelcontextprotocol/server-slack メッセージ送信・チャンネル参照
AWS @modelcontextprotocol/server-aws-kb-retrieval Knowledge Base検索・Bedrock連携

MCPサーバーの設定ファイル(.mcp.json)の書き方

プロジェクトルートに置く.mcp.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"],
      "env": {
        "POSTGRES_CONNECTION_STRING": "${DATABASE_URL}"
      }
    }
  }
}

実運用のポイント:環境変数は${VAR_NAME}形式で参照でき、実際の値はシェルの環境変数から読み込まれます。APIキーをファイルにベタ書きせずに済むので、チーム開発でそのままコミット可能です。私たちの環境ではGitHub・PostgreSQL・Playwrightの3サーバーを常時有効にしており、コードレビュー依頼やDBの状態確認をClaude Codeに直接投げられる状態を作っています。

カスタムMCPサーバーの自作

社内ツールや独自APIと連携したい場合は、MCPサーバーを自作できます。TypeScript/Python両方にSDKが提供されており、最小構成は以下です。

// TypeScript (Node.js) の最小MCPサーバー例
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

const server = new Server(
  { name: "my-custom-server", version: "1.0.0" },
  { capabilities: { tools: {} } }
);

server.setRequestHandler("tools/list", async () => ({
  tools: [{
    name: "get_project_status",
    description: "社内プロジェクト管理システムの状態を取得",
    inputSchema: {
      type: "object",
      properties: {
        project_id: { type: "string", description: "プロジェクトID" }
      },
      required: ["project_id"]
    }
  }]
}));

server.setRequestHandler("tools/call", async (request) => {
  if (request.params.name === "get_project_status") {
    const { project_id } = request.params.arguments;
    // 実際のAPI呼び出しをここに実装
    return { content: [{ type: "text", text: `Project ${project_id}: 進行中` }] };
  }
});

const transport = new StdioServerTransport();
await server.connect(transport);

カスタムスラッシュコマンド——繰り返し作業を一発で呼び出す

カスタムスラッシュコマンドは、よく使うプロンプトをMarkdownファイルとして保存しておき、/コマンド名で呼び出せる機能です。定型的なコードレビュー依頼・テスト生成・ドキュメント作成などを定型化するのに適しています。

作成方法と保存場所

📁 プロジェクト共有
.claude/commands/ 配下
リポジトリにコミット→チーム全員で共有
📁 個人設定
~/.claude/commands/ 配下
全プロジェクトから呼び出せる個人用

ファイル名がそのままコマンド名になります(review.md/review)。サブディレクトリを使うとネームスペース付きのコマンドになります(.claude/commands/git/commit.md/git:commit)。

カスタムスラッシュコマンドの実例

以下はコードレビューを依頼するコマンドの例です。$ARGUMENTSでユーザーが追加入力したテキストをプロンプトに挿入できます。

# ファイル: .claude/commands/review.md

以下のコードをシニアエンジニアの視点でレビューしてください。

## レビュー観点
- バグや論理的な誤りの指摘
- パフォーマンス上の懸念点
- セキュリティリスク(SQLインジェクション、XSS等)
- 可読性・命名規則の改善提案
- テストの網羅性

## 追加指示
$ARGUMENTS

## 出力形式
指摘事項は重要度(🔴高/🟡中/🟢低)を付けて箇条書きにしてください。

使う際はセッションで/review TypeScriptの型安全性も確認してと入力するだけで、定型のレビュー観点+追加指示が一括でClaudeに送られます。

動的コンテキストを活用した高度なコマンド

コマンドファイル内では、Bash実行結果やファイル内容を動的に差し込めます。

# ファイル: .claude/commands/changelog.md
# 最新コミットを参照してCHANGELOGを生成するコマンド

以下のgitログを元に、ユーザー向けのCHANGELOG(日本語)を生成してください。

## 対象コミット
!`git log --oneline -20`

## CHANGELOG形式
- ### Added / Changed / Fixed / Deprecated のセクション分け
- 技術的な詳細ではなく、ユーザーへの影響を中心に記述
- バージョン番号: $ARGUMENTS

!`コマンド`構文でシェルコマンドの実行結果をプロンプトに埋め込めます。これにより、実行時点の最新情報をコンテキストとして渡せます。私たちの現場では、このパターンでリリースノート生成・テストカバレッジレポートのサマリー・依存パッケージの脆弱性チェックを自動化しています。

カスタムスラッシュコマンドの一覧が表示されたターミナル画面のイメージ
カスタムスラッシュコマンドの一覧が表示されたターミナル画面のイメージ

CLAUDE.md——プロジェクトの文脈をClaudeに永続的に記憶させる

CLAUDE.mdは、Claude Codeがセッション開始時に自動的に読み込む指示ファイルです。「毎回同じことを説明するのが煩わしい」という問題を解決する最も基本的な拡張手段です。

読み込まれるCLAUDE.mdの優先順位

~/.claude/CLAUDE.md(グローバル:全プロジェクト共通の個人設定)
↓ 上書き/追記
プロジェクトルートの CLAUDE.md(リポジトリレベルの指示)
↓ 上書き/追記
サブディレクトリの CLAUDE.md(そのフォルダ作業時のみ追加で読み込み)

すべてのCLAUDE.mdが連結されてシステムプロンプトの冒頭に挿入されます。階層構造を使うことで、「全社共通」「プロジェクト共通」「特定モジュール専用」という粒度で指示を管理できます。

実践的なCLAUDE.mdの書き方

# プロジェクト概要
このリポジトリはNext.js 15 + TypeScript + Prismaで構築したSaaSプロダクトです。
ターゲットユーザー: 中小企業の経理担当者

# 技術スタック
- フロントエンド: Next.js 15 (App Router), Tailwind CSS v4, Shadcn/ui
- バックエンド: Next.js API Routes, Prisma ORM
- DB: PostgreSQL 16
- テスト: Vitest + Testing Library
- デプロイ: Vercel

# コーディング規約
- TypeScriptのstrictモードを厳守
- any型の使用禁止(unknownを使うこと)
- コンポーネントはServer Componentを基本とし、インタラクションが必要な場合のみ"use client"
- 関数コンポーネントのみ使用(クラスコンポーネント禁止)
- テストは変更したファイルと同ディレクトリに __tests__/ フォルダを作成して配置

# 重要なディレクトリ構造
/src/app          - App Routerのページ
/src/components   - 共通UIコンポーネント
/src/lib          - ユーティリティ・設定
/src/server       - サーバーサイドロジック

# 注意事項
- 環境変数は必ず /src/env.ts のスキーマを通じて参照
- DBマイグレーションは `npx prisma migrate dev` で実行
- コミット前に `npm run lint && npm run typecheck` を通すこと

# 禁止事項
- console.logをコードに残すこと(デバッグ後は必ず削除)
- _ で始まる未使用変数の放置

私たちは「注意事項」セクションに特に力を入れています。「環境変数の参照方法」「テストの配置ルール」など、新メンバーが最初に間違えやすいことをここに書いておくと、Claudeが自然と正しいパターンで実装してくれます。

CLAUDE.mdに書くべき内容・書かない方が良い内容

書くべき内容 ✅ 書かない方が良い内容 ❌
技術スタック・バージョン APIキー・パスワード等のシークレット
コーディング規約・命名規則 頻繁に変わるバージョン番号(古くなりやすい)
よく使うコマンド・ビルド手順 冗長な説明(Claudeは賢いので省略可能なことが多い)
プロジェクト固有のディレクトリ構造 「丁寧に答えてください」等の汎用的なお願い
明示的に禁止したいパターン ビジネスロジックの詳細(コードを読ませる方が正確)

フック(Hooks)——イベント駆動で処理を自動化する

フックは、Claude Codeが特定のアクションを実行するタイミングで自動的に外部コマンドを走らせる機能です。2025年に追加された比較的新しい機能で、品質チェックの自動化やセキュリティ制御に特に有効です。

利用可能なフックの種類

フック名 発火タイミング 主な用途
PreToolUse ツール実行前 危険なコマンドのブロック・確認
PostToolUse ツール実行後 ファイル保存後のlint・フォーマット自動実行
Notification Claude から通知が来たとき Slack通知・デスクトップ通知の送信
Stop Claudeの応答が完了したとき 完了ログの記録・後処理スクリプト実行
SubagentStop サブエージェントの応答完了時 並列タスクの完了検知

フックの設定方法

フックは~/.claude/settings.json(ユーザー設定)または.claude/settings.json(プロジェクト設定)に記述します。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "npx eslint --fix ${file} && npx prettier --write ${file}"
          }
        ]
      }
    ],
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/check_dangerous_command.py"
          }
        ]
      }
    ],
    "Notification": [
      {
        "matcher": ".*",
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Claude Codeが待機中です\" with title \"Claude Code\"'"
          }
        ]
      }
    ]
  }
}

危険なコマンドをブロックするPreToolUseフックの実装例

PreToolUseフックはスクリプトの終了コードでClaudeの動作を制御できます。終了コード2を返すとClaudeがそのツールの実行を中止します

#!/usr/bin/env python3
# ~/.claude/hooks/check_dangerous_command.py

import json
import sys

# stdin からツール情報を受け取る
tool_input = json.loads(sys.stdin.read())
command = tool_input.get("command", "")

# 危険なパターンのリスト
dangerous_patterns = [
    "rm -rf /",
    "DROP TABLE",
    "DELETE FROM",
    "> /dev/sda",
    "chmod 777 /",
]

for pattern in dangerous_patterns:
    if pattern.lower() in command.lower():
        print(f"[セキュリティフック] 危険なコマンドをブロックしました: {pattern}", file=sys.stderr)
        sys.exit(2)  # 終了コード2でClaude Codeが実行を中止

sys.exit(0)  # 通常終了でそのまま実行を許可

このパターンは本番環境での事故防止に非常に効果的です。私たちの環境では、`DROP TABLE`系のSQL・本番環境のリセットコマンド・機密ディレクトリへの書き込みをブロックリストに入れており、Claudeが意図せず危険な操作を提案してきた場合の安全弁として機能しています。

イベント駆動のフックによる自動化パイプラインの概念図
イベント駆動のフックによる自動化パイプラインの概念図

拡張機能を組み合わせた実践的なワークフロー例

各拡張機能は単独でも有用ですが、組み合わせることで真価を発揮します。以下は私たちが実際に運用しているワークフローのパターンです。

パターン1:PR作成の全自動化

CLAUDE.md
ブランチ命名規則・PRテンプレートを定義
/pr コマンド
gitlogを読み込んでPR文面を生成するスラッシュコマンド
GitHub MCP
生成した文面でGitHub PRを実際に作成

パターン2:コード変更の品質ゲート自動化

Claudeがファイル編集
PostToolUseフック
ESLint + Prettierを自動実行
Vitest自動実行
変更ファイルに関連するテストのみ実行
Notificationフック
完了をデスクトップ通知

パターン3:DBスキーマ変更の安全な補助

PostgreSQL MCP
現在のスキーマをコンテキストとして取得
Claudeがマイグレーション生成
既存スキーマを把握した上で安全なマイグレーション作成
PreToolUseフック
DROP系操作は実行前に強制確認

拡張機能の設定時によくあるトラブルと対処法

症状 原因 対処法
MCPサーバーが認識されない パスの誤り・パッケージ未インストール claude mcp listで確認後、claude mcp get <名前>でエラー詳細を確認
スラッシュコマンドが表示されない ファイル拡張子が.md以外・ディレクトリ名の誤り .claude/commands/配下に.mdで保存し直す。セッションを再起動
フックが発火しない JSONの構文エラー・matcherの誤り settings.jsonをJSONバリデーターで確認。claude doctorコマンドで診断
CLAUDE.mdの内容が反映されない ファイルが大きすぎてコンテキスト制限に当たっている 不要な記述を削除。サブディレクトリのCLAUDE.mdに分割
環境変数がMCPに渡らない シェルのスコープ問題 .envファイルやdirenvで環境変数を管理し、セッション前にexportする
MCPサーバーが頻繁にタイムアウト ネットワーク遅延・サーバーの起動時間 npx の代わりにグローバルインストール済みのバイナリを直接指定

拡張機能を使う際のセキュリティ上の注意点

拡張機能はClaude Codeの能力を大幅に拡張しますが、同時にリスクも持ち込みます。実運用で徹底すべき点をまとめます。

  • MCPサーバーはソースを確認してから使う:コミュニティ製MCPサーバーは悪意あるパッケージが存在するリスクがあります。npmパッケージのダウンロード数・メンテナー・コードを確認してください。
  • .mcp.jsonをコミットする前に環境変数を参照しているか確認:APIキーが直書きされていないか、git diffで必ず確認します。
  • フックで実行するスクリプトへの権限を最小化:フックスクリプト自体が意図せぬ操作をしないよう、読み書き権限を絞ります。
  • CLAUDE.mdに機密情報を書かない:リポジトリにコミットされるため、本番DBのURLや認証情報は絶対に記載しないでください。
  • プロジェクトスコープの設定は信頼できるリポジトリのみ.mcp.json.claude/settings.jsonを含む外部リポジトリをcloneする際は、それらのファイルを確認してからclaudeコマンドを実行してください。

まとめ

Claude Codeの拡張機能は、MCPサーバー(外部ツール連携)カスタムスラッシュコマンド(プロンプトの定型化)CLAUDE.md(プロジェクト文脈の永続化)フック(イベント駆動の自動化)という4つの柱で構成されています。

それぞれ単独でも生産性を向上させますが、組み合わせることで「PR作成の全自動化」「コード変更ごとの品質チェック自動実行」「DBスキーマを把握した安全なマイグレーション生成」といった、単なるコード補完を超えたエージェント的なワークフローが実現します。

設定の難易度はCLAUDE.md→カスタムスラッシュコマンド→MCPサーバー→フックの順に上がります。まずはCLAUDE.mdにプロジェクト情報を書き込むところから始め、繰り返し使うプロンプトをスラッシュコマンド化し、徐々に外部ツール連携と自動化へ発展させていくのが現実的な導入ステップです。拡張機能を使いこなすことで、Claude Codeはプロジェクト固有の文脈を理解した「チームの一員」として機能するようになります。

関連記事

AIブログ購読

 
クリスタルメソッドがお届けする
AIブログの更新通知を受け取る

Study about AI

AIについて学ぶ

  • claude code 権限設定|2026年版ガイド

    claude code 権限設定|2026年版ガイド

    Claude Code 権限設定の完全ガイド|実務で使える設定例と運用ノウハウ Claude Codeを業務で活用する際、最初の壁になるのが権限設定です。ファイ...

  • claude code 拡張機能|2026年版ガイド

    claude code 拡張機能|2026年版ガイド

    Claude Code 拡張機能とは——できることと全体像 Claude Codeは、AnthropicのAIアシスタント「Claude」をターミナル上で動かす...

  • claude code 学習させない設定|2026年版ガイド

    claude code 学習させない設定|2026年版ガイド

    Claude Codeに学習させない設定とは何か Claude Codeを業務で使っていると「自分が入力したコードや会話内容がAnthropicのAI学習に使わ...

View more