Github Copilotの基本的な使い方と使用例

# はじめに
Github Copilot、使っていますか？
弊社ではGithub Copilotを全社導入しており、希望者は無償で使うことができます！
私もかれこれ1年ほど使い続けてきました。
そこで、基本的な使い方の備忘録と、具体的にどう使えばいいかを使用例を用いてまとめてみました！
よろしくお願いします。

# Github Copilotとは？
GithubDocsには以下のように記述されています

>GitHub Copilot は AI コーディング アシスタントであり、コードをより速く楽に記述できるため、問題解決とコラボレーションにより多くのエネルギーを集中できます。
>GitHub Copilot は、開発者の生産性を向上させ、ソフトウェア開発のペースを加速することが実証されています。 

https://docs.github.com/ja/copilot/about-github-copilot/what-is-github-copilot

Github Copilotは世界中で利用されているAI開発ツールであり、アプリケーションを作る時の様々な場面で活躍します。

# Github Copilotの使い方
## コード補完機能について
コード補完機能とは、コードを書き始めた時や、書きたいコードをコメントで記述した時に、名称や前後関係から判断してGithub Copilotが自動でコードを生成・提示をしてくれる機能です。

提案内容を開発者が判断して受け入れ可否を判断できます。

この機能を使う上でのポイントは**意味のあるメソッド名や変数名をつけること**です。

### コード補完のショートカット

| 操作内容 | ショートカットコマンド |
|:---------------|:------------|
| 補完案を受け入れる       | `Tab`        |
| 補完案を拒否する    | `Esc`      | 
| 次の補完案を表示する       | `Option` + `]` |
| 前の補完案を表示する         | `Option` + `[`         |
| 補完案に示された単語ごとに受け入れる         | `Ctrl` + `→`         |
| 複数の補完案を新しいタブに表示する         | `Ctrl` + `Enter`         |

## Copilot Chatについて
Copilot Chatの使い方についてです。
チャット欄にプロンプトを打つことで、Copilotの応答を受け取ることができます。
ファイルの特定の行を選択してからチャットを送信することで、選択部分の内容を参照させての回答を得ることもできます。

### ChatのUIについて
Chatを利用するためのUIは３種類あります。
- Chat View
- Quick chat
- Inline chat

#### Chat View
VSCodeにCopilotを導入すると、左のメニューバーに「チャット」が現れます。
このチャットをクリックするか、`Control` + `Command` + `i` を押すことでチャットビューが開きます。

![スクリーンショット 2024-12-19 20.54.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476797/a931d106-bb04-6f08-8812-d545f44182a0.png)

#### Quick chat
VSCodeウィンドウ上部に表示されるポップアップからチャットをすることができます。
左のメニューバーをチャットにしたくない場合や、簡単なチャットを開始する場合に使用することができます。
`Shift` + `Command` + `i` を押すことでチャットビューが開きます。

![スクリーンショット 2024-12-20 16.47.46（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476797/ec5a3793-5786-f25c-4242-39606d8b9bf1.png)

#### Inline chat
コード内からチャットをすることができます。
`Command` + `i` を押すことでどのファイル内であってもチャットビューが開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476797/68a9b561-6fed-ca82-ab72-1b2ad0e34ff4.png)


### Chat Participantsについて

Copilot ChatにはChat Participants（チャット参加者）が存在します。
それぞれの設定対象と役立つ使い所は以下の表の通りです。

| Participants |  |
|:---------------|:------------|
| `@workspace`       | 対象：ワークスペース内のコードに関するコンテキスト<br>使い所：「プロジェクトの構造」「コードの相互関係」「デザインパターン」        |
| `@vscode`    | 対象：VSCodeのコマンドと機能に関するコンテキスト<br>使い所：「VSCodeのコマンド」「VSCodeのカスタマイズ」      | 
| `@terminal`       | 対象：VSCodeのターミナルシェルとその内容<br>使い所：「ターミナルコマンドの作成」「デバックに関する回答」|
| `@azure`         | 対象：Azureサービスに関するコンテキスト<br>使い所：「Azureサービスの使用方法」「Azureサービスのデプロイ方法」<br> ＊パグリックプレビュー段階         |

