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

夕宮たいだふぁ……みんな〜、今度はMCPとHooksのお話だよぉ。Claude Code のシリーズで、いちばん奥が深い回かもしれないねぇ。
本記事では、Claude Code を業務レベルで使いこなすための2つの強力な機能、MCP(外部ツール連携)と Hooks(ライフサイクル自動化)を体系的に解説します。


📌 この記事で身につくこと
- MCPで GitHub・Notion・Sentry・PostgreSQL等を Claude に接続する方法
- Hooksでファイル編集・コミットなどを自動化する方法
- 20種類超のHookイベントと5つのハンドラータイプの違い
- コピペで使える実践レシピ集(Prettier自動実行、保護ファイルブロック等)
- MCP・Hooks・Skillsの使い分け
🎯 MCP・Hooks・Skills の関係(最初に頭に入れておこう)
本題に入る前に、混同しやすい3つの拡張機能の違いを整理しておきましょう。それぞれ目的が異なります。
| 機能 | 目的 | 誰が起動する | 例 |
|---|---|---|---|
| MCP | Claudeに新しい能力を追加 | 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 との違い(混同しやすいポイント)
| MCP | Hooks | |
|---|---|---|
| 何をする? | Claudeに新しい能力を追加 | Claudeの動作に自動処理を挟む |
| 誰が起動する? | Claudeが必要に応じて呼ぶ | イベントで自動起動 |
| 例 | 「GitHubから Issue 取得」 | 「ファイル編集後に lint 実行」 |
| 確実性 | LLM任せ(呼ばれないこともある) | 必ず実行される(決定論的) |
Hooks の最大の強みは「絶対に実行される」ことです。CLAUDE.md に「コミット前に lint してね」と書いても Claude が忘れる可能性がありますが、Hooks なら 100% 実行されます。



「決定論的」って言うのが大事だねぇ。Claudeが気を利かせて勝手にやってくれる方法と違って、Hooksは確実に発動するからぁ、安全装置として使えるんだぁ。
🧠 Hooks の主要イベント一覧
Hooks を仕込めるイベントは 20種類以上あります。多すぎるので、初学者は下記の主要イベント5つから覚えれば十分です。
最初に覚える5つのイベント
| イベント名 | いつ発火するか | 用途例 |
|---|---|---|
PreToolUse | ツール実行前 | コマンドの事前検証、保護 |
PostToolUse | ツール実行後(成功時) | フォーマット、Lint、通知 |
Notification | Claudeが入力待ち | デスクトップ通知 |
SessionStart | セッション開始時 | 初期コンテキスト注入 |
Stop | Claudeの応答完了 | テスト自動実行、レポート生成 |
参考:そのほかの主要イベント
慣れてきたら、以下のイベントも活用できます。
- UserPromptSubmit:ユーザー入力時
- SessionEnd:セッション終了時
- SubagentStart / SubagentStop:サブエージェント起動・終了時
- PreCompact / PostCompact:コンテキスト圧縮の前後
- InstructionsLoaded:CLAUDE.md等の読み込み時
- PermissionRequest:パーミッション確認時
- FileChanged:監視ファイル変更時
🔧 Hooks の5つのハンドラータイプ
Hooks は単なるシェルコマンド実行だけではなく、5つのハンドラータイプから選べます。最初は command 一択で十分ですが、知っておくと応用が効きます。
| タイプ | 用途 |
|---|---|
command(基本) | シェルコマンドを実行(lint、フォーマット等) |
http | 外部 API にリクエストを送信(リモート検証等) |
mcp_tool | 接続済み MCP サーバーのツールを呼び出す |
prompt | LLM に「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 --write…xargs(前のコマンドの出力を次のコマンドの引数として渡す 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:保護ファイルへの編集をブロックする
.env や package-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週目:基本ワークフロー(探索→計画→実装→検証)と
defaultパーミッションモードに慣れる - 2週目:よく使うコマンドを allow リストに追加。Skills を2〜3個作成(
/commit、/code-review等) - 3週目:MCP サーバーを1つ接続(GitHub推奨)。Hook を1つ仕込む(自動フォーマッタが最もおすすめ)
- 1ヶ月後:自分の業務で繰り返し使うパターンを Skill 化。チームのリポジトリにも
.claude/設定を共有
ここまで来れば、Claude Code はあなたの開発の中心ツールになっているはずです。
📘 公式ドキュメント:Connect Claude Code to tools via MCP/Hooks 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 導入ガイド








