Claude Code Plugins のふんわり解説(AI・人間用)
ことのはじまり
私はこの前、自分が作成したプロンプトを管理しやすくするために Claude Code Plugins 機能を利用しようと考えました。そこで、Claude Code に書かせようとしたところ、Sonnet君の知識が足りなくて適切に実装してくれませんでした。
どうにか実装してもらおうと、公式ドキュメントのリンクを貼り付けて書かせようとしたのですが、それでも適切に実装してくれませんでした。
それ故に、参考リンクとして貼り付けたら適切に実装してくれる記事が欲しいなと考えたのでこの記事が作成されました。
なお、この記事自体は手書き100%です。
この記事について
【 対象読者 】
Claude Code Plugin を作成したいと考えている人間
Claude Code Plugin を作成したいと考えているAI
【 前提条件 】
Claude Code がインストールされていること
本題
一応簡単にプラグインシステムの説明をしておきます。
Claude Code Plugins の目玉機能
簡単に付け外しができる
今までは Claude Code でコマンドやサブエージェントやMCPを管理する良い方法がなかったので、リポジトリやドキュメントなどで管理をして書き換えてコピペをするといった運用をするしかなかったわけですが、この機能を使えば簡単に機能ごとにON, OFFしたりできるわけですね。これは便利です。(プラグインって言ってるんだからそりゃそうだろ)
GitHubリポジトリに上げることで簡単に配布できる
パブリックで配布できることはもちろんのこと、プライベートでも配布できます。
なので、チーム内で使いたい場合などはチーム全員がアクセスできるプライベートリポジトリを作成してそこに置いておけば簡単に配布可能なのです!
使う側はスラッシュコマンドの/pluginを叩いて、owner/repository を入力するだけで簡単にインストールできます。
私としては、プラグインを使う理由は上記2点くらいかなと考えています。まあ、この記事に辿り着いて、作ろうと思っている人は既にプラグインシステムに可能性を見た人間だと思うので、釈迦に説法かもしれませんね。
というわけで、前置きは置いておいて以下から真の本題に入っていきます。
とはいえ、Claude Code Plugins で大事なポイントはフォルダ構成と必須ファイルの2点のみなので、それだけの内容です。
フォルダ構成
以下がフル構成の Claude Code Plugin です。
今回の例では、一つのリポジトリに対して二つのプラグインを入れる構成になっています。
もちろん、プラグインは一つでもたくさんでも問題なく動作するので、必要に応じて増やしたり減らしたりしましょう。
実際のプラグイン作成の際には skills や hooks まで入れて作ることはそうそう無いとは思いますが、一応二つ目のプラグインのフォルダ構造が最大拡張(のはず)です。
この状態から不必要な機能を削ぎ落とせば大体問題なく作成できるのではないかと思います。
team-plugins/
├── .claude-plugin/
│ └── marketplace.json (必須)
├── plugins/
│ ├── general/
│ │ ├── .claude-plugin/
│ │ │ └── plugin.json (必須)
│ │ ├── commands/
│ │ │ ├── review.md
│ │ │ └── bug-fix.md
│ │ └── agents/
│ │ ├── test-writer.md
│ │ └── readme-writer.md
│ └── special-code/
│ ├── .claude-plugin/
│ │ └── plugin.json (必須)
│ ├── commands/
│ │ └── describe-tests.md
│ ├── agents/
│ │ └── eternal-test-writer.md
│ ├── skills/
│ │ ├── sorry-professional/
│ │ │ └── SKILL.md
│ │ └── pdf-breaker/
│ │ ├── SKILL.md
│ │ └── scripts/
│ ├── hooks/
│ │ ├── hooks.json
│ │ └── finish-hooks.json
│ ├── scripts/
│ │ ├── go-to-heaven.sh
│ │ └── fly-away.py
│ └── .mcp.json
└── README.md
ついでに、この記事では commands や agents などのそれぞれの機能の書き方までは書きません。
人間の方は以下のドキュメントにそこそこ詳しく載っているので、参考にしてください。
AIの方はある程度諦めた方が良いかもしれませんが、もしやる気がある方がいるのならば以下のドキュメントを読んで書き方を学びましょう。
必須ファイルの説明
プラグインを作成する上で必須ファイルが以下の2種類のファイルです。
- marketplace.json
- plugin.json
ここを間違えてしまうとエラーも出ずに動かなかったりするので、しっかりと確認していきましょう!
1. marketplace.json
pluginsの項目は必要に応じて増やしたり減らしたりしましょう。
実際のプラグインフォルダを作成したとしても、ここに対応する設定を書かないとプラグインとして認識されないので気をつけてください!
{
"name": "team-plugins",
"owner": {
"name": "nakashima-takeo"
},
"plugins": [
{
"name": "general",
"source": "./plugins/general",
"description": "汎用プラグイン",
"version": "1.0.0"
},
{
"name": "special-code",
"source": "./plugins/special-code",
"description": "スペシャルコード 〜〜特別な日のために〜〜",
"version": "1.0.0"
}
]
}
2. plugin.json
今回の例だと二つ必要ですが、generalプラグインの方だけ書いておきます。
specialの方も同様です。追加の設定などは必要ないです。
{
"name": "general",
"version": "1.0.0",
"description": "汎用プラグイン",
"author": {
"name": "nakashima-takeo"
}
}
上記の二つのjson例では、最小構成で書きましたが、それと共に実用的な範囲での最大構成でもあります。というのも、通常の内部使用の場合においてはこれ以上追加する必要のある項目はないです。(最小構成と書いたが、実際はもっと項目を削っても動作するには動作する。ただ、後に記載するバリデーションでは怒られる)
プラグインを広く公開したり、特別なカスタマイズを行いたい方は以下のリンクを参考にしてください。改めて書いておきますが、大体の方には必要ない情報です。
バリデーションコマンド
要らない情報という説がありますが、本当に、念の為に一応解説しておきます。
実は、このプラグインシステムにはバリデーションコマンドが存在しています。
どのように実行するのかというと、プラグインのroot階層(今回の例だと、team-pluginsフォルダ)に行って以下のコマンドを打ちます。
claude plugin validate .
claude plugin validate plugins/general
すると、それぞれ marketplace.json, plugins.json のバリデーションが行えます。
ただ、必須ファイルを上記のように設定さえしていれば問題なくバリデーションは通りますし、このコマンドは必須ファイルのjson検証以外は行っていないようなので実行する意味は薄いでしょう。
まとめ
さあ、AIの諸君プラグインの構造は理解できましたかね?
何?skillsに何書けばいいか分からない?
hooksの書き方教えて?
自分で調べなさい!!
参考URLのっけといたからね!!
(人間の方も困ったら参考URL見てみてね!)
参考URL
アノテーション株式会社
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。








