> ## Documentation Index
> Fetch the complete documentation index at: https://factory-docs-cli-sandbox-mcp-whole-process.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# プラグインの構築

> Droid向けにスキル、コマンド、ツールを含む共有可能なプラグインを作成する。

このガイドでは、Droidのプラグイン作成方法を説明します。プラグインは、スキル、コマンド、ツールを共有可能なパッケージにまとめ、プロジェクトやチーム間で利用できるものです。

## クイックスタート

<Steps>
  <Step title="プラグインディレクトリを作成">
    ```bash theme={null}
    mkdir -p my-plugin/.factory-plugin
    ```
  </Step>

  <Step title="マニフェストを作成">
    `my-plugin/.factory-plugin/plugin.json`を作成します:

    ```json theme={null}
    {
      "name": "my-plugin",
      "description": "A helpful plugin description",
      "version": "1.0.0"
    }
    ```
  </Step>

  <Step title="コマンドを追加">
    `my-plugin/commands/hello.md`を作成します:

    ```markdown theme={null}
    ---
    description: Greet the user with a friendly message
    ---

    Greet the user warmly and ask how you can help them today.
    ```
  </Step>

  <Step title="プラグインをテスト">
    テストのためローカルディレクトリからインストールします:

    ```bash theme={null}
    droid plugin marketplace add ./my-plugin
    droid plugin install my-plugin@my-plugin
    ```

    次に`/hello`を実行してテストします。
  </Step>
</Steps>

## プラグインマニフェスト

`.factory-plugin/plugin.json`にあるマニフェストファイルは、プラグインのメタデータを定義します：

```json theme={null}
{
  "name": "my-plugin",
  "description": "What this plugin does",
  "version": "1.0.0",
  "author": {
    "name": "Your Name",
    "email": "you@example.com"
  },
  "homepage": "https://github.com/you/my-plugin",
  "repository": "https://github.com/you/my-plugin",
  "license": "MIT"
}
```

### 必須フィールド

| フィールド         | 説明                       |
| ------------- | ------------------------ |
| `name`        | 一意の識別子。小文字、数字、ハイフンを使用。   |
| `description` | プラグインマネージャーに表示される短い説明。   |
| `version`     | セマンティックバージョン（例：`1.0.0`）。 |

### オプションフィールド

| フィールド        | 説明                              |
| ------------ | ------------------------------- |
| `author`     | `name`と任意の`email`を含むオブジェクト。     |
| `homepage`   | プラグインドキュメントのURL。                |
| `repository` | GitリポジトリのURL。                   |
| `license`    | ライセンス識別子（例：`MIT`、`Apache-2.0`）。 |

## スキルの追加

スキルはモデルによって呼び出される機能です。`skills/`ディレクトリに作成してください：

```
my-plugin/
└── skills/
    └── code-review/
        └── SKILL.md
```

### スキル形式

```markdown theme={null}
---
name: code-review
description: ベストプラクティスと潜在的な問題についてコードをレビューする。コードレビュー、PR確認、コード品質分析で使用します。
---

コードをレビューするときは、以下を確認します:
1. コードの整理と構造
2. エラーハンドリング
3. セキュリティ上の懸念
4. テストカバレッジ

行参照付きで具体的かつ実行可能なフィードバックを提供します。
```

### スキルのフロントマター

| フィールド                      | 必須  | 説明                                   |
| -------------------------- | --- | ------------------------------------ |
| `name`                     | はい  | スキルの一意識別子                            |
| `description`              | はい  | このスキルをいつ使用するか（モデルがいつ呼び出すかを判断するのに役立つ） |
| `disable-model-invocation` | いいえ | ユーザー専用にするには`true`を設定                 |
| `allowed-tools`            | いいえ | スキルが使用できるツールを制限                      |

## コマンドの追加

コマンドはスラッシュ記法でユーザーによって呼び出されます。`commands/`ディレクトリに作成してください：

```
my-plugin/
└── commands/
    └── review-pr.md
```

### コマンド形式

```markdown theme={null}
---
description: 現在のPRに問題がないかレビューする
disable-model-invocation: true
---

# PRレビューコマンド

現在のプルリクエストをレビューします。以下を確認します:
1. コードの正確性とロジックエラー
2. テストカバレッジ
3. ドキュメント更新
4. 破壊的変更

ユーザーが引数を指定した場合: $ARGUMENTS

引数を使用してレビュー対象を特定の領域に絞ります。
```

`commands/review-pr.md`にあるコマンドは`/review-pr`になります。

### コマンド引数

ユーザー入力を取得するには`$ARGUMENTS`を使用します：

```markdown theme={null}
---
description: Greet a user by name
---

Greet the user named "$ARGUMENTS" warmly.
```

