自作プラグインをClaude Codeで開発中の人向け
自作プラグインのSKILL.md(skillの説明書ファイル)やhook(自動処理のトリガー設定)を書き換えた直後に、Claude Code全体を立ち上げ直さず変更だけ反映させたい場面で叩く。1分のうちに何度も編集→確認をまわす開発ループで一番役立つ
自分でプラグインを作りながら Claude Code に組み込んでいるとき、SKILL.md や hook ファイルを書き換えても、画面上の動作はさっき読み込んだ内容のままで止まっています。Claude Code は起動時に1回だけプラグインを読み込み、その後は手元で何を書き換えても気付いてくれません。
かといって毎回 Claude Code を閉じて起動し直すのは、会話の文脈もリセットされて面倒です。/reload-plugins は、会話を続けたまま、アクティブなプラグインの中身だけをもう一度読み直してくれます。
噛み砕くと
家電のコンセントを抜き差しせず、リモコンの「設定再読み込み」ボタンを押す感覚に近いです。テレビ本体は Claude Code、設定ファイルがプラグインの中身で、テレビをつけっぱなしのまま設定だけ最新版に入れ替えるイメージです。やったことを反映するために、わざわざ全部をオフにする必要はない。
プラグイン開発の作業ループは「ファイル編集 → 反映を確認」を1日に何十回もまわします。毎回 Claude Code 全体を立ち上げ直していると、それだけで時間も集中力も削られる。/reload-plugins はこの作業ループを短くするための専用ボタンと考えていいです。
大事な前提:少なくとも1つプラグインが読み込まれている状態で叩く
/reload-plugins は「いま読み込まれているプラグイン」を対象に動くコマンドです。/plugin でインストール済みのプラグインが1つもなく、--plugin-dir でもロードしていない状態で叩いても、再読み込み対象がなくて意味がありません。
開発中はだいたい claude --plugin-dir ./my-first-plugin のように、フォルダを直接指定して立ち上げているはずです。その状態なら準備OKです。
「自作プラグイン my-first-plugin の SKILL.md を編集して即反映」を例に、実際の手順を見る
公式チュートリアルにも出てくる小さな例で、最初は名前を受け取らないただの挨拶 skill を、ユーザーが入力した名前を呼んで挨拶するように書き換える、という流れを再現します。/reload-plugins がどこに挟まるかが要点です。
ステップ1: --plugin-dir で開発中のプラグインを読み込んで起動
ターミナルで自作プラグインのフォルダを指定して Claude Code を立ち上げます。
$ claude --plugin-dir ./my-first-plugin
起動後、/help を叩くと /my-first-plugin:hello という skill が一覧に出てきます。
ステップ2: いったん動作確認
編集前の状態で、まず1回叩いておきます。
> /my-first-plugin:hello
Claude が「やあ、今日はどんなお手伝いを?」みたいな汎用の挨拶を返します。コマンドの後ろに何も書かない素の状態です。
ステップ3: SKILL.md を編集する
my-first-plugin/skills/hello/SKILL.md を別エディタで開いて、本文を「$ARGUMENTS で渡された名前を呼んで温かく挨拶する」に書き換えます。
---
description: Greet the user with a personalized message
---
# Hello Skill
Greet the user named "$ARGUMENTS" warmly and ask how you can help them today.
保存して、Claude Code の画面に戻ります。
ステップ4: ここで初心者がやりがちな勘違いをひとつ
このまま /my-first-plugin:hello Alex を叩いても、Claude は古い SKILL.md の中身で動きます。「保存したら自動で反映される」と思いがちですが、Claude Code は起動時に読み込んだ内容を覚えたままで、ファイルの保存を監視してはくれません。
再読み込みは、こちらから明示的に頼む必要があります。
ステップ5: /reload-plugins を叩く
> /reload-plugins
Claude Code がアクティブなプラグインを全部もう一度読み直して、こんな感じのレポートを返します。
Reloaded 1 plugin(s):
- my-first-plugin: 1 skill, 0 agents, 0 hooks, 0 MCP servers, 0 LSP servers
各カテゴリの読み込み数が出るので、「あれ、hook が 0個になってる、書いたはずなのに」みたいな食い違いがあれば、ここで気付けます。読み込み時にエラーが出た場合は、その内容も一緒に表示されます。
ステップ6: 編集後の動作を確認
> /my-first-plugin:hello Alex
今度は「Alex、ようこそ!今日は何のお手伝いをしましょうか」のように、名前を呼んでくれる挨拶に変わります。Claude Code を閉じて立ち上げ直さずに、編集が反映されました。
つまり /reload-plugins は何をしてくれるのか
- やってくれる: アクティブなプラグインの skill / agent / hook / プラグイン同梱の MCP サーバー / プラグイン同梱の LSP サーバーをもう一度読み直す。各カテゴリで何個読み込んだかをレポートし、読み込み失敗があれば flag する
- やってくれない:
monitors/monitors.jsonのバックグラウンドモニターは対象外。プラグインのsettings.jsonでメイン担当エージェントを切り替えるagentキーも対象外。これらを変えた場合は Claude Code 自体の再起動が必要 - 意味が薄い場面: プラグインを1つもロードしていない素の Claude Code セッション。
.claude/フォルダ直下の標準構成、つまりプラグイン化していない skill や hook を編集した場合も、同じ目的の再読み込みフローを別途使うことになる
使いどころ3シナリオ(具体題材で再現)
シナリオ1: 自作プラグインの SKILL.md を何度も書き換えて挙動を詰めているとき
「世界の魚を紹介するブログ」を作るために、記事の構成テンプレを出力する skill を自作している場面を想像してください。最初は出力フォーマットが堅すぎたので、SKILL.md の指示文を「もっと一人称で、釣り場のエピソードを混ぜる」に書き換える。保存して /reload-plugins を叩くと、次の /fish-blog:draft アジ から新しい指示で動きます。文章の癖は一発で決まらないので、この「書き換え → reload → 試し打ち」のループを30分で20回まわす、みたいな使い方になります。
シナリオ2: hook を仕込んで自動処理を組み立てているとき
家計簿アプリを開発中で、TypeScript ファイルを編集したら自動で npm run lint:fix を走らせたい、という hook を hooks/hooks.json に書いている場面。matcher の正規表現が Write|Edit で合っているか、コマンドへの渡し方がこれで正しいか、実際にファイルを編集して確かめたい。/reload-plugins で hook 設定を読み直してから、別のテストファイルを Edit させてみると、lint が走ったかどうかで判定できます。
シナリオ3: チームメンバーが配ってくれた開発中プラグインを試食しているとき
同僚から「セキュリティレビュー用の skill を試作したから、フィードバックほしい」と Slack で zip をもらった場面。claude --plugin-dir ./security-review-plugin.zip で読み込んで触ってみたら、出力が回りくどい。Slack で「ここをこう変えてほしい」と返したら、修正版が10分後に届く。新しい zip に差し替えてもらった後は、/reload-plugins で読み直せば、Claude Code を再起動せずに修正版を試せます。レビューのテンポが落ちません。
初心者が踏みやすい落とし穴
- バックグラウンドモニター(
monitors/monitors.json)とsettings.jsonのagentキーは reload では反映されない。公式が明示的に挙げているのは skill / agent / hook / MCP / LSP の5種類だけです。monitors/monitors.jsonや、プラグインのデフォルト挙動を切り替えるsettings.jsonのagentキーを書き換えた場合は、おとなしく Claude Code を立ち上げ直しましょう - プラグインの名前を変えても、reload では新しい名前空間にならない。
plugin.jsonのnameやversionを書き換えても、/old-name:helloのままで/new-name:helloとして呼べないのは、namespace の付け替えに完全再起動が必要だからです。リネームしたら一度終了してから入り直す - load errors(読み込み失敗)は表示されるだけで、自動修正はされない。SKILL.md の YAML frontmatter、つまり先頭の
---で囲んだ設定ブロックに typo があると、その skill だけ読み込みに失敗します。/reload-pluginsのレポートにerrors: 1みたいな行が出ていないか、reload するたびに必ず目を通す癖をつけてください - 「skill が一覧に出てこない」原因の大半はファイル配置のミス。
skills/hello/SKILL.mdのように「フォルダ名 = skill名、その中の SKILL.md(大文字)」という構造から外れていると、reload しても認識されません。.claude-plugin/の中にskills/を入れてしまっている事故も公式が警告しています - マーケットプレイスからインストール済みのプラグインと、
--plugin-dirでロードした同名プラグインがある場合、ローカル側が優先される。reload してもインストール版に切り替わらないので、「あれ、最新版を試したつもりが古いまま」というときは、起動時の指定方法を見直す - 外部の MCP サーバープロセス自体は再起動されない。プラグインの
.mcp.json設定は読み直されますが、そこに書いてあるサーバー本体は別プロセスで動いていて、コードを書き換えても古いまま動き続けます。MCP サーバーのコードを変えた日は、それ自体の再起動も忘れない - 会話中に reload しても、すでに進んでいる会話の文脈はそのまま残る。これは利点でもありますが、「古い skill の出力を前提に Claude が話し続ける」現象が起きうる。重大な挙動変更を試すときは、新しいセッションで叩き直すほうが切り分けが楽です
書き方
/reload-plugins
やってみるとこうなる
入力
/reload-plugins
出力例
Reloaded 1 plugin(s):
- my-first-plugin: 1 skill, 0 agents, 0 hooks, 0 MCP servers, 0 LSP servers
このページに出てきた言葉
- プラグイン
- Claude Codeに機能を追加できる外付けの拡張パック。skill・agent・hook・MCPサーバーなどを1つのフォルダにまとめた形で配布する
- SKILL.md
- プラグインの中で「このコマンドが呼ばれたら何をするか」をClaudeに教えるためのMarkdown形式の説明書ファイル
- hook
- ファイル編集後やコマンド実行前など、特定のイベントに合わせて自動で動かす処理を登録しておく仕組み
- namespace(名前空間)
- プラグインごとにつくコマンドの前置き。例: <code>/my-first-plugin:hello</code> の <code>my-first-plugin</code> 部分。複数プラグインで名前が衝突しないようにする
- manifest(plugin.json)
- プラグインの身分証明書みたいなファイル。<code>.claude-plugin/plugin.json</code> に置き、名前・説明・バージョンなどを書く
- MCP
- Model Context Protocolの略。Claudeが外部のツールやデータと安全にやり取りするための共通の取り決め
- LSP
- Language Server Protocolの略。エディタにコードの補完やエラー検出を教えてくれる仕組み