【イベントレポート】 GitHub Copilotウェビナー

## はじめに
初めまして、エンジニア志望のMinazukiです。普段はバックエンドエンジニアを目指してGoなどで開発をしています。今回は2023年5月31日に開催されたGitHub Copilotウェビナーに参加してきたのでその内容と感想を共有します。

## イベント概要
講演者はPrincipal Solutions Engineer 田中裕一さんでイベント内容は以下の通りでした。
以下の内容の中で興味深いと感じた箇所を抜粋して情報共有していきます。
- GitHub Copilotとは
- GitHub Copilotの機能と利用するメリット
- GitHub Copilotの使い方
- GitHub Copilot Xとは
- Q&A

## GitHub Copilotとは
GitHub Copilotは、GitHubとOpenAIが共同で開発したAI駆動のコード補完ツールです。
使用するコードを書き始めるか、そのコードに何をさせたいかを自然言語のコメントで記述することで、GitHub Copilotから候補を取り入れることができます。コーディングの効率性と速度を向上させることを目的としています。

本記事ではGitHub Copilotの機能に着目したウェビナーだったので、もし詳細なツールの使い方を知りたい方は[こちら](https://docs.github.com/ja/copilot)のリンクからGitHub Copilotの公式ドキュメントを参照できますのでご確認ください。

## GitHub Copilotの機能と利用するメリット
GitHub Copilotを使用パターンとしては主に以下の3つがあります。
  1. コメントからコードを生成
  2. 書いているコードの続きを生成
  3. コードからコメントを生成

以上の機能から、開発者はDocumentの確認の機会が減り、作業が中断されず、集中して開発に取り組むことができたという調査結果があるそうです。詳しい内容については[こちらのサイト](https://github.blog/2022-09-07-research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/)をご確認ください。

また、OSSの規約により使用してはいけないコードをそのまま利用してしまう可能性についてですが、GitHub Copilotは学習モデルからコードを生成するため、学習データをそのままコピーすることはない。また、使用しないようにするfilterのような設定も存在するとのことです。

他にも、自分たちのコードがGitHub Copilotに利用されることを望まない場合、サーバーに送られてもコンテンツは削除され利用できない設定にもできるようです。

## GitHub Copilot X
GitHub Copilot Xは、現在開発中のGitHub Copilotのさまざまな応用バージョンです。GitHub Copilot Xというのはサービスそのものを指すのではなく、これからのAIを活用したソフトウェア開発の将来に対するGitHubがもつビジョンを示したプロジェクト名のようなものです。

GitHub Copilot Xは以下の5つの製品が開発中となっています。

  - Copilot Voice
  GitHub Copilotを音声で操作できる。

  - GitHub Copilot Chat
  エディタ内でチャットが可能であり、コードの解説やユニットテストの生成などが行える。

  - GitHub Copilot for Pull Requests
  Pull Requestに基づく文章の生成や、内容に対する提案を行ってくれる。例えば、テストが必要かどうかなどを提案してくれる。

  - GitHub for Docs
  ドキュメントの内容に基づき、AIがソースコードに基づいて回答を生成する。

  - GitHub Copilot for CLI
  ターミナルでCLIコマンドを提案してくれる。自然言語で質問すると、手間を省いて教えてくれる。これにより、manコマンドなどで調べる必要がなくなる。

## Q&A
> パフォーマンスの観点において、自然言語による違いはありますか？

- 英語と他の言語とでは基本的に英語の方が優れています。また、一般的によく使われているプログラミング言語の方がパフォーマンスが良いです。

- マイナーな言語やフレームワークでは、質に差があるかもしれないが、より重要なのはコンテキストを適切に伝えることです。例えば、白紙の状態から説明を書くよりも、既存のコードをある程度書かれた状態で提案してもらうのがベストです。また、関連するファイルに対して提案をしてくれるため、開いているファイルのコンテキストを適切に提供するためには関連ファイルも開いておくことが重要です。

> 送信するデータをコントロールすることは可能ですか？
- Copilotの個人向けでは、デフォルトで情報を送信する設定になっていますが、オフにすることも可能です。
- 企業版では、デフォルトで情報が破棄されます。
- 送信するファイルの種類を拡張子で設定できます。
- .gitignoreのように除外することは現状できません。


> GitHub Copilotのあまり知られていない機能はありますか？
- IDE上で質問に対して答えてくれる。
質問したい場合は、以下の形式で記述すると説明してくれる。
```
Q: <質問内容>
A: <質問に対する回答>
```

> GitHub Copilotの魅力
- 他のAIサービスよりも、提案が速く開発者体験の向上が期待できます。

> GitHub Copilotの提案を1つしかしてくれないが、複数の提案を受けるにはどうすればいいですか？
- GitHub Copilotはデフォルトでは1つの提案しか表示されないませんが、vscodeのコマンドで`GitHub Copilot: Open Completions Panel`を使用すると最大10個の提案が表示されます。

以下は私が個人的にこの機能を使ってときの画像です。左は自分が記述したコード、右はGitHub Copilotが出力したコードです。`synthesizing 10/10 solutions`となっており、10個の提案をしてくれています。

![suggest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983726/804bec27-6c9a-d621-159b-2eb25d56f189.png)

## Get Started
手軽に使用したい方は[GitHub Copilotのデモサイト](https://resources.github.com/copilot-demo/)を使うのがおすすめです。
このサイトはクラウド開発環境であるGitHub Codespacesを利用しており、GitHubのアカウントがあれば簡単に利用できますので、興味がある方はお試しください。

また、GitHub CopilotなどをつかったAIネイティブ開発におけるベストプラクティスのまとめられた[ドキュメント](https://www.ai-native.dev/docs/v/ja/)が紹介されていましたので共有いたします。20分程度で読める簡潔で分かりやすいドキュメントですので、興味のある方は参照してください。

## 最後に
これまでChatGPTは使用することはありましたが、GitHub Copilotは利用したことがなかったので有益な情報が得られて良かったと思います。これから先、AIの使用機会は増えていくことになると思いますので、少しづつ慣れていきたいと思います。