こんにちは。JX通信社でCTOをしている小笠原(@yamitzky)です。
今回は、Claude Code の Marketplace や Agent Skill の社内活用の取り組みを紹介します。
課題
実は JX通信社では元々、ソースコード管理には GitLab を利用しており、GitLab CI で各種 CI/CD (lint, test, deploy など)を組んでいました。直近では、GitHub と GitHub Actions へ移行するという取り組みをしています。
ソースコードの移行だけであれば簡単な単純作業だけで終わりますが、GitLab CI から GitHub Actions への移行には時間がかかります。ただ YAML の書き方の変更するだけではなく次のような点を考慮しながら移行する必要がありました。
- 環境ごとのデプロイフローの整備
- プライベートリポジトリの依存関係の扱い
- Google Cloud へデプロイする際は、OIDC 関連の設定の変更
- AWS へデプロイする際は、OIDC 関連の設定の変更
- その他、GitLab CI にはあるが、GitHub Actions にはない設定の移行や廃止
- 実際に lint, test, deploy が動くかの確認
これを、各リポジトリごとに設定しなければなりません。LLM によってだいぶ楽はできますが、これを毎回プロンプトを考えるのでは大変です。
そこで今回、今後のことも考え、このような 社内のナレッジを Claude Code のプライベート Marketplace として整備 することにしました。
Claude Code の Plugin と Marketplace とは
Claude Code には、機能を拡張するための Plugin という仕組みがあります。Plugin は以下のようなコンポーネントを含むことができます:
| コンポーネント | 説明 |
|---|---|
| Agent Skills | Claude の能力を拡張するナレッジモジュール。タスクに応じて自動適用される |
| Slach Commands | /command で呼び出せるカスタムコマンド |
| Sub Agent | 特定のタスクを処理する専用エージェント |
| Hooks | イベントに応じて実行されるスクリプト |
| MCP | .mcp.json による MCP の設定 |
そしてこれらの Plugin を配布・管理するための仕組みとして、Plugin Marketplace というものがあります。Marketplace といっても、アプリのStore のように中央集権的・事前審査制のものではなく、分散型の Marketplace なので、誰でも作ることができます。AnthropicもGitHub上に Marketplace を公開しています。
Anthropic の例のように GitHub の公開リポジトリを Marketplace にするだけでなく、プライベートリポジトリでも Marketplace を作成できる ので、社内限定配布も簡単です。
/plugin marketplace add your-org/claude-plugins
このコマンドで、GitHub のプライベートリポジトリを Marketplace として追加できます。
参考:
今回作った構成
社内の Marketplace は、以下のような構成にしました:
jxpress-claude-code-marketplace/
├── .claude-plugin/
│ └── marketplace.json # マーケットプレイス定義
└── plugins/
├── common/ # 全チーム共通プラグイン
│ ├── .claude-plugin/
│ │ └── plugin.json
│ └── skills/
│ └── gitlab-to-github-actions/
│ ├── SKILL.md
│ └── references/
├── fastalert/ # FASTALERT チーム専用
│ └── skills/
├── team-a/ # チームA専用
│ └── skills/
└── team-b/ # チームB専用
└── skills/
今後も同様の構成とするかはわかりませんが、現在は全社共通プラグイン+チームごとプラグインという形でリポジトリ(Marketplace)を構成しています。
マーケットプレイスの定義はシンプルな JSON ファイルです:
{ "name": "jxpress-claude-code-marketplace", "owner": { "name": "JX Press Corporation", "email": "(略)" }, "plugins": [ { "name": "jxpress-common", "source": "./plugins/common", "description": "JXPress 全チーム共通のスキル・ツール集" }, { "name": "jxpress-fastalert", "source": "./plugins/fastalert", "description": "FASTALERT チーム専用のスキル・ツール集" }, { "name": "jxpress-team-a", "source": "./plugins/team-a", "description": "ほかチーム専用のスキル・ツール集" }, ... ] }
Agent Skill の整備
Plugin は Commands や Agents など複数のコンポーネントに対応していますが、今回は Agent Skill で整備しました。今回の用途(GitLab CI を GitHub Actions に移行したい)であれば、コマンドでもよかったと思います。
今回の Skill を用意したことで、例えば「GitLab CI を GitHub Actions に移行して」と依頼すると、Claude が自動的に gitlab-to-github-actions スキルを参照し、社内で決めたベストプラクティスに沿った形でワークフローを生成してくれます。OIDC の設定、プライベートリポジトリの依存関係、ブランチングルールなど、毎回説明していた内容が、社内ルールやリポジトリの設定に則って自動的に反映されるわけです。
実際に作ったスキルの一部を紹介します:
--- name: gitlab-to-github-actions description: GitLab CI を GitHub Actions に移行する。.gitlab-ci.yml を読み取り、GitHub Actions のワークフローファイルを生成する。CI/CD移行、GitHub Actions設定、ワークフロー作成時に使用。 --- # GitLab CI → GitHub Actions 移行 ## 移行手順 1. `.gitlab-ci.yml` を読み取る 2. リポジトリ構造を確認(Dockerfile、docker-compose、pyproject.toml など) 3. ワークフローファイルを生成(test.yml と deploy.yml を分離) 4. 必要に応じて environment を作成 5. GitLab 依存を GitHub に置換 6. `.gitlab-ci.yml` や `.gitlab/ci` を削除する 7. PR作成と動作検証(オプション、ユーザーに確認してから実施) (略) ## 詳細設定 - **OIDC 設定(AWS/GCP)**: [references/oidc.md](references/oidc.md) - **プライベートリポジトリ依存**: [references/private-repos.md](references/private-repos.md)
スキル自体は、Anthropicの「skill-creator」のスキル を使って簡易的にスキルを作成しました。より良いスキルを作りたい場合は、Anthropic謹製のスキル作成のベストプラクティス もあるので、こちらを参考にして改善すると良いと思います。
上記の SKILL.md には、2つテクニックがあるので紹介します。
すべてを SKILL.md に書かない
oidc の設定やプライベートリポジトリへの依存などは、すべてのリポジトリの移行に必要なわけではありません。そのような「特定の条件のときだけ必要なもの」は、SKILL.md に参照だけ書いておき、ドキュメントを分割しています。すると、必要なときだけ Claude Code が読み取るので、トークン数の節約につながります。
Claude Code 自身に検証させる
CI の設定が実際に正しい(動くものになっている)のか、人間が確認→修正していては時間の無駄です。「実際に Pull Request を作って CI を発火させる」「実際に開発環境にデプロイする」といった手順を Claude Code に実行させることで、問題があれば Claude Code が GitHub Actions の YAML などを自動的に直してくれます。
このように、成果物の正しさを Claude Code 自身に検証させると、品質の高いアウトプットをしてくれます。
セットアップ
利用者側のセットアップも簡単です:
# マーケットプレイスを追加 /plugin marketplace add org-name/marketplace-repository-name # プラグインをインストール /plugin install plugin-name@marketplace-repository-name
さらに、各プロジェクトの .claude/settings.json に設定を追加しておけば、チームメンバーがリポジトリを開いた際に自動的にプラグインを有効化することもできます。
{ "extraKnownMarketplaces": { "jxpress-claude-code-marketplace": { "source": { "source": "github", "repo": "jxpress/claude-code-marketplace" } } }, "enabledPlugins": { "jxpress-common@jxpress-claude-code-marketplace": true } }
他コーディングエージェントへの展開
JX通信社では、Claude Code だけでなく、Cursor、GitHub Copilot など、各メンバーが好きなコーディングエージェントを使っています。
今回紹介したようなスキル(Agent Skill) はopen standardとして標準化されており、一部のコーディングエージェントの対応が進んでいます。12月20日現在、VSCodeや、Codex、Cursor(Nightly)などでも利用できます。ちなみにGeminiは非対応ですが、GitHub Issueでは「検討する」 という趣旨のコメントが書かれていました。
Agent Skill が標準化された一方で、今回の Plugin Marketplace の仕組みは Claude Code のための仕組みです。Cursor でも Claude Plugin への対応を目指しているような表示がUIにはありましたが、私の環境では、今回社内配布した Plugin のスキルを取り込むことはできませんでした。
手間になってしまいますが、12月20時点では(シンボリックリンクではなく)複製する必要がありました。
cp -r ~/.claude/plugins/marketplaces/{marketplace}/path/to/skill/dir ~/.codex/skills/path/to/skill/dir
このあたりのポータビリティは引き続き課題です。SkillPortのように、サードパーティなOSSで解決しようという動きもあるみたいです。
まとめ
社内のベストプラクティスやナレッジを Claude Code の Marketplace として整備することで、以下のようなメリットがありました。
- 複雑な作業に対して、毎回のプロンプト入力が不要になった
- ナレッジを一元管理する方法を社内標準化できた
今回の例は「GitLab CI → GitHub Actions への移行」というちょっとニッチな例ですが、「GitHub Actions の整備」というスキルや「社内共通のブランチルール」のようなスキルでも、十分有用なのではないかと思います。また、本稿では触れませんでしたが「社内エンジニアブログのレビュー」のようなスキルも早速追加し、この記事をセルフレビューしています。
プライベートリポジトリで簡単に Marketplace を作れるので、ナレッジの社内配布、ぜひ試してみてください。