Claude Code MCP・Hooks活用ガイド|外部ツール連携と自動化を実現する方法

夕宮たいだ

ふぁ……みんな〜、今度はMCPとHooksのお話だよぉ。Claude Code のシリーズで、いちばん奥が深い回かもしれないねぇ。

本記事では、Claude Code を業務レベルで使いこなすための2つの強力な機能、MCP(外部ツール連携)Hooks(ライフサイクル自動化)を体系的に解説します。

Claude Codeを中心にMCP、Hooks、Skillsの役割を整理した関係図
図1:MCP・Hooks・Skillsは役割が違う
目次

📌 この記事で身につくこと

  • MCPで GitHub・Notion・Sentry・PostgreSQL等を Claude に接続する方法
  • Hooksでファイル編集・コミットなどを自動化する方法
  • 20種類超のHookイベントと5つのハンドラータイプの違い
  • コピペで使える実践レシピ集(Prettier自動実行、保護ファイルブロック等)
  • MCP・Hooks・Skillsの使い分け

🎯 MCP・Hooks・Skills の関係(最初に頭に入れておこう)

本題に入る前に、混同しやすい3つの拡張機能の違いを整理しておきましょう。それぞれ目的が異なります。

機能目的誰が起動する
MCPClaudeに新しい能力を追加Claudeが必要に応じて呼ぶ「GitHubからIssueを取得」
Hooks動作に自動処理を挟むイベントで自動起動「ファイル編集後に自動でlint」
Skillsプロンプトをコマンド化ユーザー or Claude/commit で規約コミット」
夕宮たいだ

ほよ?「能力を増やす(MCP) / 動作に割り込む(Hooks) / 呼び出しを楽にする(Skills)」って覚えると分かりやすいよぉ。


🔌 第1部:MCP(外部ツール連携)

MCP とは何か

MCP(Model Context Protocol)は、AI ツールと外部サービスを接続するためのオープンな共通規格です。難しく聞こえますが、要するに「Claude Code に新しい目と手を生やす仕組み」と理解すればOKです。

MCP なしの Claude Code は、ローカルのファイルしか読めません。しかし MCP サーバーを接続すると、世界が一気に広がります。

  • GitHub の MCP サーバー(GitHub=Microsoft 傘下のコード共有・共同作業プラットフォーム) → Issue/PR を直接読み書き
  • Notion の MCP サーバー(Notion=メモ・文書・データベースを統合した SaaS 型ドキュメントツール) → 設計ドキュメントを参照
  • PostgreSQL の MCP サーバー(PostgreSQL=オープンソースの本格 RDB=リレーショナルデータベース) → 実際の DB にクエリ(SQL の問い合わせ文)を実行
  • Sentry の MCP サーバー(Sentry=本番アプリのエラーを集約・可視化するエラー監視 SaaS) → 本番のエラーログを取得
  • Slack の MCP サーバー(Slack=ビジネスチャットツール) → 関連メッセージを参照

なぜ MCP が画期的なのか

MCP がない時代は、Jira(Atlassian 社が提供する課題管理 SaaS。エンタープライズ系開発で広く使われる)の Issue を Claude に見せたいなら毎回コピペしていました。これには複数の問題があります。

  • コピペが手間で、漏れも発生しやすい
  • 最新状態を反映させるのが面倒
  • そもそも AI から書き戻すことができない

MCP なら「Issue ENG-4521 を実装して PR を作って」と頼むだけで、Claude が Jira から Issue 内容を取得 → コードを実装 → GitHub に PR 作成、まで通しでこなせます。「文脈の橋渡し」が自動化されるのが画期的な点です。


🚀 STEP 1:最初の MCP サーバーを繋いでみる(GitHub編)

実際に試してみましょう。GitHub は最も使い勝手のよい入口です。

準備:GitHub のアクセストークンを取得

GitHub のトークン設定ページで、Fine-grained Personal Access Token(PAT:個人アクセストークン。「パスワード代わりにプログラムから GitHub を操作するための鍵」。Fine-grained=細粒度版は、リポジトリ単位で権限を絞れる新形式)を発行してください。Claude Code で作業したいリポジトリへのアクセス権限を与えます。

