メインコンテンツへスキップ

実践ガイド

AI アシスト

Claude Code プラグインをゼロから作成:開発フロー、Marketplace への公開、チームコラボ設定、トラブルシューティングの完全ガイド

おさらい

前の記事では、Plugin のコア概念について学びました。Plugin は Claude Code のワークフローをパッケージ化して配布する仕組みであり、Commands、Skills、Agents、Hooks などのコンポーネントを一つにまとめて、チームでの共有やコミュニティへの配布を可能にします。本記事では実践的な視点から、作成から公開までの完全なフローを一緒に進めていきます。

最初の Plugin を作成する

ステップ 1:ディレクトリ構造を作成する

mkdir my-first-plugin
mkdir my-first-plugin/.claude-plugin
mkdir my-first-plugin/commands

ステップ 2:プラグインマニフェストを作成する

.claude-plugin/plugin.json にプラグインのメタデータを定義します:

{
  "name": "my-first-plugin",
  "description": "我的第一个 Claude Code 插件",
  "version": "1.0.0",
  "author": {
    "name": "Your Name"
  }
}

ステップ 3:スラッシュコマンドを追加する

commands/ ディレクトリに Markdown ファイルを作成します。各ファイルが一つのコマンドに対応します:

commands/hello.md:

---
description: 向用户发送友好的问候
---

# Hello 命令

请热情地问候用户,并询问今天可以帮助他们做什么。

ステップ 4:プラグインをテストする

--plugin-dir フラグを使ってローカルのプラグインを読み込んでテストします:

claude --plugin-dir ./my-first-plugin

Claude Code でコマンドを実行します:

/my-first-plugin:hello

ステップ 5:コマンド引数を追加する

コマンドはユーザーが入力した引数を受け取ることができます。hello.md を更新します:

---
description: 向指定用户发送个性化问候
---

# Hello 命令

请热情地问候名为 "$ARGUMENTS" 的用户,并询问今天可以帮助他们做什么。

如果用户没有提供名字,就使用"朋友"作为称呼。

引数付きでコマンドをテストします:

/my-first-plugin:hello 小明

サポートされる引数プレースホルダー

  • $ARGUMENTS - すべてのユーザー入力
  • $1, $2, $3 - 個別の引数

コンポーネントを追加する

Skills を追加する

skills/ ディレクトリを作成します。各 Skill は SKILL.md を含むフォルダです:

my-first-plugin/
├── skills/
│   └── code-review/
│       └── SKILL.md

skills/code-review/SKILL.md:

---
name: code-review
description: 审查代码质量、安全性和可维护性
---

当审查代码时,请检查以下方面:

1. **代码组织**:结构是否清晰
2. **错误处理**:异常是否被妥善处理
3. **安全隐患**:是否存在安全漏洞
4. **测试覆盖**:关键逻辑是否有测试

输出格式:
- 严重问题(必须修复)
- 警告(建议修复)
- 建议(可以改进)

Subagents を追加する

agents/ ディレクトリを作成します:

agents/code-reviewer.md:

---
name: code-reviewer
description: 专业的代码审查代理,用于代码质量检查
tools: Read, Grep, Glob, Bash
---

你是一位资深的代码审查专家。

当被调用时:
1. 运行 git diff 查看最近的更改
2. 分析修改的文件
3. 提供结构化的审查反馈

审查清单:
- 代码可读性和命名规范
- 错误处理和边界条件
- 安全漏洞(如注入、敏感信息泄露)
- 性能优化机会

Hooks を追加する

Hooks を使うと、特定のイベントが発生した際にスクリプトを自動実行できます。hooks/hooks.json を作成します:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PLUGIN_ROOT}/scripts/format-code.sh"
          }
        ]
      }
    ]
  }
}

重要${CLAUDE_PLUGIN_ROOT} 環境変数を使ってプラグインディレクトリ内のファイルを参照してください。こうすることで、プラグインがどこにインストールされてもパスが正しく解決されます。

対応するスクリプト scripts/format-code.sh を作成します:

#!/bin/bash
# 格式化代码
cd "$CLAUDE_PROJECT_DIR" && make format 2>/dev/null || true

実行権限を付与することを忘れないでください:

chmod +x scripts/format-code.sh

MCP サーバーを追加する

プラグインが外部システムに接続する必要がある場合は、.mcp.json を作成します:

{
  "mcpServers": {
    "plugin-database": {
      "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
      "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
      "env": {
        "DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"
      }
    }
  }
}

完全な Plugin 構造

機能がフル装備された Plugin は次のような構造になります:

my-plugin/
├── .claude-plugin/
│   └── plugin.json           # 插件清单
├── commands/
│   ├── review.md             # 代码审查命令
│   ├── deploy.md             # 部署命令
│   └── test.md               # 测试命令
├── agents/
│   ├── code-reviewer.md      # 代码审查代理
│   └── debugger.md           # 调试代理
├── skills/
│   └── code-standards/
│       └── SKILL.md          # 代码规范知识
├── hooks/
│   └── hooks.json            # 事件钩子配置
├── scripts/
│   ├── format-code.sh        # 格式化脚本
│   └── run-tests.sh          # 测试脚本
├── .mcp.json                  # MCP 配置
├── LICENSE
├── README.md
└── CHANGELOG.md

