GitHub Copilotを最大限に活用するためのガイド

## はじめに

この記事は、**GitHub Copilot** のアカウントを持っているが機能を十分に使いこなせていない方を対象としています。GitHub内でのCopilotの機能には触れず、主に **Visual Studio Code**での利用方法に焦点を当てています。
**⭐️マーク**が付いている項目は、特におすすめの即実践可能な内容です。生産性を向上させましょう。

## 事前準備

以下の環境が既に整っていることを前提としています。サブスクリプション料金を最大限に活用しましょう。

- **GitHub Copilotのサブスクリプション**
- **Visual Studio Code（VSCode）のインストール**
- **GitHub Copilot拡張機能のインストール**
  - [GitHub Copilotのセットアップ（英語）](https://code.visualstudio.com/docs/copilot/setup)
- **GitHubアカウントでのサインイン（認証が必要）**

## GitHub Copilotの主な機能

[GitHub Copilotの公式ドキュメント](https://docs.github.com/ja/copilot/about-github-copilot/github-copilot-features)によると、Copilotは以下の主要な機能を提供しています。

### 1. コード補完

コードスニペットの提案、変数名の補完、関数の生成、テストコードの生成など、効率的なコード作成をサポートします。

- **対応IDE**: VSCode、Visual Studio、JetBrains系IDE、Azure Data Studio、Xcode、Vim/Neovimなど

### 2. Copilot Chat（チャット機能）

自然言語での質問や指示を受け付け、コード生成やエラー修正、コードの説明などを行います。ペアプログラミングのイメージ。

### 3. Copilot for CLI（コマンドラインでのCopilot）

コマンドライン操作を補助し、シェルコマンドの提案やスクリプトの生成を行います。

### 新機能（プレビュー段階）

- **Copilot Text Completion**: テキストの補完機能を強化します。
- **Copilot Workspace**: 複数のファイルにまたがるコード生成をサポートします。
- **GitHub Copilot Extensions**: 他の拡張機能との連携を強化します。

### Enterpriseプラン限定機能

- **Pull Request Summaries**: プルリクエストの変更内容を自動で要約し、レビューを効率化します。
- **Knowledge Bases**: 組織内のナレッジベースを活用し、より的確な提案を行います。

### 管理者向け機能

- **ポリシー管理**: 組織や企業でのCopilotの利用ポリシーを設定・管理できます。
- **アクセス管理**: 企業の所有者は、Copilotを使用できる組織を指定し、メンバーの利用を制御できます。
  - プロキシサーバーやファイアウォールの設定も可能です。
- **使用状況データの確認**: 組織や企業内でのCopilotの使用状況を分析し、導入効果の測定や活用促進に役立てます。
- **監査ログの確認**: 組織内でのCopilotの利用履歴を確認し、セキュリティやコンプライアンスの維持に役立てます。
- **ファイルの除外設定**: 特定のファイルやディレクトリをCopilotの提案から除外することができます。

## Copilotでできること

### ⭐️コード補完

Copilotの基本機能であり、以下のようなタスクを自動化・支援します。

- テストコードや繰り返しの多いコードの自動生成
- エラーの修正やデバッグの支援
- コメントやコードの説明文の生成

#### 使用方法

1. コードを入力し始めると、Copilotがリアルタイムで提案をポップアップ表示します。
2. 提案を受け入れる場合は `Tab` キーを押します。拒否する場合は `Esc` キーを押します。

![コード補完の例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543778/cead53cb-c8e0-05f7-a7cd-67878c979785.png)

#### 複数の提案がある場合

- 提案の候補にマウスカーソルを置くか、`Command + Enter`を押すと複数の候補が表示されます。
- それぞれの提案を確認し、最適なものを選択できます。

![複数提案の選択](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543778/12a0057f-bbc6-9f57-7449-651568704464.png)

- **部分的な提案の受け入れも可能**（例：`Accept Line` で現在の行のみを受け入れる）

![部分的な提案の受け入れ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543778/5324e56e-e891-8ccd-4553-5b4e3eb3f708.png)

---

## ⭐️ GitHub Copilot Chat（チャット機能）

チャット形式でコードに関する質問や指示を行い、タスクを効率的にこなします。エラーの原因を尋ねたり、コードの最適化方法を相談したりできます。

### 使用方法

1. **チャットビューの起動**: VSCodeのサイドバーでCopilotアイコンをクリックするか、`Control + Command + I`（macOS）を押します。
2. **プロンプトの入力**: 自然言語で質問や指示を入力します。
    - 例：「この関数の動作を説明して」「このエラーを解決する方法は？」
3. **応答の確認**: Copilotからの回答を確認し、必要に応じてフォローアップの質問も可能です。

### **⭐️ @コマンド**

チャット内で特定のコンテキストやヘルプを指定できます。

![@コマンドの例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543778/7e311155-5ba8-6f61-c70e-30a746271d96.png)

- `@terminal`：ターミナルコマンドの作成やデバッグに関するヘルプを取得します。
- `@vscode`：Visual Studio Code自体の操作や設定に関するヘルプを得られます。
- `@workspace`：ワークスペース内のコード全体に関する質問ができます。プロジェクトの構造や設計パターンについて尋ねたい場合に便利です。

### ⭐️ /コマンド

頻繁に利用する機能へのショートカットとして、`/` コマンドが用意されています。

![/コマンドの例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543778/f370ff3a-db50-29e3-786c-381774b6b580.png)

- `/tests`：選択したコードの単体テストを生成します。
- `/fix`：選択したコードの問題を修正する提案を行います。
- `/explain`：選択したコードについて詳しく説明します。
- `/clear`：チャット履歴をクリアし、新しいチャットを開始します。
- `/help`：GitHub Copilotの使用方法に関するヘルプを表示します。
- `/doc`：選択したコードに対するドキュメント（コメント）を生成します。

### 具体的なコマンド例

- `@workspace /explain`：ワークスペース内のコードがどのように機能するかを説明します。
- `@workspace /fix`：選択したコードの問題点を修正する提案を行います。
- `@terminal /explain`：ターミナルコマンドの意味や動作を説明します。
- `@vscode /runCommand`：VSCodeのコマンドを検索または実行します。

### ユースケース

- 「このファイルについて説明して」：`/explain` を使用して、現在のファイルの概要を得ます。
- 「これらの行にコメントを追加して」：コードに対するコメントを自動生成します。

**注意点**:

- Copilotは開いているファイルを参照します。関連するファイルを開き、無関係なファイルは閉じておくと、より的確な提案が得られます。
- 望む結果が得られない場合、Copilotはチャット履歴も参照しているため、`/clear` コマンドで新しい会話を始めると効果的です。

### チャット変数

- `#file`：ワークスペース内の特定のファイルを指定します。
- `#git`：現在のGitリポジトリに関する情報を含めます。
- `#terminalLastCommand`：アクティブなターミナルで最後に実行したコマンドを参照します。
- `#selection`：エディター内で現在選択しているコードを対象とします。
- `#codebase`：コードベース全体を検索し、関連情報を取得します。
- `#editor`：アクティブなエディターに表示されているソースコードを対象とします。

詳細は[GitHub Copilotのドキュメント](https://docs.github.com/ja/copilot/using-github-copilot/asking-github-copilot-questions-in-your-ide#currently-available-skills)を参照してください。

### クイックチャット機能

1. キーボードの `⇧⌥⌘L`（Shift + Option + Command + L）を押してクイックチャットを起動します。または、Copilotチャットのコマンドセンターメニューからクイックチャットを選択します。
2. チャットボックスに質問や指示を自然言語で入力します。

![クイックチャットの例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543778/214af611-1d45-e56a-2b4d-a050247a6517.png)

---

### インラインチャット

エディター内で直接Copilotと対話できます。

![インラインチャットの例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543778/2246f7f4-ca64-3e70-c592-edf0824ab294.png)

#### 使用方法

1. エディター内で `Command + I`（Mac）を押してインラインチャットを開始します。
2. 自然言語で質問や指示を入力します。
3. Copilotからの提案が表示されたら、`Tab`キーで受け入れることができます。

#### 主な機能

- **コード生成**: 関数やコードブロックを生成する際に、インラインチャットで指示を与えると、Copilotが適切なコードを提案します。
- **コードの説明**: 既存のコードを選択し、インラインチャットで「このコードを説明して」と入力すると、Copilotがコードの機能や動作を解説します。
- **コード修正の提案**: エラーやバグがある場合、インラインチャットで問題を説明すると、Copilotが修正案を提示します。

## Copilot for CLI（コマンドラインでのCopilot）

GitHub CLIを利用することで、ターミナル操作をより効率的に行えます。

### インストール

- [GitHub CLIのインストール方法](https://github.com/cli/cli#installation)を参照してください。

### 主な機能

- シェルコマンドの自動生成や補完
- 複雑なコマンドの簡略化
- シェルスクリプトの生成やデバッグ

---

## ⭐️ GitHub Marketplaceの活用

[GitHub Marketplace](https://github.com/marketplace?type=apps&copilot_app=true)から、Copilotを強化するための拡張機能をインストールできます。

### 例
- **Docker拡張機能**: Docker関連のコマンドや設定ファイルを支援します。インストールすると、`@docker` コマンドが利用可能になります。

## ⭐️ カスタム指示の設定

プロジェクト固有のルールやスタイルガイドをCopilotに反映させることができます。

### 設定方法

- プロジェクトのルートディレクトリに `.github/copilot-instructions.md` ファイルを作成します。
- その中に独自のルールや指示を記載します。

### 利用例

- コード規約（キャメルケース、スネークケース、二重引用符・単一引用符の使い分けなど）を反映したい場合
- コメントを日本語で記載させたい場合
- 特定のライブラリやフレームワークを優先的に使用したい場合

**注意**: 外部リソースの参照や、詳細なレベルでの調整など、一部の指示には対応していない場合があります。

## AIモデルの切り替え

Copilotは複数のAIモデルを利用できます。タスクや目的に応じて最適なモデルを選択することで、より良い提案が得られます。

### モデル一覧

- **GPT-4**：高い汎用性と信頼性を持つデフォルトモデルです。幅広いコーディングタスクに適しています。
- **Claude 3.5 Sonnet**：ソフトウェア開発全般のコーディングタスクに優れています。
- **o1-preview**：高度な推論や複雑な問題解決に特化しています。
- **o1-mini**：`o1-preview`の高速バージョンで、迅速な応答が必要な場合に適しています。

## コミットメッセージの自動生成

GitHub Copilotは、コミットメッセージの自動生成もサポートしています。

### 使用方法

1. コミットメッセージ入力欄の右側に表示される星形のアイコンをクリックします。

![コミットメッセージ生成のアイコン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543778/65e125b6-d4c9-195d-ff3c-dae0763e5604.png)

2. Copilotが変更内容を解析し、適切なコミットメッセージを提案します。
3. 提案を確認し、必要に応じて編集してコミットします。

---

## Copilot Editsについて

**Copilot Edits**は、複数のファイルにまたがるコードの変更や生成に対応します。大規模なリファクタリングや一括修正を行う際に便利です。
※後日追記予定

## リファクタリングの提案

### 関数名の提案

1. 関数名を右クリックし、「シンボルの名前変更」を選択します。

![シンボルの名前変更](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543778/e7f42613-682f-2cef-977c-1d20b4261f38.png)

2. 星形のアイコンをクリックすると、Copilotが適切な関数名を提案します。

### チャットでのリファクタリング提案

- コードを選択した状態でチャットを開き、「このコードを最適化して」といった指示を出すと、リファクタリングの提案が得られます。

## まとめ

GitHub Copilotを最大限に活用するためには、以下のポイントに注意しましょう。

- **コードを整理する**: 不要なコードや混乱を避け、クリーンなコードベースを維持します。
- **関連ファイルを開く**: Copilotは開いているファイルを参照します。必要なファイルを開き、無関係なファイルは閉じておきましょう。
- **チャット履歴の管理**: 望む結果が得られない場合は、`/clear` コマンドで新しい会話を始めます。
- **カスタム指示の活用**: プロジェクト固有のルールやスタイルガイドを設定し、より的確な提案を得られるようにします。

GitHub Copilotを使いこなし、開発プロセスをさらに効率化していきましょう。