使用方法：`/greet Alice`

## エージェントの追加

`droids/`ディレクトリに特殊化されたサブエージェントを定義します：

```
my-plugin/
└── droids/
    └── security-reviewer.md
```

### エージェント形式

```markdown theme={null}
---
name: security-reviewer
description: Reviews code for security vulnerabilities
model: inherit
tools: ["Read", "Grep", "Glob"]
---

You are a security expert. Review the code for:

1. Injection vulnerabilities (SQL, command, XSS)
2. Authentication/authorization issues
3. Sensitive data exposure
4. Insecure cryptography
5. Security misconfigurations

Report findings with severity levels and remediation steps.
```

完全なエージェント設定オプションについては[Custom Droids](/jp/cli/configuration/custom-droids)を参照してください。

## フックの追加

`hooks/hooks.json`でライフサイクルフックを定義します：

```
my-plugin/
└── hooks/
    ├── hooks.json
    └── format-check.sh
```

### フック設定

```json theme={null}
{
  "PostToolUse": [
    {
      "matcher": "Create|Edit|ApplyPatch",
      "hooks": [
        {
          "type": "command",
          "command": "${DROID_PLUGIN_ROOT}/hooks/format-check.sh",
          "timeout": 30
        }
      ]
    }
  ]
}
```

### 環境変数

| 変数                      | 説明                                           |
| ----------------------- | -------------------------------------------- |
| `${DROID_PLUGIN_ROOT}`  | プラグインディレクトリへの絶対パス                            |
| `${CLAUDE_PLUGIN_ROOT}` | `${DROID_PLUGIN_ROOT}`のエイリアス（Claude Code互換性） |

<Note>
  プラグインフックは`/hooks import`ではインポートできません。プラグインのルートパスを解決できるインストール済みプラグイン内でのみ機能します。
</Note>

## MCPサーバーの追加

プラグインルートの`mcp.json`でMCPサーバーを設定します：

```json theme={null}
{
  "mcpServers": {
    "my-api": {
      "command": "npx",
      "args": ["-y", "@example/mcp-server"],
      "env": {
        "API_KEY": "${MY_API_KEY}"
      }
    }
  }
}
```

## プラグインのテスト

### ローカルテスト

開発中のテストには、ローカルディレクトリからインストールします：

```bash theme={null}
droid plugin marketplace add ./my-plugin
droid plugin install my-plugin@my-plugin
```

### 検証チェックリスト

プラグインを共有する前に：

* [ ] マニフェストに必須フィールドがある（`name`、`description`、`version`）
* [ ] すべてのスキルのフロントマターに`name`と`description`がある
* [ ] コマンドが引数ありでもなしでも動作する
* [ ] ハードコードされたパスや機械固有の設定がない
* [ ] READMEですべてのコマンドと機能が文書化されている

## プラグインの配布

### マーケットプレースの作成

マーケットプレースは、利用可能なプラグインをリストするマニフェストを含むGitリポジトリです：

```
my-marketplace/
├── .factory-plugin/
│   └── marketplace.json
├── plugin-one/
│   └── .factory-plugin/
│       └── plugin.json
└── plugin-two/
    └── .factory-plugin/
        └── plugin.json
```

### マーケットプレースマニフェスト

`.factory-plugin/marketplace.json`を作成します：

```json theme={null}
{
  "name": "my-marketplace",
  "description": "A collection of useful plugins",
  "owner": {
    "name": "Your Name"
  },
  "plugins": [
    {
      "name": "plugin-one",
      "description": "Description of plugin one",
      "source": "./plugin-one"
    },
    {
      "name": "plugin-two",
      "description": "Description of plugin two",
      "source": "./plugin-two"
    }
  ]
}
```

| フィールド                   | 必須  | 説明                |
| ----------------------- | --- | ----------------- |
| `name`                  | はい  | マーケットプレース識別子      |
| `description`           | いいえ | マーケットプレースを閲覧時に表示  |
| `owner`                 | いいえ | 連絡先情報             |
| `plugins[].name`        | はい  | プラグイン識別子          |
| `plugins[].source`      | はい  | プラグインディレクトリへの相対パス |
| `plugins[].description` | いいえ | プラグインブラウザに表示      |
| `plugins[].category`    | いいえ | プラグインを整理するため      |

### バージョン管理

ドキュメント目的でプラグインマニフェストではセマンティックバージョニングを使用します：

* **メジャー**（1.0.0 → 2.0.0）：破壊的変更
* **マイナー**（1.0.0 → 1.1.0）：新機能、後方互換性あり
* **パッチ**（1.0.0 → 1.0.1）：バグ修正