接続コマンド

ターミナル(Claude Code 外)で以下を実行します。

claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
  --header "Authorization: Bearer YOUR_GITHUB_PAT"

YOUR_GITHUB_PAT の部分を、先ほど発行したトークンに置き換えてください。

接続確認

claude mcp list

一覧に github が表示されれば成功です。

実際に使ってみる

Claude Code を起動してから、以下のように依頼します。

> PR #456 をレビューして、改善点を提案して
> いま自分にアサインされているIssueをすべて表示して
> このバグを修正するIssueを新規作成して。タイトルとラベルは適切につけて

Claude が裏で GitHub の API を叩き、結果を返してくれます。PR の実装〜レビュー〜マージまで、ターミナルから出ずに完結できるようになります。

夕宮たいだ

これ繋ぐとぉ、もうブラウザでGitHub見ない日も出てくるよぉ。Claude Code から Issue 一覧見れて、実装してPRまで出せるからねぇ。


📚 STEP 2:他の便利な MCP サーバーの例

Notion(ドキュメント連携)

claude mcp add --transport http notion https://mcp.notion.com/mcp

接続後、Claude Code 内で /mcp コマンドを実行すると、ブラウザが開いて Notion にログイン → 認証完了します。

> 「設計ドキュメント」というNotionページを読んで、その仕様通りに実装して

Sentry(本番エラー監視)

claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
> 過去24時間でいちばん多発しているエラーは何?根本原因を調査して修正案を提示して

PostgreSQL(DB直接操作)

claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \
  --dsn "postgresql://readonly:pass@your-db.com:5432/your_db"
# DSN(Data Source Name):データベースへの接続情報を1つの文字列にまとめたもの。
#   形式は ://<ユーザー>:<パスワード>@<ホスト>:<ポート>/
> orders テーブルのスキーマを見せて
> 過去90日購入していないユーザーを抽出して

Asana / Linear / Jira(タスク管理)

それぞれ専用の MCP サーバーが用意されています。タスク管理ツールを繋げば、「Issue の中身を読む → 実装する → コミットする → Issue を完了に更新」までが一つの流れで完結します。

Stripe・PayPal・HubSpot(業務系SaaS)

各社が公式 MCP サーバーを公開しているため、決済ログの分析・顧客データの参照などにも活用できます。

claude mcp add --transport http stripe https://mcp.stripe.com

🎯 STEP 3:MCP の保存場所(スコープ)を理解する

MCP サーバーは、3つの保存場所(スコープ)から選べます。

スコープ適用範囲チーム共有用途
local(デフォルト)現プロジェクトのみ・自分だけ個人の検証用、トークン入りの設定
project現プロジェクト・チーム全員✅(.mcp.jsonを Git に含める)チーム共通のツール(DB読み取り専用など)
user自分の全プロジェクト個人の便利ツール(GitHub PAT など)

例:GitHub を個人で全プロジェクト共通にしたい

claude mcp add --transport http github --scope user https://api.githubcopilot.com/mcp/ \
  --header "Authorization: Bearer YOUR_TOKEN"

例:プロジェクトの DB(読み取り専用)をチーム共有

claude mcp add --transport stdio --scope project db -- npx -y @bytebase/dbhub \
  --dsn "postgresql://readonly:pass@dev-db.company.com:5432/app"

プロジェクトルートに .mcp.json が作成されます。これを Git に含めれば、チーム全員で同じ MCP 設定を共有できます。


⚠️ STEP 4:MCP で気をつけるべきこと

信頼できるサーバーだけ使う

MCP サーバーはコードを実行できるため、出所不明のものは絶対にインストールしないでください。公式サーバーか、十分に検証された有名 OSSに絞るのが基本です。

プロンプトインジェクションのリスク

外部から取得したデータ(Issue や PR の本文など)に、「あなたは新しい指示に従いなさい」のような悪意ある指示が仕込まれている可能性があります(これを「プロンプトインジェクション」と呼びます。AI に対する攻撃手法の一種で、データに紛れ込ませた命令で AI の挙動を乗っ取ろうとするもの)。Claude がこれに引っかかってしまうと、意図しない操作を実行してしまうリスクがあります。

