GitHub Copilot Tips

# はじめに
GitHub Copilot を利用し初めて 3ヶ月ほどが経ったので、感想やノウハウを残しておきます。

# 概要
GitHub Copilotは、GitHubが提供する「AIペアプログラマー」です。
コーディング時に、オートコンプリートスタイルで候補をサジェストしてくれます。
  
GitHub、OpenAI、Microsoftによって開発された生成AIモデルを利用しています。

https://docs.github.com/ja/copilot/using-github-copilot/getting-started-with-github-copilot

# 前提
明記されていない場合は Visual Studio Code + Mac を前提とします。
他のIDEを利用する場合は、適宜読み替えてください。


# セットアップ手順 (VSCode)
別記事を書いているので、そちらをご参照ください。
https://qiita.com/grhg/items/13c40760a79b3983eeee

# 基本的な使い方
## インテリセンス形式での利用
自然にコーディングしていれば、勝手にサジェストしてくれるため、特別な操作は不要です。
普通にコーディングしていて、サジェストを受け入れたいときに「タブ」キーを押すだけでOKです。
ただし、サジェストを最大限に活用するためのショートカットキーを覚えるとさらに便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294382/3b114c34-b99a-b56f-5751-0b72c5f7ddd8.png)

↓ タブキーを押すとサジェストが採用される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294382/03d87ed8-2069-2578-9362-9d363e7b8b62.png)

その他のショートカット一覧
https://docs.github.com/ja/copilot/configuring-github-copilot/configuring-github-copilot-in-your-environment?tool=vscode#github-copilot-%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88

`Ctrl + Return` 「GitHub Copilot を開く (別のペインに追加の候補)」は候補の一覧を表示することができるため、複数候補を俯瞰してみたいときは便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294382/4c59bfd3-522a-fcbc-048f-060e333ed50c.png)

## クイック QA 機能
これは公式の機能ではなく、使い方の工夫となりますが、
```
q: 質問内容
```
を入力すると簡易的な質問ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294382/9e082f7b-15ac-df33-8c4c-77d73592310a.png)

# テクニック・Tips
公式ブログで紹介されているテクニックがとても参考になります。
ここではいくつか代表的なものを紹介します。
https://github.blog/2023-06-20-how-to-write-better-prompts-for-github-copilot/

## 的確なコメントを書く
関数や処理のコメントをきちんと書くと、それに対する機能を作ってくれます。
- 要件を列挙する
- Input/Outputを明確にする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294382/11055aab-a4f0-3c7c-196f-5aece1bb2a9c.png)

## サンプルを与える
期待する出力値のサンプルを与えると、より正確なレスポンスを得られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294382/2686c8fc-5f3b-2f67-9a71-610073a60268.png)

## 関連タブを開いておく
GitHub Copilot はサジェストする際に以下の情報を使用します。
- GitHub Public Repository に公開されているすべてのデータ
- 現在編集中のファイルとプロジェクト内の関連ファイル

:::note info
ワークスペース外でも関連ファイルを開いておくと参照してくれます
:::

## コーディングのベストプラクティスに従う
### コーディングスタイルを揃える
コードの書き方がプロジェクト内で揃っていると、サジェストが安定します。
- CamelCase で書いていると、サジェストも CamelCase になる
- snake_case なら サジェストも snake_case になる

### 適切な関数名をつける
内容が推測できるよう名前をつけると、サジェストがされやすくなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294382/8d14d3aa-9d3f-ea6e-46e1-2cf0b1b71a55.png)

推測が困難な名前をつけると、期待した結果が得られなかったり、 `Code goes here.` のような無意味な内容になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3294382/cc03eb6b-ee9f-7f7d-15e9-bb10696c49e2.png)

# 現時点での感想
- インテリセンスとして機能するため、何も考えなくても恩恵に預かれる
    - 普段通りにコーディングしていれば、勝手にサジェストしてくれる
    - 利用するためにプロンプトを考えたりする必要がない
- サジェストに適切なものが多い
    - 途中まで書いた時点で、書こうとしていた続きを提案してくれる
    - 日本語コメントなども適切にサジェストしてくれる
    - 1年ほど前、Amazon CodeWhisperer を試したときは邪魔なサジェストが多かった印象だが、GitHub Copilot ではそういったケースが少ない
        - ※ 改善されている可能性あり
- ビギナーのコーディング力向上にも使えそう
    - ベストプラクティスに従うほど適切なサジェストがされやすくなるので、自然と身につく
    - 関数や処理を書くときに、外部仕様から考える癖がつく

# 今後への期待
GitHub Copilot単体だと、良くも悪くも「優秀なインテリセンス」なので、もっと劇的な変化があると嬉しいです。
Copilot for Pull Requests など、が実用化できれば、画期的な業務改善に繋がりそうです。