<Note>
  DroidはプラグインバージョンをセマンティックバージョンではなくGitコミットハッシュで追跡します。デフォルトでは、プラグインを更新するとマーケットプレイスから最新のコミットを取得します。プラグインを特定のバージョンに固定するには、マーケットプレイスソースに `ref`（ブランチまたはタグ）または `sha`（フルコミットSHA）を設定して、プラグインが含まれるマーケットプレイスを固定してください。詳細は[マーケットプレイスをrefまたはコミットに固定する](/jp/cli/configuration/plugins#%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%83%E3%83%88%E3%83%97%E3%83%AC%E3%82%A4%E3%82%B9%E3%82%92ref%E3%81%BE%E3%81%9F%E3%81%AF%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E3%81%AB%E5%9B%BA%E5%AE%9A%E3%81%99%E3%82%8B)を参照してください。
</Note>

## Claude Code互換性

DroidはClaude Codeプラグインと完全に互換性があります。Claude Codeプラグインを見つけた場合、直接インストールでき、Droidが自動的に形式を変換します。

## ベストプラクティス

<AccordionGroup>
  <Accordion title="プラグインの焦点を絞る">
    プラグインは単一の目的またはワークフローを中心に設計します。すべてを行う巨大なプラグインより、複数の小さなプラグインを優先してください。
  </Accordion>

  <Accordion title="徹底的に文書化する">
    READMEには以下を含めます:

    * プラグインの内容
    * インストール手順
    * 利用可能なすべてのコマンドと使い方
    * 設定オプション
    * 例
  </Accordion>

  <Accordion title="セマンティックバージョニングを使用">
    更新がワークフローを壊す可能性があるタイミングをユーザーが把握できるよう、semver規約に従います。
  </Accordion>

  <Accordion title="複数環境でテスト">
    該当する場合は、プラグインがmacOS、Linux、Windowsで動作することを確認します。移植性のあるシェルコマンドを使用し、プラットフォーム固有のパスを避けます。
  </Accordion>

  <Accordion title="エラーを適切に処理する">
    スクリプトはユーザーをブロックせず、適切に失敗するべきです。エラーはログに記録し、セッションをクラッシュさせないでください。
  </Accordion>

  <Accordion title="ユーザーのプライバシーを尊重する">
    明示的な同意なしにテレメトリを収集したりデータを送信したりしないでください。プラグインが行うネットワークリクエストは文書化してください。
  </Accordion>
</AccordionGroup>

## 例：完全なプラグイン

コードレビュープラグインの完全な例です：

```
code-review-plugin/
├── .factory-plugin/
│   └── plugin.json
├── commands/
│   └── review.md
├── skills/
│   └── review-patterns/
│       └── SKILL.md
├── droids/
│   └── reviewer.md
└── README.md
```

**`.factory-plugin/plugin.json`:**

```json theme={null}
{
  "name": "code-review",
  "description": "Automated code review with multiple specialized reviewers",
  "version": "1.0.0",
  "author": { "name": "Your Team" }
}
```

**`commands/review.md`:**

```markdown theme={null}
---
description: Run comprehensive code review on staged changes
---

Review the staged git changes using the review-patterns skill.
Focus on: $ARGUMENTS

If no focus area specified, perform a general review.
```

**`skills/review-patterns/SKILL.md`:**

```markdown theme={null}
---
name: review-patterns
description: Use when reviewing code to check for common issues and best practices.
---

以下についてコードを確認します:
- ロジックエラーとエッジケース
- エラーハンドリングの完全性
- セキュリティ脆弱性
- パフォーマンス上の懸念
- テストカバレッジの不足
```

**`droids/reviewer.md`:**

```markdown theme={null}
---
name: reviewer
description: 専門のコードレビュアーサブエージェント
model: inherit
tools: read-only
---

あなたはシニアコードレビュアーです。提供されたコードを分析して報告します:

Summary: <1行の評価>
Issues:
- <重大度> <説明>
Suggestions:
- <改善案>
```

## 次のステップ

<CardGroup cols={2}>
  <Card title="プラグイン概要" href="/jp/cli/configuration/plugins" icon="puzzle-piece">
    プラグインのインストールと管理について学びます。
  </Card>

  <Card title="スキル" href="/jp/cli/configuration/skills" icon="wand-magic-sparkles">
    強力なスキルの作成を詳しく学びます。
  </Card>

  <Card title="カスタムコマンド" href="/jp/cli/configuration/custom-slash-commands" icon="terminal">
    ユーザー起動のスラッシュコマンドを作成します。
  </Card>

  <Card title="カスタムDroid" href="/jp/cli/configuration/custom-droids" icon="robot">
    プラグイン用の専門サブエージェントを作成します。
  </Card>
</CardGroup>
