GitHub Copilot豆知識

# はじめに
`GitHub Copilot`はなんとなくわかるしなんとなく使えているけど、`Copilot`を使うメリットや、ユースケースの例、使用上の注意点など、ちゃんと他の人に説明しようと思ったときにできないことに気が付いたため、`GitHub Copilot`に関する情報を備忘録としてこの記事に簡単にまとめます。

# GitHub Copilotとは
`GitHub Copilot`を一言で言うと、「AIペアプログラマー」です。より速く、より少ない作業でコードを記述するのに役立つ、世界初の大規模なAI開発者用ツールであり、開発者がより短時間でコードを作成し、より満足のいく作業に集中できるようにすることで、組織の生産性、セキュリティ、充実感を高めることに重点を置いています。`GitHub Copilot`はコメントとコードからコンテキストを引き出して、個々の行および関数全体を即座に提案するため、開発者は使用するコードを書き始めるか、そのコードに何をさせたいかを自然言語のコメントで記述することで、候補を取り入れることができます。

# OpenAI Codex
`GitHub Copilot`には、`OpenAI`によって作成されたAIシステムである`OpenAI Codex`が搭載されています。`OpenAI Codex`はコード生成において、`GPT-3`よりも一部優れています。

# GitHubとMicrosoftの最近の調査結果
調査結果により、開発者が`GitHub Copilot`を使うことで以下のことが判明しました。
- 新しいコードの「46%」がAIによって記述されるようになった
- 開発者の全体的な生産性が「55%」速くなった
- 開発者の「74%」が満足のいく作業に集中できるようになったと感じている
- 「90%」近くの開発者がタスクをより短い時間で終わらせることができた
- 開発者の「73%」が、長い時間集中力を保つのに役立つと回答
- 「87%」が反復的なタスクに取り組んでいる際に気力を保つのに役立ったと回答

# Visual Studio Codeを使ったGitHub Copilotの利用
`Visual Studio Code`で`GitHub Copilot`を利用するために、いくつかのショートカットが用意されています。

## 候補の表示
- 候補を受け入れるには、`Tab`キーを押す
- すべての候補を拒否するには、`Esc`キーを押す

(ちなみに、`Copilot`は約150文字のコード候補を出します。)

## 代替候補の表示
|OS|次の候補を表示|前の候補を表示|
|---|---|---|
|macOS|Option (⌥) または Alt+]|Option (⌥) または Alt+[|
|Windows|Alt+]|Alt+[|
|Linux|Alt+]|Alt+[|

## 複数の候補を表示
`Ctrl`+`Enter`キーを押します。
(候補を受け入れるには、候補の上にある`Accept Solution`を押す。)

## コメントからコード候補を生成
コメントを入力するだけで、関数の実装の候補が表示されます。

# GitHub Copilotが得意な言語
`Python`、`JavaScript`、`TypeScript`、`Ruby`、`Go`、`C#`、`C++`、です。

# GitHub Copilotのトレーニングデータ
パブリックリポジトリに表示されるすべて言語でトレーニングされています。

# コードのセキュリティと品質を確保
無数のオープンソースコードから構築されたモデルから提案されるため、安全でないコーディングパターン、バグ、古いAPIが含まれている可能性があります。提案を受け入れるのは開発者自身の責任ですが、`GitHub Actions`、`Dependabot`、`CodeQL`、`code scanning`など、コード品質を監視および改善できる多数の機能が用意されています。

# GitHub Copilot for BusinessとGitHub Copilot for Individualsの比較
`GitHub Copilot for Individuals`ではできないが、`GitHub Copilot for Business`ではできることは以下です。
- コードスニペットと利用統計情報のデータ保持期間がゼロ
- `Organization`全体にわたるポリシー管理
- 自己署名証明書によるVPNプロキシのサポート

ちなみに、`for Individual`の価格は1か月あたり10ドル(1年で100ドル)で、`for Business`は1ユーザー1か月あたり19ドルです。

# ログファイルの表示と収集
1. `Visual Studio Code`の[表示]メニューを開きます。
1. [出力]をクリックします。
1. [出力ビュー]ペインの右側で、ドロップダウンメニューから[`GitHub Copilot`]を選びます。

# ネットワーク接続診断ログの表示
1. コマンドパレットから「`Diagnostics`」と入力し、一覧から[`GitHub Copilot:診断の収集`]を選びます。
1. [到達可能性]のセクションを確認して、`GitHub Copilot`が実際に必要なサービスにアクセスできるかどうかを判断します。

# GitHub Copilot X
`GitHub Copilot X`とは、`OpenAI`の最新の`GPT-4`モデルを採用する、AIを利用したソフトウェア開発の将来のビジョンです。

# GitHub Copilot Xから期待できる今後の機能
- エディターでの`ChatGPT`のような体験
- `pull request`用の`Copilot`
- ドキュメントについてのAIによって生成された回答
- コマンドラインインターフェイス(`CLI`)用の`Copilot`

# GitHub Copilot Chatとは
`GitHub Copilot`と対話できるチャットインターフェイスであり、サポートされている`IDE`内で直接コード関連の質問をすると回答を受け取ることができます。チャットインターフェイスを使用すると、ドキュメントに移動したり、オンラインフォーラムを検索したりする必要なく、コーディング情報とサポートにアクセスできます。現在は`Visual Studio Code`と`Visual Studio`でサポートされています。

# GitHub Copilot Chatでできること
単体テストケースの作成、コードの説明、コード修正の提案、コードに関する質問やヘルプ、などができます。

# GitHub Copilot Chatの制限
- パブリックリポジトリの表現が少ない言語は、`Copilot Chat`での支援がより困難になります。
- `Copilot Chat`では、書き込まれるコードのコンテキストに基づいてのみコードを提案できるため、より大きな設計やアーキテクチャの問題を特定できない場合があります。

# パブリックコードとの一致
`Copilot Chat`は、確率論的な方法で新しいコードを生成できます。`Copilot Chat`は、`GitHub`リポジトリのパブリックコードとの一致をブロックするフィルターを利用する上、トレーニングセット内のコードと一致するコードが生成される可能性も低いですが、`Copilot Chat`候補には、トレーニングセット内のコードに一致するいくつかのコードスニペットが含まれている場合があります。

# 参考文献
「GitHub Copilot の概要」

https://docs.github.com/ja/copilot/getting-started-with-github-copilot#seeing-alternative-suggestions

「GitHub Copilot for Individualsについて」

https://docs.github.com/ja/copilot/overview-of-github-copilot/about-github-copilot-for-individuals

「GitHub Copilot for Business の概要」

https://learn.microsoft.com/ja-jp/training/modules/introduction-to-github-copilot-for-business/

「GitHub Copilot の概要」

https://learn.microsoft.com/ja-jp/training/modules/introduction-to-github-copilot/

# おわりに
簡単ですが、`GitHub Copilot`に関するちょっとした情報をまとめました。個人的には`Copilot`による候補の次を表示できることに驚きましたし、実用的だと感じたので積極的に使っていきたいです。なんとなく使っていた`GitHub Copilot`を他の人に簡単に説明できるくらいにはなったのではと思います。