# GitHub Copilot アプリのリポジトリ構成

GitHub Copilot appのリポジトリ固有の命令、スクリプト、および自動化の動作を定義します。

リポジトリの `.github/github-app.yml` を使用して、そのプロジェクトの GitHub Copilot app の動作を定義します。

これらのプロジェクト設定は、アプリ UI で編集することもできます。
`.github/github-app.yml`が既に存在する場合は、UI の変更がそのファイルに書き戻されます。 まだ存在しない場合は、アプリの現在のプロジェクト設定から作成できます。

## 構成ファイルの場所について

次の位置にファイルを作成します。

```text copy
.github/github-app.yml
```

このアプリでは、旧バージョンとの互換性のために、従来のファイル名 `.github/copilot-desktop.yml` もサポートされています。

UI ベースのカスタマイズ手順については、 [GitHub Copilot アプリのカスタマイズ](/ja/copilot/how-tos/github-copilot-app/customize-github-copilot-app) を参照してください。

## 構成を確認して信頼する

アプリは、リポジトリから構成を検出した場合、構成を確認して受け入れるまで、リポジトリの指示、スクリプト、またはその他の設定をファイルから適用しません。 これにより、別の共同作成者によって追加されたコマンドの実行や設定の適用から保護されます。 アプリ UI を使用して作成または更新した構成は、自動的に信頼されます。

> \[!WARNING]
> リポジトリ構成を受け入れる前に、構成されているすべてのコマンドと実行される依存関係を確認します。 スクリプトとその子プロセスは、この記事で後述する GitHub 資格情報を受け取るので、これらの環境変数をログに記録したり永続化したりするように構成しないでください。

空白やコメントの変更など、アプリの外部でファイルが変更された場合は、アプリが適用される前に、更新された構成を確認して受け入れる必要があります。 現在のバージョンを受け入れるまで、アプリは以前にアプリで構成されたプロジェクト設定を引き続き使用します。

## 構成例

```yaml copy
instructions: |
  Use bun instead of npm.

scripts:
  - name: Setup
    command: bun install
    triggers:
      - session.create
  - name: Run
    command: bun run dev
  - name: Archive cleanup
    command: rm -rf node_modules
    triggers:
      - session.archive

server_ready_pattern: '(?i)Local:\s+(https?://\S+)'
auto_open_in_browser: true

automation:
  auto_issue_session: true
  remote_control: false
```

## 手順とスクリプトを構成する

### `instructions`

`instructions`を使用して、プロジェクト内のセッションのシステム プロンプトにリポジトリ固有のガイダンスを追加します。 アプリでグローバル命令も構成する場合は、最初にグローバル命令が適用され、その後にプロジェクトの指示が適用されます。

### `scripts`

`scripts`を使用して、アプリに表示され、手動または特定のトリガーで実行できるコマンドを定義します。

各スクリプト項目では、次の機能がサポートされます。

* `name` (`string`): UI の表示名。
* `command` (`string`): 実行するコマンド。
* `triggers` (`string[]`、省略可能): スクリプトを自動実行するイベント。

`triggers`のないスクリプトは手動で行います。

### トリガー値

ファイルで正規のトリガー値を使用します。

* `session.create`
* `session.archive`

アプリは、既存のファイルを解析するときに、次のレガシ エイリアスも受け入れます。

* `workspace.create` ( `session.create`のエイリアス)
* `workspace.archive` ( `session.archive`のエイリアス)

トリガーされたスクリプトを実行すると、 `COPILOT_SCRIPT_TRIGGER` は正規の値に設定されます。

* `session.create`
* `session.archive`

## サーバーの検出とブラウザーの動作を構成する

### `server_ready_pattern`

`server_ready_pattern` は、実行スクリプトがサーバーを起動したことを検出するために使用される正規表現です。