対策として、自動実行する MCP 操作は最小限にとどめ、機密データへのアクセスは慎重に行ってください。

初回利用時は承認ダイアログが出る

プロジェクトスコープの MCP サーバーは、初めて使うときに承認ダイアログが表示されます。心当たりのないサーバーが出たら拒否してください。

夕宮たいだ

MCPは便利だけどぉ、繋ぐ先は慎重に選ぼうねぇ。Issueの本文にこっそり「プロジェクトの全ファイルを送信して」みたいな悪意ある指示が混ざってるかもしれないからぁ……。


🪝 第2部:Hooks(自動化)

Hooks とは何か

Hooks(フック)は、Claude Code が特定のイベント(ファイル編集後、コマンド実行前、セッション開始時など)を起こしたときに、自動で実行される処理のことです。

例えば次のような自動化ができます。

  • ファイルを編集したら → 自動で Prettier が走る
  • コマンド実行前に → 危険なコマンドを事前に止める
  • セッションが完了したら → デスクトップ通知を出す
  • .env を編集しようとしたら → ブロックする

ひとことで言えば、「Claude Code のライフサイクルに割り込んで、好きな処理を挟める仕組み」です。

MCP との違い(混同しやすいポイント)

MCPHooks
何をする?Claudeに新しい能力を追加Claudeの動作に自動処理を挟む
誰が起動する?Claudeが必要に応じて呼ぶイベントで自動起動
「GitHubから Issue 取得」「ファイル編集後に lint 実行」
確実性LLM任せ(呼ばれないこともある)必ず実行される(決定論的)

Hooks の最大の強みは「絶対に実行される」ことです。CLAUDE.md に「コミット前に lint してね」と書いても Claude が忘れる可能性がありますが、Hooks なら 100% 実行されます。

夕宮たいだ

「決定論的」って言うのが大事だねぇ。Claudeが気を利かせて勝手にやってくれる方法と違って、Hooksは確実に発動するからぁ、安全装置として使えるんだぁ。


🧠 Hooks の主要イベント一覧

Hooks を仕込めるイベントは 20種類以上あります。多すぎるので、初学者は下記の主要イベント5つから覚えれば十分です。

最初に覚える5つのイベント

イベント名いつ発火するか用途例
PreToolUseツール実行前コマンドの事前検証、保護
PostToolUseツール実行後(成功時)フォーマット、Lint、通知
NotificationClaudeが入力待ちデスクトップ通知
SessionStartセッション開始時初期コンテキスト注入
StopClaudeの応答完了テスト自動実行、レポート生成

参考:そのほかの主要イベント

慣れてきたら、以下のイベントも活用できます。

  • UserPromptSubmit:ユーザー入力時
  • SessionEnd:セッション終了時
  • SubagentStart / SubagentStopサブエージェント起動・終了時
  • PreCompact / PostCompact:コンテキスト圧縮の前後
  • InstructionsLoadedCLAUDE.md等の読み込み時
  • PermissionRequest:パーミッション確認時
  • FileChanged:監視ファイル変更時

🔧 Hooks の5つのハンドラータイプ

Hooks は単なるシェルコマンド実行だけではなく、5つのハンドラータイプから選べます。最初は command 一択で十分ですが、知っておくと応用が効きます。

タイプ用途
command(基本)シェルコマンドを実行(lint、フォーマット等)
http外部 API にリクエストを送信(リモート検証等)
mcp_tool接続済み MCP サーバーのツールを呼び出す
promptLLM に「Yes/No 判定」を依頼(意味的な検証)
agentサブエージェントで複雑な検証を実行(実験的)

例えば prompt ハンドラーを使うと、「このSQL文は安全ですか?」のような自然言語の判断を、コミット前の自動チェックに組み込めます。本記事では、もっとも基本的な command 型を中心に解説します。


🚀 STEP 1:最初の Hook を設定する(通知編)

長時間タスクを走らせたあと、終わったことに気づかずに別作業していた……という経験は誰にでもあるはずです。通知 Hookでこれを解決できます。

