GitHub Copilot入門：コーディング補助とチャット機能の利用用途と使い分け

# はじめに
Copilotは、コードの開発を支援するツールです。  
入力中のコーディングのアシストを行ってくれる機能やコーディング中の疑問を質問して回答してくれるよう機能を備えています。
Copilotでは大枠としてコーディングのアシスト機能とチャット機能の2種類があると考えており、自分なりにどのように使っているかという内容を所感を交えて記載しています。

---

## 1. コーディングのアシスト機能（コーディング中の予測補完）

### 特徴
- コーディング中にCopilotがコードを予測し、候補を表示します。  
  表示されたコードを `Tab` キーで確定させるだけで利用可能です。

  ![コード予測のスクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953583/bb3c5245-d9e1-b989-ff90-b6415ba77029.png)
  ![候補選択のスクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953583/a5761d38-4694-fd6e-8e57-38a91615b4f0.png)

---

### 得意なこと
1. **コメントから単純なコードを自動生成すること**  
   1〜2行のコメントを書くと、それに対応する簡単なコードを自動生成してくれます。  
   コメントとコードを書く流れ作業が効率化します。

2. **処理内容に沿ったコメントを残すこと**  
   コメントのタグを追加するだけで、処理に合ったコメントを提案してくれます。
   うっかり処理内容と関係のないコメントを書いてしまう事故が減るかも。

3. **コーディング補助**  
   開発中、コードをタイピングしているだけで自動的に予測が提示されます。  
   タイピングミスの防止にも役立ちます。

---

### 不得意なこと
1. **作成済みコードの改善を任せること**  
   書き始めてるコードに対する予測機能である性質上、コードの修正や改善を任せられるものではありません。  
   その場合は後述する *Copilot Chat* を活用する方が効果的です。

2. **コード生成をなるべくCopilotに任せること**  
   Copilotの予測生成は書き始めたコードに対して予測して提案してくれるため、
   言語化した内容をコードに書き起こす作業をCopilotの力を極力借りて行いたい場合は、 *Copilot Chat* の利用が適しています。

---

## 2. Copilot Chatの特徴

### 特徴
- **コードやターミナル、VSCodeに関する質問が可能**
  ChatGPT のコーディング特化版といえるツールです。  
  インラインチャットを使うことで、コードから離れることなく質問が可能です。

**インラインチャットの使用例**
質問：
  ![Copilot Chat のスクリーンショット2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953583/b1c2050a-ff2b-981f-1335-dfaad6a73e0c.png)  
  ![Copilot Chat のスクリーンショット3](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953583/232be19c-d263-ca13-f5d8-9a66a96e8ce9.png)

**チャットウインドウの使用例**
![スクリーンショット 2024-11-19 17.45.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953583/295bb8e1-b2ab-513d-a36a-1acbc188ef70.png)

### 得意なこと
1. **質問に対する具体的な回答**  
   開発中のコードを自動的に読み取り、適切な回答を生成します。  
   エラー解決時も、該当コードを貼り付けるだけで解決策を提示してくれます。

2. **コードの軽微な修正**  
   インラインチャットを利用して命令を入力するだけで、修正作業を補助してくれます。
   修正例：
![スクリーンショット 2024-11-19 17.20.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953583/159dde58-412d-d745-c36c-d09ada3d0115.png)

3. **頭の中でイメージしている処理を実際に動作する処理に落とし込むこと**  
   「何を実装したいか」を伝えるだけで、その内容に適した処理を生成してくれます。  
   すでに処理内容は決まっているけど、どのように実現したらいいか迷った時にオススメです。
![スクリーンショット 2024-11-20 9.01.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953583/fa29014e-feda-4ad6-5b7d-481ffacd1670.png)


---

### 不得意なこと
1. **1回のプロンプトで完璧に動くコードを生成すること**  
   1回で長文で複雑な質問をして、一発で実現したいコードを出力させようとするのは経験上難しいです。
   実現したい処理の一部に関する質問などの簡単な質問を繰り返して、提示されたコードに対して追加で質問や指示をして段階的にコードに肉付けをする意識で使用すると早く目的のコードが生成できると使用していて思いました。
2. **自分で手を動かしてしまった方が早い軽微な追記修正**  
   簡易なコードの追記などの場合は、Copilot Chatを使わず上述した予測保管してくれる機能を使用して直接コードを書いて行った方が早いこともあります。
---
## 使っていて感じたことなど
Copilotを使いはじめて気付いたこと、感じたことを以下に共有します。
1. **長文でいろんな命令を入力しても、実装して貰えるという訳ではない**  
   自分が初めてCopilotを触った時は、単体テストのコードを書く時に使用しました。
   そのときは、実装したい内容や制約を予め日本語で全て書き起こしてチャットを投げれば、Copilotがあとはよしなに全て作成してくれると思い込んで使用していました。
   しかし、実際に1回のチャットでたくさんの指示をするほど、抜け漏れが発生したりして思った通りの結果が得られないことが多かったです。
   チャット機能を利用する時は、簡単な指示内容を繰り返して段階的にコードに肉付けしていく意識が大事だと今では感じています。
2.  **Copilot Chatのコマンドは覚えなくても使える。知っているとたまに得する。** 
    プロンプトを実行する時にコマンドが存在するのですが、チャット側で意図がわかる質問の仕方をすれば意外と簡単に回答を出してくれます。
    チャットしているとたまに処理内容と直接関係のないサンプルコードで提示してくることがあるので、そういった場合に`@workspace`コマンドを使ってローカルのソースコードの話だと認識させたりできることもあるので、余力で覚えておくと良いこともあったりします。
    自分が主に使用しているのは以下の4コマンドだけですが、調べると様々な種類がでてきます。
   `@workspace`：ローカルのソースコードを基にした回答がほしいとき
   `@terminal`：ターミナル関連の質問に回答がほしいとき
   `@vscode`：VSCode関連の質問に回答がほしいとき
   `/fix`：コード修正を行って欲しいとき
3.  **コードが書けない、読めないことで悩むなら、GithubCopilotの導入はオススメしたい**
    自分自身コードを見てもさっぱり分からないときは先輩に相談にしていましたが、準備などに時間が取られたり、質問にいけるか様子を伺ったり、質問しに行っても前提の擦り合わせに時間が取られてしまいがちでした。
    そこで一時期ChatGPTを使うようにしていたのですが、チャットにソースコードを貼り付ける手間がかかったり、外部ファイルを参照していたりすると参照先のコードも合わせて貼り付けないといけないこともあり手間も時間も掛かり困ることが多かったです。（参照先のコード片っ端から全文コピぺするのも色々な意味で良くなさそうですし。）
    その経験を踏まえてCopilotを使用していますが、ソースコードの内容を事前にある程度理解した上で質問内容に沿った回答を出してくれる傾向にあるため、より短時間で直接的な解決方法が出てくる印象を抱いています。
    ベテランの方でもエラーなどに当たった時などにエラー文を貼るだけで解決方法を提示してくれたりするので、詰まる時間の短縮にもなるためオススメです。