GitHub Copilotを試してみた

# はじめに
VS CodeでGitHub Copilotを試してみたときのメモです。
主にAgent Modeを使って、かんたんな機械学習プロジェクトをゼロから立ち上げ、Pull Requestを経て継続的に改善するまでを試してみました。

# VS Code画面（Copilot拡張）の見方
![スクリーンショット 2025-04-30 21.43.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/92368/313316a7-b8fa-4696-aef2-ae80f4459ca1.png)

# 手順
## 1. 環境構築
1. VS Codeをインストール
    - 最新版（1.99 以降）を [https://code.visualstudio.com](https://code.visualstudio.com/) からダウンロードして起動
    - 補足：
        - バージョン確認：左上メニューCode → Visual Studio Codeのバージョン情報
        - バージョンアップ：左上メニューCode → 更新の確認
2. GitHub側でCopilot/Agent Modeを利用できるプランになっているか確認
    * GitHub → Settings → Copilot
        * “You have access through Copilot Business” と表示されれば OK
        * 組織なら Org Settings → Copilot → Policies
            * Editor preview features を *Enabled* にする（Agent 機能はプレビュー枠）
    * 個人の場合はfreeプランでも利用できる
3. VS Code側でGitHub Copilot拡張インストールとAgent Modeを有効化
    - VS Code の拡張機能検索で “GitHub Copilot”をインストール
    - 左上メニューCode → 基本設定 → 設定  で検索欄に `chat.agent.enabled` → ✅ON
        - または `Ctrl + Shift + P › “GitHub Copilot: Enable Agent Mode (Preview)”`
    - Copilot Chat パネルを開き、右下の入力欄のドロップダウンをAgentに切り替え
4. GitHub MCP サーバーを追加
    * 4-1. Personal Access Token (PAT) を発行（MCPサーバー連携用）
        * GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
        * Generate new tokenで有効期限を短め（30 days など）に設定
        * Scopesで最低限 `repo` → 「public_repo」を選ぶと全 PR/Issue 操作が可能（Workflow を回すなら `workflow` も追加）
        * 「Generate token」→ 生成された **`ghp_…`** をコピーして安全な場所へ控える
    * 4-2. GitHub MCP サーバーを追加
        * 入力欄左上の 🛠 Tools → Add More Tools… → Add MCP Server
        * Command を選択 → Next
        * Server name に分かりやすい名前	github-mcp
        * Command フィールド	npx
        * Args フィールド	-y, @modelcontextprotocol/server-github
        * Env にトークン	GITHUB_PERSONAL_ACCESS_TOKEN=ghp_xxxxx…
        * Finish → “Start MCP Server” をクリック
    
        ```jsx:settings.json
          "mcp": {
            "servers": {
              // 好きな名前で OK（ここでは github-mcp）
              "github-mcp": {
                "type": "stdio",
                "command": "npx",
                // npx に渡す引数。-y で確認スキップ
                "args": ["-y", "@modelcontextprotocol/server-github"],
                // PAT を環境変数で渡す (Fine-grained PAT でも可)
                "env": {
                  "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxxxxxxx"
                }
              }
            }
          }
        }
        ```
        
        ### （補足）接続できているか確認
        * チャットで `@github list my public repositories`
        * 切り分けで認証なしで確認
            * `@github search_repositories "user:your-github-id is:public" perPage=100`    
        * 切り分けは表示→出力→Copilot
        * `⇧⌘P › MCP: List Servers` → Status が Runningか確認したり、停止・起動したり
    
5. リポジトリ共通の Copilot 命令を用意
    プロジェクト直下に `.github/copilot-instructions.md` を作成し、数行の方針を書いておくと Copilot が常に参照してくれます。
    例：    
    ```markdown: .github/copilot-instructions.md
    このリポジトリでは scikit-learn で機械学習パイプラインを実装します
    * コードは PEP8 に従い、必ず docstring を書きます
    * main 関連モジュールは /src 下に配置します
    * コードの品質を保つため、pytest を使用してテストを実行します
    * README と docs/architecture.md を常に最新に保ちます
    * 機密情報（例: .env ファイル）はリポジトリに含めません
    ```

ここまでの設定だけは手動で一度行います。以降は VS Codeが覚えています。
    
## 2. 空リポジトリ → PR #1（初回サンプル）

リポジトリを空のまま作成し、クローンしてVS Codeで開いたら、Copilot Chat（Agent モード）に次の一括指示を送る。

```
@agent
空の Python プロジェクトを初期化してください：
• README.md、.gitignore、pyproject.toml を生成
• 前処理・学習・推論のコードを src/ に、pytest テストを tests/ に生成し、テストを実行してパスさせる
• プロジェクト概要を docs/architecture.md に Markdown で書き出す
• dev ブランチにコミットし、main ブランチへ Pull Request (#1) を作成
```

エージェントはファイルを生成し、`pytest` を走らせて合格を確認し、コミット・プッシュ・PR 作成を自動で行います。

GitHub の *Pull Requests* タブに “Add initial ML pipeline” が現れれば成功です。

## 3. 反復改善サイクル（チーム開発）

### 一括で任せる場合

開発者が Fork または Clone したら、次のようにまとめて指示を送る。

```
@agent @workspace
1. feature/metrics ブランチを切ってチェックアウト
2. FastAPI の /metrics エンドポイントを実装し、対応するテストを追加
3. テストを実行してパスさせる
4. docs/architecture.md に API 追加を反映
5. コミットして origin にプッシュし、main への Pull Request を作成
```

エージェントは順にタスクを実行し、まとめてPRを提出してくれます。

### 手順を分けて指示する場合

1. `@agent checkout -b feature/metrics`
2. `@workspace FastAPI /metrics を追加し pytest テストも作成して実行`
3. `@agent commit "Add /metrics endpoint and tests"`
4. `@agent create PR to main title:"Add metrics" body:"Implemented endpoint and tests."`

いずれの方法でも **テストの生成と実行** が必ず含まれるようにしておくと品質が担保できます。

## Tips

- **リポジトリ全体のコードを説明**
    
    ```
    @workspace このリポジトリ全体を俯瞰して、
    アーキテクチャの概要（依存ライブラリやフレームワーク）
    ディレクトリ構成と各フォルダ／主要ファイルの役割
    データフロー（入力 → 処理 → 出力）の流れ
    を　300 文字以内で日本語で説明してください
    ```
    
- **特定フォルダ以下を説明**
    
    ```
    @workspace src/pipelines 配下のコードだけを 200 字で日本語要約し、主要クラスと責務を列挙
    ```
    
- **Content Exclusion (.env などを除外): settings.jsonの修正**
    
    ```
    @agent VS Code の Copilot 設定で "**/.env" と "**/*.pem" を content exclusion に追加し commit
    ```

    ```
    {
      // 既存設定はそのまま残し、下記キーを追加・マージします
      "github.copilot.contentExclusion": [
        "**/.env",
        "**/*.pem"
      ]
    }
    ```
    
- **禁止コマンド（危険な CLI）の設定: settings.jsonの修正**
    
    ```
    @agent chat.agent.blockedCommands に "rm", "shutdown", "kill -9" を追加して VS Code 設定を更新
    ```

    ```
    {
      // 前述のキーと併記する形で設定
      "chat.agent.blockedCommands": [
        "rm",
        "shutdown",
        "kill -9"
      ]
    }
    ```
    
- **リファクタ / Auto-PEP8**
    
    ```
    @agent @workspace PEP8 違反を自動修正し tests を再実行して commit
    ```
    
- **CI ワークフロー生成**
    
    ```
    @agent GitHub Actions で pytest と flake8 を回す workflow を.github/workflows/test.yml に追加 
    ```