macOS の場合

~/.claude/settings.json に以下を追加します。

{
  "hooks": {
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Claude Codeが入力を待っています\" with title \"Claude Code\"'"
          }
        ]
      }
    ]
  }
}

これで Claude が入力を待つたび、macOS の通知が表示されるようになります。

確認方法

Claude Code を起動して /hooks と入力すると、登録された Hooks の一覧が表示されます。Notification の下に追加した Hook が見えれば成功です。

Linux の場合

"command": "notify-send 'Claude Code' 'Claude Codeが入力を待っています'"

Windows の場合

"command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('入力待ち', 'Claude Code')\""

⚙️ STEP 2:自動フォーマッタ Hook(実用度No.1)

ファイル編集後に自動で Prettier を走らせる Hook です。これを入れるとフォーマット崩れが永遠に発生しなくなるため、最強クラスの実用度です。

.claude/settings.json(プロジェクト直下)に以下を追加します。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
          }
        ]
      }
    ]
  }
}

解説

  • PostToolUse … ツール実行後に発火
  • matcher: "Edit|Write" … ファイル編集系のツールだけに限定(パイプ | で複数指定)
  • jq -r '.tool_input.file_path'jq(JSON データを抽出するコマンドラインツール。「JSON 用の grep」のような存在)で、編集されたファイルパスを抽出
  • xargs npx prettier --writexargs(前のコマンドの出力を次のコマンドの引数として渡す Unix ツール)でそのファイルパスを Prettier(コード整形ツール)に渡し、整形を実行

💡 jq がインストールされていない場合は、brew install jq(Mac)か apt install jq(Linux)で導入してください。

他言語版

Python(Black:Python 用の標準的なコード整形ツール)

"command": "jq -r '.tool_input.file_path' | xargs python -m black"

TypeScript(Biome:JavaScript/TypeScript 向けの高速フォーマッタ&Linter。ESLint と Prettier を統合した新興ツール)

"command": "jq -r '.tool_input.file_path' | xargs npx @biomejs/biome format --write"
夕宮たいだ

これ仕込んでおくとぉ、Claudeが書いたコードはぜんぶ自動で整形されてからファイルに反映されるんだぁ。レビュアーから「フォーマット直してください」って言われる事故もなくなるよぉ。


🛡️ STEP 3:保護ファイルへの編集をブロックする

.envpackage-lock.json など、Claude が触ってはいけないファイルを完全に保護できます。

Hook スクリプトを作成

.claude/hooks/protect-files.sh を作成します。

#!/bin/bash
INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

PROTECTED=(".env" ".env.local" "package-lock.json" ".git/" "secrets.json")

for pattern in "${PROTECTED[@]}"; do
  if [[ "$FILE_PATH" == *"$pattern"* ]]; then
    echo "ブロック: $FILE_PATH は保護ファイル '$pattern' にマッチします" >&2
    exit 2
  fi
done

exit 0

実行権限を付与します。

chmod +x .claude/hooks/protect-files.sh

Hook に登録

.claude/settings.json に以下を追加します。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/protect-files.sh"
          }
        ]
      }
    ]
  }
}

これで Claude が .env を編集しようとした瞬間に自動でブロックされます。Claude は「このファイルは保護されている」と理解し、別の方法を探してくれます。

💡 exit 2 がポイントです。終了コード 2 で「ブロックする」、それ以外なら「許可する」を意味します。

夕宮たいだ

これは絶対に入れてほしいHookだよぉ。パーミッションのdenyと組み合わせて二重ロックすると、シークレット漏洩リスクをほぼゼロにできるからねぇ。


🎁 STEP 4:実用的な Hook レシピ集(コピペで使えます)

レシピ1:コミット前にテストを必ず実行

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "if": "Bash(git commit *)",
            "command": "npm test || (echo 'テストが失敗しました。コミットを中止します' >&2 && exit 2)"
          }
        ]
      }
    ]
  }
}