チャット欄に「@」を打つと、使用可能なチャット参加者を確認することができます。

### スラッシュコマンドについて
スラッシュコマンドを使うことで、Copilotに指示を的確に伝えることができ、プロンプトの記述量を抑えることができます。スラッシュコマンドの使用例は以下の表の通りです。

#### `@workspace`に対するスラッシュコマンド
| コマンド | 説明 |
|:-----------|:------------|
| `@workspace /explain` or `/explain`      | 選択したコードの機能を説明する|
| `@workspace /fix` or `/fix`           | 選択したコードのバグの修正提案をする         |
| `@workspace /new` or `/new`           | 新しいプロジェクトを作成する         |
| `@workspace /tests` or `/tests` | 選択したコードのユニットテストを作成する         |
| `@workspace /newNotebook` or `/newNotebook`  | 新しいJupyter Notebookを作成する     |

#### `@terminal`に対するスラッシュコマンド
| コマンド | 説明 |
|:-----------|:------------|
| `@terminal /explain` or `/explain`      | 選択したターミナルコマンドを説明する|

#### `@vscode`に対するスラッシュコマンド
| コマンド | 説明 |
|:-----------|:------------|
| `@vscode /search` or `/search`      | VS Codeの検索機能でワークスペース内のコードやファイルを検索する|

#### その他スラッシュコマンド
| コマンド | 説明 |
|:---------------|:------------|
| `/clear`       | 新しいチャットを開始する        |
| `/help`    | Github Copilotの使い方に関するヘルプを見る      | 

# Github Copilotの使用例

Github Copilotはアプリケーションの開発のあらゆる画面で使うことができます。
それぞれの場面での使用例を示します。

### コードプロジェクトの作成
```
@workspace /new xxxxを利用したウェブアプリケーションを作成します。
プロジェクトの雛形を作成してください。Javaのパッケージはxxxxを使用してください。
READMEとMITライセンスも作成してください。
```
とチャットを打つことでIDEを通してファイルやディレクトリを作成することができます

### テストコードの作成
テストコードを書いて欲しいアプリケーションコード部分をカーソルで選択し、
```
/test
```
とチャットを打つことでテストコードが生成されます。
このテストコードは既存のアプリケーションロジックに対して生成されます。
モック・テストバリデーションの指定も可能です。

### テストデータの作成
```
テストデータのバリデーションを考えてください
```
とチャットを打つことでテストデータが生成されます。
データのバリデーションパターンを考慮して作成されます。また、データバリデーションのパターンを指定することで様々なバリデーションに対応することもできます。

### 構成情報ファイルの作成
```
Terraformを使用してアプリケーションをAzure App Serviceにデプロイするテンプレートを作成してください。
```
このようなチャットを打つことで、Terraformのテンプレートを生成することができます。
他にも、コードの依存関係を生成することも可能です。

### コードドキュメントの生成
```
xxxの設計内容をマークダウン形式でまとめてください
```
このようなチャットを打つことで、ドキュメントを作成することができます。
クラス責務の概要・変数やメソッドなどの解説・該当クラスの依存関係が記述されるほか、ドキュメントに追加したい項目やレイアウトの指定などの要求も可能です。

### CLIコマンドの生成
```
@terminal Gitにpushしたい
```
このようなチャットを打つことで、内容に対応したCLIコマンドを生成することができます。

# おわりに
Github Copilotを導入する前と導入した後では開発スピードがだいぶ速くなったのですが、それでも今回調べていて使いきれていない機能がたくさんありました。

今後もうまくCopilotを使用して、どんどん開発スピードを上げていきたいと思います！