# GitHub Copilot CLI 用の拡張機能について

拡張機能を使用すると、CLI に付属する SDK のみを使用して、独自のツールとスラッシュ コマンドを GitHub Copilot CLIに追加できます。

> \[!NOTE]
> GitHub Copilot CLI 拡張機能は現在試験的な機能であり、変更される可能性があります。

拡張機能を使用すると、独自の機能を Copilot CLIに追加できます。 各拡張機能は、対話型セッションと共に個別のプロセスとして実行され、それに接続する小さな Node.js モジュールです。 その接続を通じて、拡張機能は次を追加できます。

* \*\*\*\*がユーザーに代わって動作している間に呼び出すことができるCopilot。
* 自分で実行する**スラッシュ コマンド**。

拡張機能はコンピューター上で実際のコードを実行するため、組み込みのツールにはない機能を追加できます。 たとえば、拡張機能はセッションで何が起こるかを監視し、ツールの呼び出し全体で合計を実行し続けることができます。これは、1 回限りのシェル コマンドでは実行できません。

この記事では、拡張機能のしくみと、拡張機能 Copilot CLI 処理方法について説明します。 独自の拡張機能を構築するためのハンズオン ガイドについては、 [GitHub Copilot CLI 用の拡張機能の作成](/ja/copilot/tutorials/create-an-extension) を参照してください。

> \[!WARNING]
> 拡張機能は、お使いのコンピューターで特権を使用して実行されます。 信頼できる拡張コードのみを読み込みます。同じ方法で、自分で記述していない他のスクリプトのみを実行します。

## 拡張機能の検出方法

Copilot CLIが開始されると、複数の場所で拡張機能が検索されます。 各拡張機能は独自のサブディレクトリに存在し、そのサブディレクトリには、 `extension.mjs`、 `extension.cjs`、または `extension.js`という名前のエントリ ファイルが含まれている必要があります。 これらはすべて JavaScript ファイルです。 Copilot CLI は、Node.jsを使用してエントリ ファイルを直接実行するため、拡張機能を JavaScript で記述する必要があります。TypeScript やその他の言語は現在サポートされていません。

サブディレクトリの名前が拡張機能の名前になります。

| Source                               | 場所                            | 可用性                                |
| ------------------------------------ | ----------------------------- | ---------------------------------- |
| **プロジェクト**                           |                               |                                    |
| `.github/extensions/NAME/` 現在のリポジトリ内 | そのリポジトリで作業するすべてのユーザーが使用できます。  |                                    |
| **User**                             | `~/.copilot/extensions/NAME/` | すべての CLI セッションで、すべてのディレクトリで使用できます。 |
| **プラグイン**                            | インストールされているプラグイン              | プラグインが有効になっている場所であればどこでも使用できます。    |

## 拡張機能が存在する場所の選択

拡張機能ディレクトリを配置する場所によって、使用できるユーザーが決まります。

* 拡張機能がそのプロジェクトに固有であり、そこで作業するすべてのユーザーと共有する場合は、それをリポジトリの **`.github/extensions/`** に配置します。
* CLI を開始するディレクトリに関係なく、すべてのセッションで拡張機能を使用できるようにする場合は、 **`~/.copilot/extensions/`** に配置します。

2 つの場所はまったく同じ構造 ( `extension.mjs` ファイルを含む名前付きサブディレクトリ) に従うので、フォルダーを再配置するだけで拡張機能を 1 つから別の場所に移動できます。

## 拡張機能の有効化

拡張機能は現在試験的な機能であるため、試験的な機能を有効にする必要があります。 これを行うには、次のいずれかの操作を行います。

* `‑‑experimental` フラグを使用して CLI を起動します。
* 対話型セッション内で `/experimental on` スラッシュ コマンドを実行します。

## CLI による拡張機能の処理方法の変更

Copilot コマンドを使用して、`/extensions mode`の拡張機能へのアクセスを制限したり、完全にオフにしたりできます。 このコマンドを使用すると、次の 3 つのオプションが表示されます。

* **ロード & オーグメント** (既定値) — CLI によって拡張機能が実行 \_され\_Copilot で拡張機能を管理できます。
* **読み込み専用** — CLI は拡張機能を実行しますが、 Copilot は拡張機能を管理できません。
* **無効** - 拡張機能は現在のセッションで完全にオフになり、他の 2 つの設定のいずれかに切り替えるまで、今後のセッションでは無効のままになります。 その他の現在のセッションは影響を受けません。

行った変更は、現在のセッションですぐに有効になります。

* **\[無効] に**切り替えると、現在実行中のすべての拡張機能が停止します。 プロセスはシャットダウンされ、ツールは使用できなくなります。
* **\[無効] から**他のいずれかの設定に切り替えると、拡張機能が開始されます。
* **\[読み込み専用]** と \[**読み込み] と \[拡張]** を切り替えると、拡張機能Copilot管理できるかどうかが変わります。

### "拡張機能の管理" とは

**ロード&オーグメント**モードでは、Copilotは、要求の実行の一環として、拡張機能システムで直接動作できるようにする追加ツールの小さなセットが与えられます。 これらのツールを使用すると、 Copilot 次のことができます。

* 検出した拡張機能を**一覧表示**し、その状態を確認します。
* **調査**すると、ログ ファイルの末尾を含めて拡張機能を確認でき、失敗したり誤動作したりしている拡張機能の診断に役立ちます。
* 新しい拡張機能を**ひな形生成**します。これを基に開発できるスターター `extension.mjs` ファイルを生成します。
* 拡張機能を**再読み込み**して、その拡張機能自身またはあなたが書いたばかりのコードを、セッションを再起動せずに反映させます。

これにより、 Copilot に拡張機能のビルドを依頼できます。
Copilot では、セッションを離れることなく、ファイルの作成、コードの記述、再読み込みを行うことができます。

既知の信頼できる拡張機能一式を動作させたままにしつつ、\*\*\*\* の処理の副作用として、マシン上で実行される拡張機能コードが作成、再読み込み、またはそのほかの形で変更されることを望まない場合は、Copilot を選択します。 既存の拡張機能は引き続き実行され、 Copilot は提供するツールを引き続き呼び出すことができます。拡張機能自体を管理することはできません。

## プラグインと比較した拡張機能

拡張機能とプラグインの両方が Copilot CLIに機能を追加しますが、さまざまな目的に対応します。

* **拡張機能**は、セッションで実行されるコードによってサポートされるツールとスラッシュ コマンドを追加するために記述する単一の JavaScript モジュールです。
* **プラグイン**は、エージェント、スキル、フック、統合などの再利用可能なコンポーネントをバンドルし、マーケットプレースを通じて配布できるインストール可能なパッケージです。

プラグインの詳細については、 [GitHub Copilot プラグインについて](/ja/copilot/concepts/agents/about-plugins) を参照してください。

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

* [GitHub Copilot CLI 用の拡張機能の作成](/ja/copilot/tutorials/create-an-extension)
* [GITHUB COPILOT CLI コマンド リファレンス](/ja/copilot/reference/copilot-cli-reference/cli-command-reference#slash-commands-in-the-interactive-interface)
* [GitHub Copilot CLI](/ja/copilot/how-tos/copilot-cli)