レシピ2:本番ブランチへの直接 push を禁止

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "if": "Bash(git push *)",
            "command": "INPUT=$(cat); if echo \"$INPUT\" | jq -r '.tool_input.command' | grep -E 'push.*(main|master|production)' > /dev/null; then echo '本番ブランチへの直接pushは禁止' >&2; exit 2; fi"
          }
        ]
      }
    ]
  }
}

レシピ3:すべての実行コマンドをログに記録(監査用)

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '\"\\(now | todate) \\(.tool_input.command)\"' >> ~/.claude/command-history.log"
          }
        ]
      }
    ]
  }
}

レシピ4:セッション開始時に重要情報を毎回注入

{
  "hooks": {
    "SessionStart": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "echo '【重要】このプロジェクトでは npm ではなく pnpm を使用。テストは pnpm test で実行。'"
          }
        ]
      }
    ]
  }
}

stdout に出した内容が Claude のコンテキストに毎セッション自動的に注入されます。


🔍 STEP 5:トラブルシューティング

Hook が発火しない

/hooks コマンドで一覧を確認し、該当の matcher(マッチャー)が間違っていないか確認してください。matcher は大文字小文字を区別するので注意が必要です。

「command not found」エラー

絶対パスを使うか、$CLAUDE_PROJECT_DIR 環境変数を使ってパスを指定してください。

JSON パースエラー

~/.zshrc 等のシェル設定で無条件に echo していると、それが Hook の出力に混ざって JSON が壊れます。インタラクティブシェルだけで echo するように [[ $- == *i* ]] && echo "..." のように修正してください。

設定ファイルを編集したのに反映されない

通常は自動検知されますが、効かないときはセッションを再起動してください。


🤔 第3部:MCP・Hooks・Skills の使い分け(決定木)

ここまで学んできた機能を、「どんなときにどれを使うか」の決定木で整理しておきます。

やりたいこと使うべき機能
外部サービスのデータを Claude に見せたいMCP
外部サービスに Claude から書き込みたいMCP
ファイル編集後に必ず処理を走らせたいHooks
危険な操作を確実にブロックしたいHooks
よく使うプロンプトをコマンド化したいSkills
プロジェクト固有のルールを AI に守らせたいCLAUDE.md
一時的に確認なしで作業したいパーミッションモード

🎯 全体まとめ:明日からの実践プラン

MCP・Hooks をいきなり全部覚える必要はありません。以下の段階的なロードマップで身につけるのが現実的です。

  1. 1週目:基本ワークフロー(探索→計画→実装→検証)と default パーミッションモードに慣れる
  2. 2週目:よく使うコマンドを allow リストに追加。Skills を2〜3個作成(/commit/code-review 等)
  3. 3週目:MCP サーバーを1つ接続(GitHub推奨)。Hook を1つ仕込む(自動フォーマッタが最もおすすめ)
  4. 1ヶ月後:自分の業務で繰り返し使うパターンを Skill 化。チームのリポジトリにも .claude/ 設定を共有

ここまで来れば、Claude Code はあなたの開発の中心ツールになっているはずです。

📘 公式ドキュメント:Connect Claude Code to tools via MCPHooks reference

夕宮たいだ

まぁ、そういうことなんだよぉ……ふぁ、長い旅、おつかれさまだったねぇ。MCPもHooksもいきなり全部やらなくていいからぁ、自分のペースで少しずつ取り入れていけばいいよぉ。みんな〜、楽しいClaude Codeライフを送ってねぇ。


🎮 Claude Code 解説シリーズ・全記事一覧

シリーズの他の記事もどうぞぉ……気になるところから読んでねぇ。

📘 01. Claude Code 用語集(初学者向け・全23語)
🚀 02. インストールと初回起動ガイド
📝 03. CLAUDE.md 完全ガイド
🛠️ 04. 実践ワークフロー集
🛡️ 05. パーミッションと安全設定ガイド
06. スラッシュコマンド & スキル完全ガイド
🔌 07. MCP・Hooks活用ガイド
🎭 08. サブエージェント・並列作業ガイド
🏆 09. プロのベストプラクティス完全集
🎨 10. Claude Code × 3DCG活用ガイド
🧊 11. Claude Code × Blender 導入ガイド

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次