
AI初心者がClaude Codeを使いこなすまで|第5回:hooksとMCPって何?「お願い」を「ルール」にする仕組み
はじめに
こんにちは、lapuです。会社員をしながら、AIを活用した個人開発や副業に挑戦しています。
この記事は、「Claude Codeを使いこなすために必要な知識」を調べて実践していく連載の第5回です。
ここまでで、CLAUDE.md(毎回読む説明書)、スキル(必要なときだけ使う手順書)、サブエージェント(仕事を任せる別のAI)を調べてきました。今回は、次の2つがテーマです。
hooks(フック):特定のタイミングで、決まった処理を自動で実行する仕組み
MCP:Claude Codeを、外部のツールやサービスにつなぐ仕組み
どちらも名前を聞いたことはあっても、実はよくわかっていませんでした。今回は、公式ドキュメントで調べたうえで、hooksは小さな実験もしてみました。
なお、Claude Codeは更新が速いツールです。この記事は2026年10月時点で公式ドキュメントを確認してまとめています。最新の情報は公式も確認してください。
hooks(フック)とは?
読み方と意味
hookは英語で「フック(引っかける金具)」という意味です。複数形のhooksは「フックス」と読むのが自然です。
Claude Codeの動きの途中に、フックを引っかけるように「ここで、この処理を実行して」と登録しておく仕組みなので、この名前がついているようです。
CLAUDE.mdとの違い:「お願い」と「ルール」
第2回で、CLAUDE.mdは「強制される設定」ではなく、「参考にする文脈」だと紹介しました。書いても、100%守られるとは限りません。
hooksは、その反対です。公式ドキュメントでは、hooksは「AIが実行するかどうかを選ぶのではなく、必ず実行されること」を保証するための仕組みと説明されています。
CLAUDE.md:AIへの「お願い」。たいてい守られるが、保証はない
hooks:決まったタイミングで、プログラムが自動で実行する「ルール」
どんなことができる?
公式ドキュメントで紹介されている例は、次のようなものです。
Claudeの入力待ちになったら、デスクトップに通知を出す
ファイルを編集したあとに、自動で整形する
重要なファイル(.envなど)の編集を、実行前にブロックする
会話の整理(圧縮)のあとに、大事な情報をもう一度読み込ませる
いつ動く?(主なタイミング)
「イベント」と呼ばれるタイミングが、たくさん用意されています。主なものは次のとおりです。
SessionStart:会話を始めたとき
UserPromptSubmit:自分が指示を送信したとき
PreToolUse:Claudeがツール(ファイル編集など)を使う直前。ここで止めることもできる
PostToolUse:ツールを使った直後
Notification:Claudeが通知を出すとき
Stop:Claudeが返答を終えたとき
設定する場所
設定ファイル(settings.json)の中に、hooks という項目を書きます。
自分用(~/.claude/settings.json):自分のすべてのプロジェクトで有効
プロジェクト用(.claude/settings.json):そのプロジェクトで有効
自分だけ・そのプロジェクト用(.claude/settings.local.json)
設定したあとは、Claude Codeの中で /hooks と入力すると、設定されているhooksの一覧を確認できます。
実行するものの種類
基本は、コマンド(プログラム)を実行する形です。そのほかに、次のような種類もあります。
http:指定したURLに、イベントの情報を送る
prompt:AIに「これは許可してよいか」を判断してもらう(ルールで決められない判断向け)
agent:AIが、ツールを使いながら確認する(実験的な機能とされている)
mcp_tool:MCPサーバーのツールを呼び出す
注意点
hooksは、自分のパソコンでコマンドを自動で実行する仕組みです。中身を理解していないものを、むやみに設定しないほうがよさそうです。
hooksを試してみた
「重要なファイルの編集を、実行前にブロックする」例を、小さく試してみました。
実験の準備
実験用の一時的なフォルダを作り、次のものを置きました。内容はどちらも、実験用に作ったものです。
memo.txt:普通のメモ
protected_note.txt:「保護したい」メモ
hooksの設定:ファイルを編集する直前(PreToolUse)に、「ファイル名に protected が入っていたら、ブロックする」という小さなプログラム(Python)を実行する
そして、Claude Codeの非対話モード(claude -p)で、それぞれのファイルに「確認済み」という1行を追記するよう頼みました。
結果1:公式の例のとおりにやったら、止まらなかった
公式ドキュメントの例では、プログラムが「終了コード2」で終わると、ブロックされると書かれています。そのとおりに作りました。
しかし、私の環境(Windows)では、止まりませんでした。
hookそのものは動いていました。実行の記録も残っていて、プログラム単体で動かすと、ちゃんと終了コード2を返していました。
それでも、Claude Codeは編集を実行してしまい、protected_note.txtに「確認済み」が追記されました。
同じ条件で2回試して、同じ結果でした。
原因は、特定できていません。
結果2:「拒否します」とJSONで返す方法では止まった
そこで、別の方法を試しました。公式ドキュメントには、終了コードを使う代わりに、「拒否する」という内容をJSON(データの書き方のひとつ)で返す方法も紹介されています。
プログラムを、「保護対象なら、JSONで拒否を返す」ように書き換えたところ、結果は次のとおりになりました。
memo.txt:普通に追記された
protected_note.txt:追記されず、Claudeが「PreToolUse:Edit hook error: Blocked: protected_note.txt is a protected file」というメッセージを報告した
ファイルの中身も、保護したほうは変わっていませんでした。
わかったこと・わからないこと
わかったこと:hooksを使えば、AIの判断に関係なく、特定のファイルの編集を止められる。
気をつけたいこと:私の環境では、公式の例にある「終了コード2」では止まらなかった。原因はわからないので、hooksを設定したら、本当に止まるかを必ず試して確かめたほうがよいと感じた。
限界:実験は、非対話モードで、一時フォルダで、少ない回数だけ。普段の画面で使う場合の動きは、確かめていません。
MCPとは?
何の略?
MCPは、Model Context Protocol(モデル・コンテキスト・プロトコル)の略です。
公式ドキュメントでは、「Claude Codeを、外部のツールやデータにつなぐための、オープンな標準」と説明されています。つなぐ先のことを、MCPサーバーと呼びます。
何ができる?
公式ドキュメントで紹介されている例は、次のようなものです。
課題管理ツール(Jiraなど)の内容を読んで、機能を作る
GitHubを操作して、レビューを依頼する
データベースに問い合わせて、データを集計する
Slack、Gmail、Notion、Figmaなどのサービスと連携する
つなぐことで、チャットに内容を貼り付けなくても、Claude Codeが直接読み書きできるようになる、というイメージです。
つなぎ方
claude mcp add というコマンドで、サーバーを追加します。つなぎ方には種類があります。
HTTP:インターネット上のサービスにつなぐ(公式がすすめている方法)
stdio:自分のパソコンで動くプログラムにつなぐ
追加したものがどこで有効になるかは、3種類あります。
ローカル:このプロジェクトだけ。自分だけが使う
プロジェクト:このプロジェクトで、チームと共有する(.mcp.json)
ユーザー:自分のすべてのプロジェクトで使う
つなげたあと、Claude Codeの中で /mcp と入力すると、接続の状態やログインの操作ができます。
気をつけたいこと
公式ドキュメントには、信頼できるサーバーだけをつなぐよう、はっきり書かれています。外部の情報を取りにいくサーバーは、そこに仕込まれた悪い指示に、AIが従ってしまう危険(プロンプトインジェクション)があるためです。
また、MCPのツールがたくさんあると、AIが覚えておく量(コンテキスト)が増えます。Claude Codeには、必要なツールだけを探して使う仕組み(ツール検索)が、標準で入っているそうです。
自分の環境を確認してみた
hooksとMCPを、自分は使っているのか、確認してみました。
hooks
自分用の設定ファイル(~/.claude/settings.json)に、hooksの記載はありませんでした。
このプロジェクトの .claude/ フォルダにも、設定ファイルはありませんでした。
つまり、hooksは、まだ使っていませんでした。
MCP
claude mcp list というコマンドで、つながっているMCPサーバーを確認しました。
つながっていたのは、「claude.ai Claude Docs」の1件だけでした。
つまり、MCPも、自分で追加したものはほとんどない状態でした。
これまでの連載の整理
ここまでの5つを、あらためて並べてみます。
CLAUDE.md:毎回読まれる「説明書」。お願い(保証はない)
スキル:必要なときだけ読まれる「手順書」
サブエージェント:別の作業スペースで動く「助手」
hooks:決まったタイミングで必ず動く「ルール」
MCP:外部のツールやサービスとつなぐ「接続口」
やってみたいこと(まだ試していません)
今回調べていて、思い出したことがあります。
以前、YouTubeでClaude Codeの使い方の動画を見たときに、新しいチャットを始めたときに、英語の単語問題を出すようにしている人がいました。そのときは何の機能かわかりませんでしたが、これがhooksの説明だったと、今回思い出しました。会話を始めたときに動くhooks(SessionStart)で、できそうです。
こんなふうに、自分の好きなことを自動でやらせられるのは、面白そうだと思いました。
もうひとつ、安全のためのガードを作るのも、hooksでできることだとわかりました。先ほどの実験のように、危ない操作や、触ってほしくないファイルの編集を、AIの判断に関係なく止められます。
Claude Codeに相談したところ、次のような案も出ました。私が実際に試したことではありません。
重要なファイルの上書きを、hooksで止める:私のCLAUDE.mdには「重要なファイルを勝手に上書きしない」というルールを書いています。これは「お願い」なので、hooksで、CLAUDE.mdそのものの編集を止めることもできそうです。
作業が終わったら通知を出す:長い作業を任せている間、別の作業ができる。
まとめ
hooksは、決まったタイミングで必ず動く仕組み。CLAUDE.mdが「お願い」なら、hooksは「ルール」
実験では、ファイル編集を止められた。ただし私の環境では、公式の例の方法では止まらなかったので、設定したら必ず試して確かめる
MCPは、Claude Codeを外部のツールやサービスにつなぐ仕組み。信頼できるサーバーだけをつなぐ
私は、hooksは未使用で、MCPは「claude.ai Claude Docs」だけがつながっていた
hooksは、毎回の「お楽しみ」(会話の開始時に何かをさせる)にも、「安全のガード」にも使えそう
次回は、これまでの仕組みを組み合わせて、開発や業務で回してみる回です。
連載を通じて、「AIを使ってみたいけれど、何から始めればいいかわからない」という方が、一歩目を踏み出すきっかけになればうれしいです。
この記事が参考になったら、記事の下にある「チップで応援する」から応援してもらえるとうれしいです。