対応する plugin.json

{
  "name": "dev-toolkit",
  "version": "1.0.0",
  "description": "开发者工具箱:代码审查、测试、部署一站式解决方案",
  "author": {
    "name": "Your Team",
    "email": "team@example.com"
  },
  "homepage": "https://github.com/you/dev-toolkit",
  "repository": "https://github.com/you/dev-toolkit",
  "license": "MIT",
  "keywords": ["development", "code-review", "deployment"],
  "commands": "./commands/",
  "agents": "./agents/",
  "skills": "./skills/",
  "hooks": "./hooks/hooks.json",
  "mcpServers": "./.mcp.json"
}

Marketplace に公開する

Marketplace とは

Marketplace は Plugin の配布センターです。「プラグインストア」と考えるとわかりやすいでしょう。ユーザーはシンプルなコマンドひとつで、あなたが公開したプラグインをインストールできます。

Marketplace 設定を作成する

GitHub リポジトリ内に .claude-plugin/marketplace.json を作成します:

{
  "name": "my-marketplace",
  "owner": {
    "name": "Your Name",
    "email": "you@example.com"
  },
  "plugins": [
    {
      "name": "dev-toolkit",
      "source": "./plugins/dev-toolkit",
      "description": "开发者工具箱",
      "version": "1.0.0"
    },
    {
      "name": "doc-generator",
      "source": {
        "source": "github",
        "repo": "you/doc-generator-plugin"
      },
      "description": "文档生成工具"
    }
  ]
}

プラグインのソースタイプ

Marketplace は複数のソースタイプをサポートしています:

相対パス(同一リポジトリ内のプラグイン):

{
  "name": "my-plugin",
  "source": "./plugins/my-plugin"
}

GitHub リポジトリ

{
  "name": "github-plugin",
  "source": {
    "source": "github",
    "repo": "owner/plugin-repo"
  }
}

任意の Git リポジトリ

{
  "name": "git-plugin",
  "source": {
    "source": "url",
    "url": "https://gitlab.com/team/plugin.git"
  }
}

公開フロー

  1. GitHub リポジトリを作成する

  2. コードをプッシュする

    git init
    git add .
    git commit -m "Initial release"
    git push origin main
  3. ユーザーがあなたの Marketplace を追加する

    /plugin marketplace add your-username/your-repo
  4. ユーザーがプラグインをインストールする

    /plugin install dev-toolkit@your-marketplace

Plugin のインストールと管理

インタラクティブメニューから

/plugin

これにより、プラグインの閲覧、インストール、有効化、無効化ができるインタラクティブなインターフェースが開きます。

コマンドラインから

Marketplace を追加する

/plugin marketplace add owner/repo           # GitHub
/plugin marketplace add https://example.com/marketplace.json  # URL
/plugin marketplace add ./local-marketplace  # 本地

プラグインをインストールする

# 安装到用户范围(默认)
/plugin install formatter@my-marketplace

# 安装到项目范围(团队共享)
/plugin install formatter@my-marketplace --scope project

# 安装到本地范围(gitignored)
/plugin install formatter@my-marketplace --scope local

その他の管理コマンド

/plugin enable <plugin>      # 启用插件
/plugin disable <plugin>     # 禁用插件
/plugin uninstall <plugin>   # 卸载插件
/plugin update <plugin>      # 更新插件

プラグインの検証

公開前にプラグイン設定が正しいか検証します:

claude plugin validate .

または Claude Code 内で:

/plugin validate .

チームコラボレーション設定

プロジェクト内でプラグイン設定を共有する

プラグイン設定をバージョン管理にコミットすることで、チームメンバーが自動的に利用できるようになります:

.claude/settings.json:

{
  "extraKnownMarketplaces": {
    "company-tools": {
      "source": {
        "source": "github",
        "repo": "your-org/claude-plugins"
      }
    }
  },
  "enabledPlugins": {
    "code-formatter@company-tools": true,
    "deployment-tools@company-tools": true
  }
}

チームメンバーがプロジェクトをクローンすると、これらのプラグインが自動的に利用可能になります。

エンタープライズ向け Marketplace 制限

厳格な管理が必要なエンタープライズ環境では、マネージド設定で許可する Marketplace を制限できます:

{
  "strictKnownMarketplaces": [
    {
      "source": "github",
      "repo": "company/approved-plugins"
    }
  ]
}

空の配列 [] に設定すると、外部プラグインを完全に無効化できます。

CLI コマンドリファレンス

