はじめに
こんにちは。Kitoshiです。
趣味で個人開発をしています。
Claude Codeいいですよね。
私もすっかりClaude Codeユーザーになってしまいました。
使いたてのころは一つずつでしたが、最近は複数の開発を同時に進めることがほとんど…
こうなると、開発ワークフロー(Skill・Hooks等)の管理どうしよう…という悩みがでてきますよね。
この対応策として、こんな方法があったんだというものを見つけたのでご紹介します。
状況
前提として、私の環境は次のような状態でした。
- Skill 等を使った Claude Code の開発ワークフローが(単一リポジトリ内では)できあがっている。
- 単一リポジトリ内であれば、自己改善の仕組みもできている。
- 私は learnings(作業で得た学びをファイルに蓄積し、セッション開始時に読ませる仕組み)を使っています。
- 各開発環境は devcontainer で作成している。
-
【困りごと】リポジトリ間では、開発ワークフローの同期ができていない。
- あるリポジトリで開発ワークフローの修正をしても他に反映されない。
- 各リポジトリの設定が少しずつズレていく。
- learnings が各リポジトリに散らばり、他のリポジトリから参照できない。
やりたかったこと
- 開発ワークフローを一元管理したい。
- 1 箇所で修正したら、他リポジトリに反映されるようにしたい。
- 各リポジトリで作られる learnings も 1 箇所に集約したい。
- 変更履歴は git で管理したい。
やったこと
- 開発ワークフロー(Skill・Hooks等)と learnings をまとめて 1 つの git リポジトリで管理し、Claude Code の 自作Plugin 化した。
- 各リポジトリでの作業中に出た改善フィードバックや learnings は、いったん JIRA チケットとして起票し、Plugin 側で取り込む運用にした。
Plugin って?
Claude Code の Plugin は、Claude Code の拡張要素をひとつのパッケージにまとめて配布できる仕組みです。Skill だけでなく、次のようなものをまとめて入れられます。
| 種別 | 何ができるか |
|---|---|
| Skills | 状況に応じて参照される手順書・ノウハウ(skills/<name>/SKILL.md) |
| Hooks | ツール実行の前後などに割り込むスクリプト(危険操作のブロック等) |
| Commands | スラッシュコマンド |
| Agents | サブエージェント(専用レビュアー等) |
| MCP servers | 外部ツール接続の事前配線 |
| LSP servers | 言語サーバ連携 |
そして Plugin は Marketplace(Plugin の一覧=カタログ。git リポジトリなどでホストします)経由で配布します。利用側は Marketplace を登録して Plugin をインストールするだけです。
/plugin marketplace add <owner>/<repo> # Marketplace を登録
/plugin install <plugin>@<marketplace> # Plugin をインストール
/plugin marketplace update <marketplace> # 更新の取り込み
個人的に重要だったポイントは以下です。
- private リポジトリでも使える。 Marketplace 公式ドキュメントの「プライベートリポジトリ」節に、private リポジトリからのインストールがサポートされていること、その際「Claude Code は既存の Git 認証情報ヘルパーを使用する」ことが明記されています。
-
バージョンで配布が制御される。
plugin.jsonのversionを上げないと、利用側には新しい内容が配布されません。利用時に使用しているバージョンを判別できるよう、編集を忘れないようにしましょう。Plugin編集時の作業としてSkill等に組み込んでおくとよいと思います。
参考(公式ドキュメント):
何がうれしい?
-
/plugin marketplace updateするだけで、中央の変更が各環境に適用される。 1か所で修正すれば他への反映が容易です。 - git で管理できる。 ワークフローも learnings も、普通の開発と同じ流れでできます。
- Hooks も配れる。 Skill だけでなく Hooks も中央で管理して、全環境に一括で効かせられます。
- semver でリリースを制御できる。 「この変更はどの環境にいつ届くか」が version 単位で明確になります。
-
Skill が名前空間で分離される。 Plugin の Skill は
<plugin名>:<skill名>として扱われるため、各リポジトリのローカル Skill と衝突しません。 - 他の環境・人に渡しやすい gitに保存されているので共有するのが簡単です。
どうやったの?
全体像
リポジトリを 2 つ作成しました。
- devcontainer テンプレートリポジトリ: 新しい開発環境はここから生やす
- Plugin リポジトリ(private): Marketplace と Plugin 本体を置く中央リポジトリ。ワークフロー・Hooks・learnings をここに集約する
なお、私の場合はハンドルネームの Kitoshi に合わせて、リポジトリ名をそれぞれsaidan・saigu としています。以降の説明では汎用的に「テンプレート側」「Plugin 側」と書きます。
Plugin リポジトリの構成
plugin-repo/
├── .claude-plugin/marketplace.json # Marketplace 定義(plugin 一覧)
└── plugins/my-plugin/ # ★ 配布物(ここだけが各環境に届く)
├── .claude-plugin/plugin.json # plugin のメタ情報と version(semver)
├── hooks/hooks.json + hooks/*.sh # 共通 Hooks
└── skills/<skill-name>/SKILL.md # 共有 Skill(learnings もこの配下に置いています)
marketplace.json と plugin.json は最小構成だとこんな感じです。
// .claude-plugin/marketplace.json
{
"name": "my-marketplace",
"owner": { "name": "<owner>" },
"plugins": [
{ "name": "my-plugin", "source": "./plugins/my-plugin", "description": "共通スキルセット" }
]
}
// plugins/my-plugin/.claude-plugin/plugin.json
{
"name": "my-plugin",
"version": "1.0.0",
"repository": "https://github.com/<owner>/plugin-repo"
}
ポイント:
-
version は
plugin.jsonにだけ書く。 marketplace.json 側にも書けますが、二重管理になり事故のもとなので片方に寄せます。私はplugin.jsonの方に寄せました。 -
plugins/my-plugin/配下だけが配布物。 ここを変更する PR では、あわせてplugin.jsonのversionも上げます(version が変わらないと利用側に更新が配布されないため)。
導入・更新
各環境の Claude Code から:
# 初回導入
/plugin marketplace add <owner>/plugin-repo
/plugin install my-plugin@my-marketplace
# 更新
/plugin marketplace update my-marketplace
# → その後セッションを再起動(Plugin はセッション開始時にロードされる)
devcontainer テンプレート側でやっていること
新しいプロジェクトを始めるたびに手で add するのも面倒なので、テンプレート側の .claude/settings.json に Marketplace を事前配線しています。
// .claude/settings.json(テンプレートに同梱)
{
"extraKnownMarketplaces": {
"my-marketplace": {
"source": { "source": "github", "repo": "<owner>/plugin-repo" }
}
},
"enabledPlugins": {
"my-plugin@my-marketplace": true
}
}
こうしておくと、テンプレートから作った環境でフォルダを信頼したタイミングで Marketplace のインストールが促されます(この設定方法は前掲の Marketplace 公式ドキュメントに記載があります)。
困った点は?対応策は?
【困った点:利用者側のFBを反映できない】
Plugin はあくまで「配る」ための仕組みであり、利用側から元のリポジトリへ修正を反映する機能はない、というのが私の認識です。
インストールされた Plugin はキャッシュ(~/.claude/plugins/cache)にコピーされて読み込まれます(Marketplace 公式ドキュメントに記載)。
そのため、各環境で learnings を追記したくなっても、そこから Plugin リポジトリ側に変更を送る導線がありません。
【対策:JIRAを経由】
変更したい内容は Claude に JIRA チケットとして起票させ、Plugin リポジトリ側で取り込む作りにすることで対応しました。
対象は learnings に限りません。「この Skill のここを直したい」「この Hook が誤発火した」といった単純な修正希望や改善フィードバックも、同じようにチケットに乗せます。
- 各リポジトリでの作業中に出た修正希望・フィードバック・learnings を、Atlassian MCP 経由で JIRA に起票する(起票用の Skill を Plugin 側に入れておき、Claude に起票させます)
- Plugin リポジトリ側で、溜まったチケットに対応する
- 2の修正をmainにマージする → 各環境で
updateすれば反映
所感
これまで Plugin は「配布されているものを使う」ことばかりだったので、当初は自分用のものを作るという発想がありませんでした。
ですが実際に作ってみると、やりたかったことは結構満たせている気がしています。
(あと、どうでもいいのですが、saigu:saigu-feedback のような自作の Plugin が Claude Code の中で呼ばれているのを見ると、なんかテンション上がります。)
以上です。同じような困りごとを持ってる方の参考になれば幸いです。
もちろん、方法は他にもあるので選択肢のひとつとしてみていただければと。
今後使っていく中で困ったことが出てきたら追記したいと思います。
感想はもちろん、間違っている点やもっといい方法をご存じでしたら、ぜひコメントで教えてください。
※ 本記事のコマンド・仕様は執筆時点(2026 年 7 月 18 日)のものです。Claude Code は更新が速いため、最新情報は公式ドキュメントをご確認ください。
※記事の執筆には生成AIを使用しています。