# GitHub Copilot CLI の構成

信頼されたディレクトリ、ツール アクセス、パスおよび URL のアクセス許可を構成するCopilot CLI

## イントロダクション

Copilot CLI には、ユーザーに代わってアクセスして実行できる操作を制御する構成オプションがいくつかあります。

この記事では、信頼されたディレクトリの設定、ツールへのアクセスの構成、ファイル パスと URL へのアクセス許可の付与を行う方法について説明します。

### \[前提条件]

* Copilot CLIをインストールします。 「[GitHub Copilot CLI のインストール](/ja/enterprise-cloud@latest/copilot/how-tos/copilot-cli/set-up-copilot-cli/install-copilot-cli)」を参照してください。

## 信頼されたディレクトリの設定

信頼されたディレクトリは、 Copilot CLI がファイルの読み取り、変更、実行を行うことができる場所を制御します。 ディレクトリを信頼すると、セキュリティに影響があります。 [「セキュリティに関する考慮事項](/ja/enterprise-cloud@latest/copilot/concepts/agents/copilot-cli/about-copilot-cli#security-considerations)」を参照してください。

### ディレクトリを信頼することを選択する

GitHub Copilot CLI セッションを開始すると、CLI を起動したディレクトリおよびその下位ディレクトリ内のファイルを信頼するかどうかの確認を求められます。

以下に対して、現在のディレクトリを信頼することを選択できます。

* 現在実行中のセッションのみ
* このセッションと今後のセッション

今後のセッションでディレクトリを信頼することを選んだ場合、信頼済みディレクトリのプロンプトは表示されなくなります。 この 2 番目のオプションは、この場所が常に Copilot が動作するための安全な場所であることが確実な場合にのみ選択する必要があります。

### 信頼されたディレクトリの編集

永続的に信頼されたディレクトリの一覧を編集できます。 信頼されたディレクトリは、自動的に管理される `config.json` ファイルに格納されます。

1. CLI の `config.json` ファイルを開きます。 既定では、ホーム ディレクトリの下の `.copilot` フォルダーに格納されます。

   * **macOS/Linux**: `~/.copilot/config.json`

   * **Windows**:`$HOME\.copilot\config.json`

`COPILOT_HOME`環境変数を設定することで、構成の場所を変更できます。 これにより、上記のパスの `~/.copilot/` と `$HOME\.copilot\` が変更されます。

1. `trustedFolders`配列の内容を編集します。

## 許可されるツールの設定

Copilot CLIがツールを使用しようとしたときに承認プロンプトに応答するか、コマンド ライン フラグを使用してアクセス許可を指定することで、使用できるツールCopilot制御できます。

ツールのアクセスを許可するとセキュリティに影響があることに注意してください。 [「セキュリティに関する考慮事項](/ja/enterprise-cloud@latest/copilot/concepts/agents/copilot-cli/about-copilot-cli#security-considerations)」を参照してください。

このセクションでは、次の方法について説明します。

* [ツールを初めて許可する](#allowing-a-tool-for-the-first-time)
* [手動承認なしでツールを使用できるようにする](#allowing-tools-to-be-used-without-manual-approval)
* [許可または拒否するツールを指定する](#specifying-which-tool-you-want-to-allow-or-deny)
* [一部のツールを許可しながら他のツールを拒否する](#allowing-some-tools-while-denying-others)
* [使用可能なツールを制限する](#limiting-available-tools)

### 初めてツールを許可する

Copilot初めて承認が必要なツール (例: `touch`、`chmod`、`node`、`sed`) を使用する必要がある場合は、実行を許可するかどうかを確認するメッセージが表示されます。 プロンプトが表示されるかどうかは、ツールとその使用方法 (指定された引数や、ツールが以前に承認されているかどうかなど) によって異なります。

1. Copilot にツールを必要とするタスクの実行を求める。 例えば次が挙げられます。

   ```shell
   copilot -p "Create a new file called README.md with a project description"
   ```

2. 次の 3 つのオプションのいずれかを選択します。

   * `1. Yes`

     このオプションを選択すると、 Copilot がこの特定のコマンドのみを実行できるようになります。 次回このツールを使う必要があるときは、再び確認が求められます。

   * `2. Yes, and approve TOOL for the rest of the running session`

     現在実行中のセッションの間、 Copilot がこのツールを使用できるようにするには、このオプションを選択します。 新しいセッション、または現在のセッションを後から再開する場合は、再度承認が求められます。 このオプションを選択すると、 Copilot が適切と思われる方法でこのツールを使用できるようになります。

     たとえば、 Copilot がコマンド `rm ./this-file.txt`の実行を許可するように求められ、オプション 2 を選択した場合、 Copilot は、承認を求めることなく、このセッションの現在の実行中に任意の `rm` コマンド ( `rm -rf ./*` など) を実行できます。

   * `3. No, and tell Copilot what to do differently (Esc)`

     提案されたコマンドを取り消し、別の方法を試すように Copilot 指示するには、このオプションを選択します。

### 手動承認なしでツールの使用を許可する

コマンド ライン フラグを使用して、承認を求めることなく使用できるツール Copilot 指定できます。

#### すべてのツールを許可する

`--allow-all-tools`を使用して、Copilotが承認を求めずにツールを使用できるようにします。

* 例えば次が挙げられます。

  ```shell
  copilot -p "Revert the last commit" --allow-all-tools
  ```

#### ツールの拒否

`--deny-tool`が特定のツールを使用できないようにするには、Copilotを使用します。

* 例えば次が挙げられます。

  ```shell
  copilot --deny-tool='shell(git push)'
  ```

このオプションは、オプション `--allow-all-tools` と `--allow-tool` よりも優先されます。

#### ツールを許可する

`--allow-tool`を使用して、Copilotが承認を求めずに特定のツールを使用できるようにします。

* 例えば次が挙げられます。

  ```shell
  copilot --allow-tool='shell'
  ```

### 許可または拒否するツールを指定する

`--deny-tool`オプションと`--allow-tool`オプションを使用するには、許可または拒否するツールの種類を指定する必要があります。

* [シェル コマンド](#allowing-or-denying-shell-commands)
* ['書き込み' ツール](#allowing-or-denying-write-tools)
* [MCP サーバー ツール](#allowing-or-denying-mcp-server-tools)

#### シェル コマンドの許可または拒否

`shell(COMMAND)`を使用して、特定のシェル コマンドを許可または拒否します。

* たとえば、 Copilot が `rm` コマンドを使用できないようにするには、次のコマンドを使用します。

  ```shell
  copilot --deny-tool='shell(rm)'
  ```

`git`コマンドと`gh`コマンドの場合は、許可または拒否する特定の第 1 レベルのサブコマンドを指定します。

* たとえば、 Copilot が `git push`を使用できないようにするには、次のコマンドを使用します。

  ```shell
  copilot --deny-tool='shell(git push)'
  ```

ツールの仕様は省略可能です。 たとえば、 `copilot --allow-tool='shell'` を使用すると、 Copilot は個々の承認なしで任意のシェル コマンドを使用できます。

#### `'write'` ツールの許可または拒否

`'write'`を使用して、シェル コマンド以外のツールでファイルを変更する権限を許可または拒否します。

* たとえば、 Copilot が個々の承認なしにファイルを編集できるようにするには、次のコマンドを使用します。

  ```shell
  copilot --allow-tool='write'
  ```

#### MCP サーバー ツールの許可または拒否

`'MCP_SERVER_NAME'`を使用して、指定した MCP サーバーから特定のツールを許可または拒否します。

* たとえば、Copilotが `tool_name` という MCP サーバーから `My-MCP-Server` というツールを使用できないようにするには、次のコマンドを使用します。

  ```shell
  copilot --deny-tool='My-MCP-Server(tool_name)'
  ```

`MCP_SERVER_NAME` は、構成した MCP サーバーの名前です。

サーバーからのツールは、MCP サーバーに登録されているツール名を使ってかっこ内に指定します。

ツールを指定せずにサーバー名を使うと、そのサーバーからのすべてのツールが許可または拒否されます。

MCP サーバーの名前を見つけるには、`/mcp`の対話モードでCopilot CLI入力し、表示されている一覧からサーバーを選択します。

### 一部のツールを許可しながら他のツールを拒否する

承認を求めずに使用できるツール Copilot 正確に判断するには、承認オプションの組み合わせを使用できます。 例えば次が挙げられます。

* Copilotが`rm`コマンドと`git push` コマンドを使用できないようにし、他のすべてのツールを自動的に許可するには、次のコマンドを使用します。

  ```shell
  copilot --allow-all-tools --deny-tool='shell(rm)' --deny-tool='shell(git push)'
  ```

* Copilotが `tool_name` という名前の MCP サーバーからツール `My-MCP-Server`を使用できないようにし、そのサーバーの他のすべてのツールを個別の承認なしで使用できるようにするには、次の値を使用します。

  ```shell
  copilot --allow-tool='My-MCP-Server' --deny-tool='My-MCP-Server(tool_name)'
  ```

### 使用可能なツールの制限

Copilotを特定のツール セットに制限するには、`--available-tools`を使用します。

この一覧に含まれていないツールは、 Copilotでは使用できません。

## パスのアクセス許可の設定

パスのアクセス許可は、アクセスできるディレクトリとファイル Copilot 制御します。

既定では、 Copilot CLI は現在の作業ディレクトリ、そのサブディレクトリ、およびシステム一時ディレクトリにアクセスできます。

パスのアクセス許可は、シェル コマンド、ファイル操作 (作成、編集、表示)、および検索ツール ( `grep` や glob パターンなど) に適用されます。 シェル コマンドの場合、パスは、コマンド テキストをトークン化し、パスのように見えるトークンを識別することによってヒューリスティックに抽出されます。

> \[!WARNING]
> シェル コマンドのパス検出には制限があります。
>
> * 複雑なシェル コンストラクトに埋め込まれたパスが検出されない場合があります。
> * 特定の環境変数のセットのみが展開されます (`HOME`、 `TMPDIR`、 `PWD`など)。
>   `$MY_PROJECT_DIR`などのカスタム変数は展開されず、正しく検証されない可能性があります。
> * Symlinks は既存のファイルに対しては解決されますが、作成されるファイルについては解決されません。

### すべてのパスへのアクセスを許可する

パス検証を無効にし、任意のパスへのアクセスを許可するには、`--allow-all-paths`を開始するときに Copilot CLI フラグを使用します。

### 一時ディレクトリへのアクセスを禁止する

一時ディレクトリへのアクセスを禁止するには、 `--disallow-temp-dir`を使用します。

## URL アクセス許可の設定

URL アクセス許可は、Copilot がアクセスできる外部 URL を制御します。 既定では、アクセスが許可される前にすべての URL に承認が必要です。

URL アクセス許可は、 `web_fetch` ツールと、ネットワークにアクセスするシェル コマンドのキュレーションされたリスト ( `curl`、 `wget`、 `fetch`など) に適用されます。 シェル コマンドの場合、URL は正規表現パターンを使用して抽出されます。

> \[!WARNING]
> シェル コマンドの URL 検出には制限があります。
>
> * コマンドによって読み取られたファイルの内容、構成ファイル、または環境変数内の URL は検出されません。
> * 難読化された URL (分割文字列やエスケープ シーケンスなど) が検出されない場合があります。
> * HTTP と HTTPS は異なるプロトコルとして扱われ、個別の承認が必要です。

URL のアクセス許可は、セッションに対して永続化することも、永続的に保持することもできます。

### URL 検証の無効化

URL 検証を無効にするには、 `--allow-all-urls` フラグを使用します。

### 特定のドメインの事前承認

特定のドメインを事前に承認するには、 `--allow-url=DOMAIN`を使用します。

* たとえば、「 `--allow-url=github.com` 」のように入力します。

### 特定のドメインの拒否

特定のドメインを拒否するには、 `--deny-url=DOMAIN`を使用します。

* たとえば、「 `--deny-url=github.com` 」のように入力します。

## すべてのツール、パス、URL を許可する

すべてのツール、パス、URL を許可するには、 `--allow-all`またはそのエイリアス `--yolo`を使用します。

このフラグは次の内容を組み合わせたものになります。

* `--allow-all-tools` (ツールの承認をスキップします)。
* `--allow-all-paths` (パス検証を無効にします)。
* `--allow-all-urls` (URL 検証を無効にします)。

対話型セッション中は、 `/allow-all` コマンドまたは `/yolo` スラッシュ コマンドを使用してすべてのアクセス許可を有効にすることもできます。

> \[!NOTE] Copilot BusinessライセンスまたはCopilot Enterpriseライセンスをお持ちの場合、これらのコマンドはエンタープライズ管理者によってブロックされる可能性があります。

## ファイルへのアクセスを制限する

さまざまな `--allow-all...` オプションを使用すると、 Copilot が個々のツール、ファイル、URL にアクセスできるようにするかどうかを決定する必要ができなくなります。 ただし、これらを使用すると、作業しているリポジトリの外部でファイルを変更するなど、 Copilot が望まないアクションを実行する範囲が広がります。

このリスクを軽減するには、CLI にコマンドをサンドボックス化 (ローカル サンドボックス) するように指示するか、リモートのサンドボックス環境 (クラウド サンドボックス) 内で Copilot CLI セッション全体を実行できます。 詳細については、「[クラウドサンドボックスとローカルサンドボックスについて GitHub Copilot](/ja/enterprise-cloud@latest/copilot/concepts/about-cloud-and-local-sandboxes)」を参照してください。

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

* [GitHub Copilot CLI のカスタマイズ](/ja/enterprise-cloud@latest/copilot/how-tos/copilot-cli/customize-copilot)
* [GitHub Copilot CLI の構成ディレクトリ](/ja/enterprise-cloud@latest/copilot/reference/copilot-cli-reference/cli-config-dir-reference)