コマンド説明
/pluginインタラクティブ管理画面を開く
/plugin install <name>@<marketplace>プラグインをインストール
/plugin uninstall <name>プラグインをアンインストール
/plugin enable <name>プラグインを有効化
/plugin disable <name>プラグインを無効化
/plugin update <name>プラグインを更新
/plugin validate .現在のディレクトリのプラグイン設定を検証
/plugin marketplace add <source>Marketplace を追加
/plugin marketplace list追加済みの Marketplace を一覧表示
/plugin marketplace updateMarketplace キャッシュを更新
/plugin marketplace remove <name>Marketplace を削除

ベストプラクティス

開発のベストプラクティス

  1. Skills は一つのことに集中させる:各 Skill は一つのことをしっかり行い、あれもこれもと詰め込まないようにしましょう
  2. 明確な説明を書く:Claude がコンポーネントをいつ使うべきか理解できるようにしましょう
  3. まずチーム内でテストする:コミュニティに配布する前に、チーム内で検証しましょう
  4. バージョン変更を記録する:CHANGELOG.md に各バージョンの変更内容を記録しましょう

ディレクトリ構造のベストプラクティス

  • commands/agents/skills/ はプラグインのルートディレクトリに配置します
  • .claude-plugin/ ディレクトリには plugin.json のみを配置します
  • プラグイン内のファイルを参照するには ${CLAUDE_PLUGIN_ROOT} を使用します
  • ../ を使ってプラグイン外のファイルにアクセスしないでください

Hooks のベストプラクティス

  1. スクリプトは実行可能にする:chmod +x script.sh
  2. shebang でインタープリターを宣言する:#!/bin/bash
  3. ${CLAUDE_PLUGIN_ROOT} 変数を使ってパスの正確性を確保する
  4. Hook に統合する前にスクリプトを単独でテストする

バージョン管理のベストプラクティス

Semantic Versioning に従います:

  • MAJOR (1.0.0 → 2.0.0):破壊的変更
  • MINOR (1.0.0 → 1.1.0):新機能の追加(後方互換あり)
  • PATCH (1.0.0 → 1.0.1):バグ修正(後方互換あり)

よくある問題のトラブルシューティング

問題考えられる原因解決策
プラグインが読み込まれないplugin.json のフォーマットエラーclaude plugin validate で検証する
コマンドが表示されないディレクトリ構造の誤りcommands/ がルートディレクトリにあり、.claude-plugin/ 内にないことを確認する
Hooks が発火しないスクリプトに実行権限がないchmod +x script.sh を実行する
パスが見つからない相対パスを使用している${CLAUDE_PLUGIN_ROOT} に変更する
MCP サーバーが失敗する環境変数が未設定.mcp.json 内のパス設定を確認する

既存設定からの移行

すでに .claude/ ディレクトリに設定がある場合は、以下の手順で Plugin に移行できます:

  1. Plugin 構造を作成する

    mkdir my-plugin/.claude-plugin
  2. plugin.json を作成する

    {
      "name": "my-plugin",
      "description": "从现有配置迁移的插件",
      "version": "1.0.0"
    }
  3. 既存ファイルをコピーする

    cp -r .claude/commands my-plugin/
    cp -r .claude/agents my-plugin/
    cp -r .claude/skills my-plugin/
  4. Hooks を移行する.claude/settings.json から hooks 設定を hooks/hooks.json にコピーします

  5. テストする

    claude --plugin-dir ./my-plugin

学習リソース

公式ドキュメント

リソースリンク説明
Plugins Referencecode.claude.com/docsプラグインリファレンスドキュメント
Create Pluginscode.claude.com/docsプラグイン作成ガイド
Best PracticesAnthropic Engineering公式ベストプラクティス
Agent Skills 標準agentskills.ioオープンスタンダード仕様

公式リポジトリ

リソースリンク説明
anthropics/skillsGitHub公式 Skills リポジトリ
anthropics/claude-plugins-officialGitHub公式プラグインカタログ
Docker MCP Toolkit公式サイト200 以上のプリビルト MCP

コミュニティリソース

リソースリンク説明
claude-plugins.dev公式サイトコミュニティレジストリと CLI
awesome-claude-pluginsGitHub243 個のプラグインコレクション
awesome-claude-codeGitHubベストプラクティスまとめ
wshobson/agentsGitHub99 エージェント + 15 オーケストレーター
jeremylongshore チュートリアルGitHub数百のプラグイン + Jupyter チュートリアル

おすすめの記事

今後の展望

Plugin の仕組みにより、Claude Code の拡張能力は飛躍的に向上しました。コミュニティの発展に伴い、今後は以下のような進化が期待されます:

  • より豊かなプラグインエコシステム:さまざまな開発シナリオやワークフローをカバー
  • エンタープライズ向け機能:より充実した権限管理と監査機能
  • クロスプラットフォーム互換性:Skills のオープンスタンダードはすでに複数のベンダーに採用されています

今こそ参入する絶好のタイミングです。シンプルなコマンドから始めて、徐々に Skills や Hooks を追加し、最終的に完全なワークフローソリューションを構築していきましょう。

Plugin に含めることができる Subagent コンポーネントについて詳しく知りたい場合は、《Claude Code Subagent とは》をご覧ください。

コメント

目次

実践ガイド | Yuのサイバーデスク