Agentive
AIエージェント活用

Claude Codeプラグイン開発 — Skills+Hooks+MCPをパッケージ化

約6分で読めます

プラグインとは何か

Claude Codeプラグインは、Skills、Hooks、MCPサーバー、サブエージェント設定を1つのインストール可能なパッケージにまとめたもの。チーム内で共有したり、コミュニティに公開して再利用できる。

プラグインのディレクトリ構造

my-plugin/
├── package.json          # メタデータ・依存関係
├── README.md             # 使い方ドキュメント
├── skills/
│   ├── SKILL_NAME.md     # スキル定義ファイル
│   └── templates/        # スキルが使うテンプレート
├── hooks/
│   ├── pre-commit.sh     # コミット前チェック
│   └── on-save.sh        # ファイル保存時の処理
├── mcp/
│   ├── server.py         # MCPサーバー実装
│   └── tools.py          # カスタムツール定義
├── agents/
│   └── reviewer.md       # サブエージェント定義
└── install.sh            # インストールスクリプト

各ディレクトリは省略可能。Skillsだけ、Hooksだけのプラグインも有効。

package.json の設定

{
  "name": "claude-plugin-code-review",
  "version": "1.0.0",
  "description": "自動コードレビュープラグイン",
  "author": "your-name",
  "license": "MIT",
  "claude-plugin": {
    "type": "skills+hooks+mcp",
    "minVersion": "1.0.0",
    "permissions": [
      "file:read",
      "file:write",
      "network:localhost"
    ],
    "skills": ["skills/*.md"],
    "hooks": {
      "pre-commit": "hooks/pre-commit.sh",
      "on-save": "hooks/on-save.sh"
    },
    "mcp": {
      "server": "mcp/server.py",
      "tools": ["code_review", "suggest_fix"]
    }
  },
  "dependencies": {
    "anthropic": "^1.0.0"
  }
}

claude-pluginフィールドがプラグインの核。permissionsで必要な権限を明示し、ユーザーがインストール時に確認できるようにする。

Skillファイルの書き方

---
name: code-review
description: コードの品質レビューを実行する
trigger: /review または「レビューして」
---

# Code Review Skill

## 手順
1. 変更されたファイルをgit diffで取得
2. 各ファイルに対して以下を確認:
   - 命名規則の一貫性
   - エラーハンドリングの有無
   - テストカバレッジ
3. 問題点をリスト化して報告
4. 自動修正可能なものは修正案を提示

## 出力形式
- PASS: 問題なし
- WARN: 軽微な問題あり(修正推奨)
- FAIL: 重大な問題あり(修正必須)

Hookの実装例

#!/bin/bash
# hooks/pre-commit.sh
# コミット前に型チェックとlintを実行

echo "[Plugin] Running pre-commit checks..."

# TypeScriptの型チェック
if command -v tsc &> /dev/null; then
  tsc --noEmit
  if [ $? -ne 0 ]; then
    echo "Type check failed. Commit aborted."
    exit 1
  fi
fi

# ESLint
if command -v eslint &> /dev/null; then
  eslint --fix $(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(ts|tsx|js|jsx)$')
fi

echo "[Plugin] All checks passed."
exit 0

MCPサーバーの実装

# mcp/server.py
from mcp import Server, Tool

app = Server("code-review-mcp")

@app.tool("code_review")
async def code_review(file_path: str, context: str = "") -> dict:
    """指定ファイルのコードレビューを実行"""
    with open(file_path, "r") as f:
        code = f.read()

    # AIによるレビュー実行
    review = await analyze_code(code, context)
    return {
        "status": review.severity,
        "issues": review.issues,
        "suggestions": review.suggestions
    }

@app.tool("suggest_fix")
async def suggest_fix(file_path: str, issue_id: str) -> dict:
    """検出された問題の修正案を生成"""
    fix = await generate_fix(file_path, issue_id)
    return {"patch": fix.diff, "explanation": fix.reason}

インストールスクリプト

#!/bin/bash
# install.sh
PLUGIN_DIR="$HOME/.claude/plugins/code-review"

mkdir -p "$PLUGIN_DIR"
cp -r skills/ "$PLUGIN_DIR/skills/"
cp -r hooks/ "$PLUGIN_DIR/hooks/"
cp -r mcp/ "$PLUGIN_DIR/mcp/"
cp package.json "$PLUGIN_DIR/"

# Hookの登録
chmod +x "$PLUGIN_DIR/hooks/"*.sh

echo "Plugin 'code-review' installed to $PLUGIN_DIR"
echo "Restart Claude Code to activate."

公開手順

  1. テスト: ローカルでインストールして動作確認
  2. ドキュメント: README.mdに使い方・設定方法を記述
  3. バージョニング: semverに従いpackage.jsonのversionを更新
  4. 公開: GitHubリポジトリとして公開し、READMEにインストールコマンドを記載
  5. 配布: git clone + ./install.sh でワンコマンドインストール

プラグイン設計のベストプラクティス

原則説明
単一責任1プラグイン1機能に絞る
権限最小化必要な権限だけ要求する
フォールバック依存ツールがない場合もエラーにしない
設定可能ハードコードせずconfig対応にする
ドキュメントスキルのtriggerと効果を明記する

関連記事

A

Agentive 編集部

AIエージェントを実際に使い倒す個人開発者。サイト制作の自動化を実践しながら、その知見を発信しています。