パターンでは、Rust の `regex` クレートでサポートされている構文が使用されます。 構文の詳細については、クレートドキュメントの [構文](https://docs.rs/regex/1/regex/#syntax) を参照してください。 パターンが無効な場合、アプリは既定のサーバー検出パターンを使用します。

検出された URL またはポートには、最初のキャプチャ グループを使用します。 アプリはキャプチャ グループ `1`を読み取ります。

* キャプチャが URL (`http://...` または `https://...`)は、URL が使用されます。
* キャプチャがポート番号 (例: `3000`)、アプリはそれを `http://localhost:3000`に変換します。

### `auto_open_in_browser`

`auto_open_in_browser`が`true`されている場合、アプリは統合ブラウザーで検出された実行 URL を開きます。 このフィールドを省略すると、有効な既定値は `true`。

## 自動化の動作を構成する

`automation`で自動化オプションを設定します。

* `automation.auto_issue_session` (`boolean`) は、アプリが問題コンテキストを含むセッションを自動的に開始するかどうかを制御します。 省略した場合、有効な既定値は `true`。
* `automation.remote_control` (`boolean`) は、 GitHub Web インターフェイスまたは GitHub Mobileからセッションにアクセスできるかどうかを制御します。 省略した場合、有効な既定値は `false`。

Copilotシートが組織から来ている場合は、リモート コントロールを使用できるようにするには、該当する "クラウドにローカル セッションを保存する" ポリシーを "表示および制御" に設定する必要があります。 エンタープライズ管理の `remoteControl` 設定では、 `automation.remote_control` が `true`されている場合でも、リモート 制御をさらに制限できます。 詳細については、「[GitHub Copilot CLI セッションのリモート 制御について](/ja/copilot/concepts/agents/copilot-cli/about-remote-control)」および「[エンタープライズ管理設定](/ja/copilot/reference/enterprise-administrators/enterprise-managed-settings)」を参照してください。

## スクリプトのランタイム環境変数

スクリプトは、次のアプリで提供される環境変数で実行されます。

| Variable                 | 説明                                                  |
| ------------------------ | --------------------------------------------------- |
| `COPILOT_WORKSPACE_NAME` | 現在のワークスペース名。                                        |
| `COPILOT_WORKSPACE_PATH` | ワークスペースへの絶対パス。                                      |
| `COPILOT_ROOT_PATH`      | プロジェクト ルート チェックアウトへの絶対パス。                           |
| `COPILOT_DEFAULT_BRANCH` | 既定のブランチProjectします。                                  |
| `COPILOT_PORT`           | 現在のワークスペース コンテキストのアプリ WebSocket ポート。                |
| `COPILOT_SCRIPT_TRIGGER` | スクリプトを起動したトリガー (トリガーされたスクリプトにのみ設定)。                 |
| `GH_TOKEN`               | 選択した GitHub アカウントのトークン。                             |
| `GH_HOST`                | 選択した GitHub アカウントのホスト。                              |
| `COPILOT_GH_ACCOUNT_*`   | 選択したアカウントを含む、サインインしているすべてのアカウントのホストおよびアカウント固有のトークン。 |

`COPILOT_GH_ACCOUNT_*`変数ごとに、アプリはホストとログインを小文字にし、ASCII 文字と数字を変更せずに残し、他のすべての UTF-8 バイトを、アンダースコアで囲まれた大文字の 16 進数の値に置き換えます。 変数名は `COPILOT_GH_ACCOUNT_<HOST>_<LOGIN>`形式を使用します。 たとえば、`alice`での`github.com`のトークンは`COPILOT_GH_ACCOUNT_github_2E_com_alice`され、`user`での`ghe-example.com`のトークンは`COPILOT_GH_ACCOUNT_ghe_2D_example_2E_com_user`。

## 従来の互換性

下位互換性のために、アプリは引き続き古いオブジェクト ベースの `scripts` 図形を解析できます。

```yaml copy
scripts:
  setup: bun install
  run: bun run dev
  archive: rm -rf node_modules
```

この従来の図形では、次の操作を行います。

* `setup` は、作成トリガーを使用してスクリプトにマップされます。
* `archive` は、アーカイブ トリガーを使用してスクリプトにマップされます。
* `run` は手動のスクリプト エントリにマップされ、1 つのコマンド文字列または `{ name, command }` オブジェクトの一覧を指定できます。