# GitHub CopilotのCLIカスタマイズ機能の比較

Copilotをカスタマイズするさまざまな方法(その機能、使用するタイミング)について確認します。

## イントロダクション

Copilot CLI (コパイロット CLI) は、ユーザーに代わって質問に答え、作業を計画し、タスクを完了できるターミナルベースの AI エージェントです。 高度な拡張性を備えて設計されており、動作をカスタマイズしてその機能を拡張するさまざまな方法があります。

この記事では、次の違いについて説明します。

* **カスタム手順**

  これらはCopilot一般的に**振る舞い方を**示します。 たとえば、Copilot が書くコードがコーディング標準に準拠していることを確認します。
  [詳細については、以下をご覧ください](#custom-instructions)。

* **スキル**

  これらは Copilot**特定の種類のタスクを処理する方法を**示します。 たとえば、特定の種類のタスクで作業するときに特定のツールを使用する場合などです。
  [詳細については、以下をご覧ください](#skills)。

* **ツール**

  これらは **能力を提供します**。 たとえば、ファイルを検索して変更したり、 GitHubの一部と対話したりします。
  [詳細については、以下をご覧ください](#tools)。

* **MCP サーバー**

  これにより、\*\*\*\* が外部サービスと対話できるCopilotされます。
  [詳細については、以下をご覧ください](#mcp-servers)。

* **フック**

  これにより、 **特定のライフサイクルの瞬間に独自のロジックを実行できます**。 たとえば、CLI セッションが開始または終了するたびに、特定のスクリプトを実行できます。
  [詳細については、以下をご覧ください](#hooks)。

* **サブエージェント**

  これらは **委任されたエージェント プロセス**であり、メイン エージェントに関連付けられ、メイン エージェント プロセスとは別に特定のタスクを実行するために使用されます。 独自のコンテキスト ウィンドウがあり、メイン エージェントのコンテキストに影響を与えずに設定できます。
  [詳細については、以下をご覧ください](#subagents)。

* **カスタム エージェント**

  これらは、特定のタスクを実行するように設計 **された特殊な能力の定義**です。 メイン CLI エージェントは、カスタム エージェント プロファイルを使用してサブエージェントにタスクを委任し、専門知識と特定のアプローチをタスクに適用できます。 たとえば、カスタム エージェントは、React レビュー担当者、ドキュメント ライター、セキュリティ監査人、またはテスト ジェネレーターの役割を実行できます。
  [詳細については、以下をご覧ください](#custom-agents)。

* **プラグイン**

  これらは、スキル、フック、カスタム エージェント、MCP サーバーなどの事前構成済みのカスタマイズを提供できる **パッケージ** です。
  [詳細については、以下をご覧ください](#plugins)。

## カスタム手順

### カスタム命令とは

**カスタム命令** は、セッションの開始時に Copilot CLI (コパイロット CLI) が命令ファイルから読み込む永続的なガイダンスです。

Copilot は、 `AGENTS.md` や `.github/copilot-instructions.md`など、リポジトリ内のいくつかの既定の場所から、または `$HOME/.copilot/copilot-instructions.md`のホーム ディレクトリから命令ファイルを検索して読み込みます。

`--no-custom-instructions` フラグを使用して、これらの手順の読み込みを回避できます。

### カスタム命令はどのような問題を解決しますか?

カスタム手順は、次の場合に役立ちます。

* Copilotコーディング規則とユーザー設定に合わせて調整します。
* チームまたは組織の標準を一貫して適用します。
* すべてのプロンプトにCopilotに繰り返しリマインダーを含めることを避けてください。

### カスタム命令を使用する必要がある場合

カスタム手順を使用するには：

* スタイルと品質の規則

  例: "小規模な PR を優先し、テストを記述し、ディスカッションなしでパブリック API の変更を回避する"

* リポジトリ規則

  例: " `pnpm`を使用し、変更ログ エントリを `CHANGELOG.md`に保持し、コミットする前に `pnpm test` を実行します。"

* 通信の基本設定

  例: "トレードオフを簡単に説明し、推奨される選択肢を指定します。"

### カスタム命令を使用すべきではないのはいつですか?

次のいずれかの場合は、それらを最小限に抑える。

* 1 つのワークフローでのみ動作が必要です (代わりに **スキル** を使用します)。
* 手順は非常に大きく、具体的であるため、すぐに行うタスクから Copilot 注意が散らされます ( **スキル** または **カスタム エージェント**を優先します)。

### カスタム手順の詳細を確認する

「[カスタム指示の追加 GitHub Copilot CLI（コマンドラインインターフェース）](/ja/copilot/how-tos/copilot-cli/customize-copilot/add-custom-instructions)」を参照してください。

## スキル

### スキルとは

**スキル**は、少なくとも、特定のコンテキストでタスクを実行するために使用Copilot命令を含む Markdown ファイルです。 名前とスキルの説明を使用すると、 Copilot は特定のタスクにスキルを使用する必要があるかどうかを判断できます。 スキルを使用することを決定した場合は、指示を読み込み、それに従ってタスクを完了します。

スキルは、必要に応じて、スキル ディレクトリ内に格納されている他のファイルを参照できます。 これには、スキルの使用時 Copilot 実行できるスクリプトを含めることができます。

### スキルはどのような問題を解決しますか?

スキルは次の場合に役立ちます。

* Copilotが特定のコンテキストでタスクを実行する方法を標準化します (コード レビューを実行する場合など)。
* Copilotの動作を永続的に変更することなく、"Just-In-Time" 命令を指定します。
* 現在のタスクに関係のない命令で Copilotのコンテキスト ウィンドウをオーバーロードしないようにします。

### スキルにアクセスする方法

スラッシュ コマンドを使用して、スキルを手動で呼び出すことができます。 たとえば、「 `/Markdown-Checker check README.md` 」のように入力します。
`/skills list`を使用して、使用可能なスキルを一覧表示します。

Copilot CLI (コパイロット CLI) は、現在のタスクに関連するスキルを検出すると、自動的にスキルを呼び出します。

### スキルを使用する必要がある場合

必要な場合は、スキルを使用します。

* タスクの種類に対して使用できる反復可能な命令または機能のセット。

  例: フロントエンド コードが変更されたときにユーザー向けのドキュメントが更新されることを確認するドキュメント スキル。

* 一貫性のある出力形式。

  例: Copilot テンプレートを使用してリリース ノートを作成することを保証する "リリース ノート ドラフト" スキル。

* 必要なワークフローですが、必ずしも必要なわけではありません。

  例: 移行中にのみ有効にする "ディープ リファクター" スキル。

### スキルを使用すべきではないのはいつですか?

以下の状況ではスキルを避けてください。

* ガイダンスは、実行 **するすべての内容に適用する** 必要があります (代わりに **カスタム命令** を使用してください)。
* 新しい機能が必要です (ツールを追加するには **MCP サーバー** が必要な場合や、特殊化用の **カスタム エージェント** が必要な場合があります)。

### エージェントのスキルの詳細を確認する

「[エージェントのスキルについて](/ja/copilot/concepts/agents/about-agent-skills)」を参照してください。

## ツール

### ツールとは

**ツール**は、Copilotファイルの検索、ファイルの内容の表示、編集、タスクの実行、スキルの呼び出しなど、何かを行うために使用する機能です。 一部のツールは組み込まれており、他のツールは MCP サーバーを介して追加できます。

### ツールはどのような問題を解決しますか?

ツールを使用すると、CLI で次の機能を使用できます。

* (読み取り/検索ツールを使用して) 正確なコンテキストを収集します。
* (編集ツールを使用して) 安全に変更を加えます。
* コマンドを実行し、結果を検証します (サブエージェントを使用している可能性があります)。

### ツールを使用する必要がある場合

通常、ツールは直接呼び出しません。Copilot 必要に応じてツールを使用することを決定します。 特定のタスク、現在のセッション、またはすべての Copilot CLI (コパイロット CLI) セッションに対して、ツールの使用を許可または拒否できます。

ツールを使用する Copilot は、次の場合に表示されます:

* リポジトリの検索、ファイルの更新、テストの実行を Copilot に依頼します。
* `skill` ツールをトリガーするスキルを呼び出します。
* MCP サーバーによって提供されるツールを使用する必要があるタスクを実行するように Copilot に依頼します。
* タスク Copilot 複雑なタスクを完了し、サブエージェントに委任することを決定します。これによって、 `task` ツールがトリガーされます。

### ツールの許可または拒否の詳細を確認する

「[GITHUB COPILOT CLI について](/ja/copilot/concepts/agents/copilot-cli/about-copilot-cli#allowed-tools)」を参照してください。

## MCP サーバー

### MCP サーバーとは

**MCP サーバー**は、Copilot CLI (コパイロット CLI)などの AI アプリケーションが外部データ ソースやツールに接続できるようにするサービスです。

Copilot CLI (コパイロット CLI)に MCP サーバーを追加すると、その MCP サーバーによって提供されるツールを使用できるため、追加の機能が提供されます。 たとえば、オンラインカレンダーアプリケーションやサポートチケットシステムを操作するためのツールを提供するMCPサーバーを追加できます。

### MCP サーバーはどのような問題を解決しますか?

MCP サーバーは、組み込みのツールが十分でない場合に役立ちます。 次のことができます。

* Copilot CLI (コパイロット CLI)を外部システムに接続します。
* 専用のツール (API、データベース、イメージ生成を操作する場合など) を追加します。
* リポジトリ以外のリソースの安全なアクセス パターンを標準化します。

### MCP サーバーを使用する必要がある場合

必要な場合は、MCP サーバーを使用します。

* 外部データまたはシステムとの統合。

  例: `How many support tickets have been opened this month for Product X?`

* CLI がユーザーに代わって実行するドメイン固有のアクション。

  例: `Message the bug-watch channel: Only 2 support tickets raised this month for Product X.`

### MCP サーバーを使用すべきではないのはいつですか?

次の場合は、MCP サーバーを追加しないでください。

* 組み込みのツールは既にニーズに対応しています。

### MCP サーバーの詳細を確認する

「[モデル コンテキスト プロトコル (MCP) について](/ja/copilot/concepts/context/mcp)」を参照してください。

## フック

### フックとは何ですか？

**フックを** 使用すると、セッション ライフサイクルの特定の時点で、 Copilot CLI (コパイロット CLI) 定義したシェル コマンドを実行するように指定できます。

| フック                           | その後、                     |
| ----------------------------- | ------------------------ |
| `preToolUse` / `postToolUse`  | ツールの実行前/実行後。             |
| `userPromptSubmitted`         | ユーザーがプロンプトを送信したとき。       |
| `sessionStart` / `sessionEnd` | セッションの開始時/終了時。           |
| `errorOccurred`               | エラーが発生した場合。              |
| `agentStop`                   | メイン エージェントがエラーなしで停止したとき。 |
| `subagentStop`                | サブエージェントが終了したとき。         |

### フックはどのような問題を解決しますか?

フックは、次のような\*\*\*\* 動作に関するCopilot CLI (コパイロット CLI)が必要な場合に役立ちます。

* **ガードレールを適用する** — 特定のツールを実行する前にブロックまたは警告します。
* **ログ/テレメトリの追加**
* **回復可能なエラーに対する再試行/中止動作のカスタマイズ**
* たとえば、保護されたパスへの編集を防ぐための **"ポリシー" チェックを追加**します。
* 結果が親エージェントに戻る前に、**サブエージェントが終了した瞬間をインターセプト**します。

フックは、スキルやカスタム命令が提供できるよりも多くの制御が必要な場合に便利です。 スキルと命令はプロンプトを使用して Copilotの動作をガイドしますが、フックを使用すると、定義した操作が特定の時点で実行されます。たとえば、ツールの実行をブロックしたり、セッションが終了したときにアクティビティをログに記録したりします。

### フックを使用するのはどのような場合でしょうか?

必要な場合はフックを使用します。

* **ツール ガードレール**

  * 例: `bash` 実行する前に、特定のコマンドが許可リストと一致することを要求します。
  * 例: `edit` 実行する前に、チケット ID が存在しない限り、 `infra/` の変更をブロックします。

* **セッション ライフサイクルの自動化**

  * 例: エージェントが停止したら、セッションのトランスクリプトをストレージの場所にアーカイブします。

* **エラー処理ポリシー**

  * 例: レート制限エラーの場合は、制限された再試行回数で自動的に "再試行" を選択します。

* **サブエージェント ワークフロー コントロール**

  * 例: サブエージェントが完了したら、メイン エージェントに結果を渡す前に、その出力を検証します。

### フックを使用すべきではないのはいつですか?

次の場合はフックを使用しないでください。

* 一貫したプロンプトまたはワークフローの指示が必要です ( **スキル**を使用します)。
* 永続的な基本設定と標準が必要です ( **カスタム命令**を使用します)。
* 新しい外部機能が必要です ( **MCP サーバー** とツールを使用します)。
* すべてのセッションに影響を与える可能性のある構成を維持すると、問題が発生する可能性があります。

### フックについて詳しく知る

See:

* [GitHub Copilot CLI（コマンドラインインターフェース） でフックを使用する](/ja/copilot/how-tos/copilot-cli/customize-copilot/use-hooks)
* [GitHub Copilotフックリファレンス](/ja/copilot/reference/hooks-reference)

## サブエージェント

### サブエージェントとは

**サブエージェント**とは、Copilot CLI (コパイロット CLI) セッションのメイン エージェントがスピンアップして特定の作業を実行する個別の AI エージェントの実行です。

Copilot CLI (コパイロット CLI) は、メイン エージェントが、作業のチャンクを別のエージェントに委任することが、ユーザーの要求を完了する最善の方法であると判断した場合に、サブエージェントを使用します。

### サブエージェントはどのような問題を解決しますか?

サブエージェントはCopilotを支援します。

* 作業のチャンクを別のエージェントにオフロードすることで、CLI セッションでメイン エージェントのコンテキスト ウィンドウをフォーカスしたままにします。
* バックグラウンドで特定のタスクを実行して、必要に応じて作業を並列化します。
* メイン エージェントとは別にカスタム エージェントを実行し、メイン エージェントによって実行される作業とは異なるアプローチで専門家の作業を実行します。

### サブエージェントはいつ使用されますか?

Copilot は、次の場合にサブエージェントを使用する可能性があります。

* コードベースの探索

  たとえば、API 内のすべてのエンドポイントを一覧表示します。

* 複雑なタスクのコマンド実行

  たとえば、テスト スイートを実行したり、大規模なプロジェクトをビルドして結果を分析したりします。

* 変更の確認

  たとえば、段階的な変更を確認し、潜在的なセキュリティの問題を特定します。

* 複雑なマルチステップ作業

  たとえば、いくつかの変更を加えた機能を実装します。

* カスタム エージェントを使用する場合

  カスタム エージェントを定義していて、推論の対象である場合 (`infer` が `false`に設定されていない場合)、 Copilot は、カスタム エージェントの構成でサブエージェントをスピンアップすることによって、そのカスタム エージェントに作業を委任することを選択できます。

## カスタム エージェント

### カスタム エージェントとは

**カスタム エージェント** は、特定の主題に関する専門知識を Copilot に提供し、その領域で作業する際に使用 Copilot 特定のアプローチを定義します。 カスタム エージェントは、特定のタスクに取り組むときに Copilot 採用できる "ペルソナ" と考えることができます。

Copilot CLI (コパイロット CLI) には、いくつかの組み込みのカスタム エージェントがあります。 たとえば、 `explore`、 `task`、 `research`、 `code-review`、 `rubber-duck`、 `general-purpose` エージェントなどです。 また、独自のカスタム エージェントを定義して、特定のニーズを満たすこともできます。

YAML frontmatter を使用して Markdown ファイルでカスタム エージェントを定義します。 ファイルには次のものが含まれます。

* エージェントの役割と専門知識の説明
* 許可されているツール (またはすべてのツール) の一覧
* オプションの MCP サーバー接続
* オプションの `infer` 設定 。有効にすると、 Copilot はエージェントの専門に一致するタスクを検出すると、このエージェントに自動的に委任されます。

### カスタム エージェントはどのような問題を解決しますか?

カスタム エージェントは、必要な場合に役立ちます。

* 特定のコンテキストで一貫して適用される専門知識。
* カスタム エージェント構成で定義されているように、作業ごとに異なるツールのアクセス許可。
* メイン エージェントのコンテキスト ウィンドウが主なタスクに集中し続けるように、カスタム エージェントの専用コンテキスト ウィンドウは、その専門的な作業を遂行するために使用されます。

### カスタム エージェントを使用する必要がある場合

必要な場合は、カスタム エージェントを使用します。

* 専門の校閲者またはヘルパー

  例: React パターンを含む作業に焦点を当てた "react-reviewer" カスタム エージェントを作成します。

* より安全なアクセス許可

  例: 監査用に `view/grep/glob` (読み取り専用) のみを実行できるカスタム エージェント。

* オプションのオートデリゲーション

  例: `infer: true`が必要に応じてこのカスタム エージェントを自動的に使用できるように、カスタム エージェント構成でCopilotを設定します。

### カスタム エージェントを使用すべきではないのはいつですか?

次の場合は、カスタム エージェントを回避します。

* ガイダンス テキストのみが必要です ( **スキル** は軽量なソリューションにすることができます)。
* 特殊化は必要なく、既定のエージェントはタスクを適切に実行します。

### カスタム エージェントの詳細を確認する

「[カスタム エージェントの構成](/ja/copilot/reference/custom-agents-configuration)」を参照してください。

## プラグイン

### プラグインとは何ですか?

**プラグイン**は、Copilotに機能のバンドルを提供できるインストール可能なパッケージです。 プラグインには、他のカスタマイズ機能の任意の組み合わせを含めることができます。 たとえば、スキル、カスタム エージェント、フック、MCP サーバー構成などです。

Copilot には、プラグイン管理コマンド (インストール、更新、一覧表示、アンインストール) が含まれており、マーケットプレースまたはGitHub リポジトリからの直接インストールがサポートされます。

### プラグインはどのような問題を解決しますか?

プラグインを使用すると、次のことができます。

* 各部分を手動で構成しなくても、 Copilot に機能のバンドルを簡単に追加できます。
* カスタム構成 (スキル、カスタム エージェント、フック、MCP サーバーの組み合わせ) をパッケージ化して、チームまたは一般ユーザーに配布します。
* 手動でファイルをディレクトリにコピーすることなく、使用可能な機能を変更します。

### プラグインを使用する必要がある場合

次の場合にプラグインを使用します。

* チーム全体のバンドルが必要です

  例: 以下を含む会社全体のエンジニアリング プラグイン:

  * インシデント対応のスキル。
  * コード レビュー用のカスタム エージェント。
  * 内部サービス用の MCP サーバー。

* インストールと更新を簡単にしたい

  例: プラグインを最初にインストールしてから、 `/plugin update PLUGIN-NAME`を使用して定期的に更新します。

### プラグインを使用すべきではないのはいつですか?

次の場合はプラグインを使用しないでください。

* ローカルで実験を行っており、配布は必要ありません (ローカル スキル、カスタム命令、またはカスタム エージェントを使用します)。
* 必要なのは、1 回限りの小さなワークフローだけです。 1 つのスキル ファイルの方が簡単な場合があります。

## まとめ: 適切なオプションの選択

| Requirement                                            | 最適なオプション |
| ------------------------------------------------------ | -------- |
| Copilot常にリポジトリ規則に従いたいと思います。                            |          |
| **カスタム手順**                                             |          |
| オンデマンドで呼び出すことができる反復可能なワークフローが必要です。                     |          |
| **スキル**                                                |          |
| 私は Copilot 質問に答え、リポジトリで作業を実行したいと思います。                  |          |
| Copilot適切な**ツール**を使用するためのアクセス許可を要求する                   |          |
| ツールの使用とセッション イベントに関するガードレール、ポリシー、または自動化が必要です。          |          |
| **フック**                                                |          |
| 外部サービスによって提供されるツールを使用できるようにするには、 Copilot が必要です。        |          |
| **MCP サーバー**                                           |          |
| 特定のタスクに取り組む際、Copilotを制約付きのツールセットで使用してスペシャリストとして働きたいです。 |          |
| **カスタム エージェント**                                        |          |
| 私 Copilot 代わりに複雑なタスクを実行したいと思います。                       |          |
| Copilot は、必要に応じて **サブエージェントを** 自動的に使用します。              |          |
| 手動で構成を行わずに、Copilot CLI (コパイロット CLI) に機能パッケージを追加したい。    |          |
| **プラグイン**                                              |          |

## 詳細については、次を参照してください。

* [GitHub Copilot CLI（コマンドラインインターフェース）](/ja/copilot/how-tos/copilot-cli)