> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# プラグイン

> リポジトリ、git URL、またはローカルフォルダーからスキルのバンドルをインストールして共有します。

<Note>
  プラグインは**ベータ版**です。動作や設定は今後のリリースで変更される場合があります。
</Note>

**プラグイン**は、[スキル](/ja/cli/extensibility/skills/overview)をまとめたバンドルで、GitHub リポジトリ、git URL、またはローカルフォルダーからインストールし、複数のプロジェクトで再利用できます。プラグインをインストールすると、そのスキルを `/<plugin>:<skill>` スラッシュコマンドとして利用でき、依存する他のプラグインも自動的に取り込まれます。

プラグインとは、次の内容を含むソースのことです:

```
my-plugin/
├── .devin-plugin/
│   └── plugin.json     # プラグインマニフェスト
└── skills/
    └── review/
        └── SKILL.md    # 通常のスキル
```

`skills/` ディレクトリには通常のスキルが格納されます。プラグインによって新しいスキルの
形式が追加されることはありません。`SKILL.md` の形式については、[Creating Skills](/ja/cli/extensibility/skills/creating-skills) を参照してください。

***

<div id="installing-a-plugin">
  ## プラグインのインストール
</div>

プラグインのソースには、GitHub の `owner/repo`、git URL、またはローカルパスを指定できます。

```bash theme={null}
# GitHubから
devin plugins install acme/review-tools

# 任意のgitホストから
devin plugins install https://gitlab.com/acme/review-tools.git

# ローカルフォルダから（作成時に便利）
devin plugins install ./my-plugin
```

インストール前に、Devin はそのプラグインで追加される内容 (提供される
スキル、自動的にインストールされる必要なプラグイン、追加されるポリシー
(たとえば、他のプラグインを禁止するポリシーなど) ) を表示します。確認
プロンプトをスキップするには、`-y` / `--yes` を指定します。

プラグインは **ユーザー** レベルでインストールされ、すべての
プロジェクトで利用できます。

***

<div id="managing-plugins">
  ## プラグインの管理
</div>

```bash theme={null}
# インストール済みプラグイン、そのバージョン、およびポリシーによってブロックされているものを一覧表示する
devin plugins list

# プラグインのスキルと、必須/任意/禁止リストを表示する
devin plugins info review-tools

# プラグイン（またはすべてのプラグイン）を最新バージョンで再取得する
devin plugins update review-tools
devin plugins update

# プラグインを削除する（自動インストールされた必須プラグインはそのまま残る）
devin plugins remove review-tools
```

ローカルプラグインはソースフォルダに直接リンクされているため、編集内容はすぐに反映されます:
`devin plugins install ./my-plugin` → `skills/<name>/SKILL.md` を編集 → 変更内容は
次のセッションで反映されるため、`update` は不要です。

***

<div id="the-manifest">
  ## マニフェスト
</div>

`.devin-plugin/plugin.json` はプラグインを定義します。必須なのは `name` のみで、
インストール済みプラグイン内で一意である必要があります (`/<name>:…` 名前空間になります) 。

```jsonc theme={null}
{
  "name": "review-tools",
  "version": "1.0.0",
  "description": "Code-review skills for our team",
  "requiredPlugins": [
    "acme/secure-base",
    { "source": "github", "repo": "acme/audit-logging" }
  ],
  "optionalPlugins": [
    "acme/deploy-tools",
    { "source": "url", "url": "https://gitlab.com/acme/extra.git" }
  ],
  "forbiddenPlugins": ["sketchy-org/bad-plugin", "acme/*", "*"]
}
```

サポートされるメタデータ フィールドは、`name`、`version`、`description`、`author`
(`{ name, email }`) 、`homepage`、`repository`、`license`、`keywords` です。

依存関係のエントリは **source** で、文字列の省略記法またはオブジェクトで指定します。

* `"owner/repo"` → GitHub
* `"https://…"`, `"git@…"`, `"ssh://…"` → git URL
* `{ "source": "github", "repo": "owner/repo" }`
* `{ "source": "url", "url": "https://gitlab.com/team/plugin.git" }`

同じリポジトリを指す GitHub のすべての形式 (`owner/repo`、HTTPS URL、`.git`
URL、SSH 形式) は、同じプラグイン ID を参照します。

***

<div id="dependencies-and-governance">
  ## 依存関係とガバナンス
</div>

プラグインでは3つのリストを定義でき、これにより1つのプラグインを、他のプラグインを厳選して管理するコレクションとして機能させることができます。

<div id="requiredplugins">
  ### `requiredPlugins`
</div>

プラグインのインストール時に、自動的に (再帰的に) インストールされます。必須プラグインがポリシーによってブロックされている場合、インストール全体が失敗し、部分的にインストールされることはありません。

<div id="optionalplugins">
  ### `optionalPlugins`
</div>

このプラグインが許可するプラグインの**許可リスト**です。これらが自動的にインストールされることは**ありません**。このリストが意味を持つのは、禁止項目に対する例外としてのみです
(以下を参照) 。

<div id="forbiddenplugins">
  ### `forbiddenPlugins`
</div>

**禁止リスト**です。各エントリには、次のいずれかを指定できます。

* `owner/repo`、git URL、またはローカルパスで記述した、完全一致のプラグイン ID。
* **glob パターン** — `*` を含む任意のエントリ。`*` は `/` を含む任意の文字列にマッチします。パターンはまず正規の ID 空間に正規化されるため、`acme/*` は `https://github.com/acme/*` (`acme` のすべての GitHub リポジトリ) になり、`*/secrets` は任意の owner 配下にある `secrets` という名前のリポジトリにマッチし、`https://gitlab.com/acme/*` はそのパス配下の任意のリポジトリにマッチします。
* 単独の `"*"`。これは他のすべてのプラグインにマッチします (無効化不能な完全ロックダウン) 。

ポリシールールは次のとおりです。

* **拒否が優先されます。** インストール済みのいずれかのプラグインが、完全一致の ID、マッチする glob、または `"*"` によって禁止している場合、そのプラグインはブロックされます。
* **自身によるオーバーライド。** プラグイン自身の `requiredPlugins`、`optionalPlugins`、およびそのプラグイン自体は、その**自身の**禁止リストの対象外です。したがって、`forbiddenPlugins: ["*"]` と `optionalPlugins: [B, C]` を組み合わせると、「自分自身と B、C は許可し、それ以外はすべて禁止する」という意味になります。
* **プラグイン間での再許可は不可。** あるプラグインの許可リストによって、**別の**プラグインが禁止しているものを再度許可することはできません。`forbiddenPlugins: ["*"]` を持つインストール済みプラグインは、無効化不能な完全ロックダウンです。
* **デフォルトではオープン。** インストール済みのどのプラグインも何も禁止していない場合、ブロックされるものはありません。

ポリシーは次の 2 つの時点で適用されます。

* **インストール時** — ブロックされているプラグイン (または required plugins を満たせないプラグイン、あるいは名前がインストール済みプラグインと衝突するプラグイン) のインストールは拒否されます。
* **読み込み時** — インストール後にプラグインがブロックされるようになった場合 (たとえば、後からそのプラグインを禁止するプラグインがインストールされた場合) 、そのプラグイン自体はディスク上に残りますが、そのスキルはセッション開始時にスキップされ、どのプラグインがそれを禁止しているかを示す警告が表示されます。
