2021年にリリースされたGithub CopilotはChatGPTの登場よりも早く提供がスタートしましたが、LLMほど話題に上がることは少なかった気がします。事実、自分の周りでもいまだに使ったことがない方や最近導入してみたという話をよく聞きます。が、GPT4がリリースされ、精度が上がった事もあって、導入する企業が増えてきている印象です。
今回はそんなGithub Copilotと基本的な使い方を解説していきます。
なお基本的な使い方は知ってるよ!という方は以下の記事も参考にしてみてください。
中級編:Github Copilot Labsやベータ版のCopilot Chatなどを紹介
上級編:Copilotの仕組みを最大限に活用したAI駆動開発の紹介
[ 執筆中 ]
概要
現状、Githubでは個人向けとビジネス向けの2つのプランが用意されています。
個人とビジネスでは以下のような違いがあります。
ㅤ | Copilot for Individuals | Copilot for Business |
価格 | $10 per month/$100 per year | $19 per user per month |
GitHubアカウントの種類 | 個人アカウント | 組織または企業アカウント |
テレメトリ | ✓(あり) | ✕(なし) |
公開コードにマッチするブロックの提案 | ✓(あり) | ✓(あり) |
エディタに直接統合 | ✓(あり) | ✓(あり) |
複数行関数の提案 | ✓(あり) | ✓(あり) |
組織全体のポリシー管理 | ✕(なし) | ✓(あり) |
自己署名証明書を使用したVPNプロキシサポート | ✕(なし) | ✓(あり) |
大きな違いはポリシー管理とVPNプロキシへのサポートでしょうか。またテレメトリーとはCopilot改善の為の情報提供するかの設定です。企業の情報漏洩に繋がる為、ビジネスアカウントでは情報は送信されません。ただ個人でも別途送信しない設定にする事は可能です。
個人とビジネスが重複した場合
個人でGithub Copilotを契約してる場合に会社などからビジネス版のCopilotが提供されると自動的にビジネス契約で上書きされます。その際には個人契約は強制的に解除となり、重複した支払いは返金されるようです。
対応エディタ
Github Copilotの使用はお使いのIDEに依存します。現状では、以下のエディタをサポートしています。
・Visual Studio Code ・Visual Studio ・JetBrains ・Neovim
本記事ではM1 MacでVisual Studio Codeを使うケースを想定してお話しします。それ以外の上記エディタをお使いの方は以下のリンクを参考にしてみてください。
ベースとなる大規模言語モデル Codex
Github CopilotもChatGPTと同じようにその裏ではOpenAIが提供している大規模言語モデルが動いています。が、ChatGPTの裏で動いているGPT-4やGPT-3.5-turboではなく、Codexと呼ばれるコーディングを補助する目的で学習させた大規模言語モデルが動いています。GPTモデルとは若干精度が異なるのでその点注意してください。
ただ近日中にGPT-4にリプレイスされる予定だそうで、そうなるとChatGPTと変わらない精度で対話できるようになりそうです。
Github Copilotの導入
- github copilotのライセンスを購入
- お使いのエディタでGithub Copilotのプラグインをインストール
GithubのアカウントからSettings > Copilotと進むとライセンス購入のページが表示されます。
あとはお使いのエディタのプラグインでGithub Copilotをインストールしましょう
エディタでGithub Accountにサインインしていない場合はSettingsからサインインしましょう
Copilotプラグインの他に「Gihtub Copilot Labs」、「Github Copilot Nightly」というプラグインも存在しますが、これらはCopilot機能の拡張ツールです。詳しくは別記事で解説します。
Copilot活用 初級
ショートカットキー
Action | Shortcut | Command name |
インライン提案を受け入れる | Tab | editor.action.inlineSuggest.commit |
インライン提案を拒否する | Esc | editor.action.inlineSuggest.hide |
次のインライン提案を表示する | Option (⌥)+] | editor.action.inlineSuggest.showNext |
前のインライン提案を表示する | Option (⌥)+[ | editor.action.inlineSuggest.showPrevious |
インライン提案をトリガーする | Option (⌥)+\ | editor.action.inlineSuggest.trigger |
GitHub Copilotを別ウィンドウで開く (追加の提案) | Ctrl+Return | github.copilot.generate |
GitHub Copilotのオン/オフを切り替え | デフォルトショートカットなし | github.copilot.toggleCopilot |
基本的な使い方
インライン提案
Github Copilotをオンにしている場合、タイピングを始めるとこちらの意図を汲み取り、コードが自動で提案されます。提案コードはグレーで記述され、提案を受け入れると書き込まれ、拒否すると消えます。
複数の提案を見る
ファイル上では1つのコードだけが提案されますが、裏では複数の提案コードが用意されています。異なる提案を見たい場合は
Option (⌥)+]
で1つ1つインライン上で見ていくか、Ctrl+Return
でまとめて別ウィンドウで見ることができます。再提案させる
提案を拒否するとコードは提案されなくなります。再度カーソル位置で提案して欲しい場合は
Option (⌥)+\
で強制的に提案をトリガーしましょう。CopilotのON/OFF
Copilot自体を止めたい場合は右下のCopilotアイコンをクリックして無効化してください。またデフォルトでは設定されていませんが、ショートカットキーを割り振る事でオン・オフをワンタッチで切り替えることも可能です。
ショートカットキーの設定
ショートカットキーの割り当てはエディタのショートカットキー設定から変更可能です。
コメントでのプロンプト
自動で行われる提案以外にもコメントアウトにプロンプトを記述する事でコードを生成することも可能です。
ケース1:コードを生成させる
メソッドやクラスを書き始める前にこれからどういったコードを書きたいのかをコメントします。すると少し時間がかかりますが、丸っとそのコメントを汲み取ったコードが提案されます。提案されるコードの精度はコメントで提供したプロンプトに左右される為、プロンプト力が試されます。
ケース2:既存コードに対して質問する (Q&Aプロンプト)
次に既存のコードの先頭にコードに関する質問文をコメントすることでQ&A方式で答えをコメントしてくれます。最もイメージしやすいのは既存コードの解説を質問する事でしょうか。
CopilotとChatGPT、どちらを使う?
開発のサポートをChatGPTでしているという方も多いかと思います。 ChatGPTとvscode上で対話できるプラグインも、非公式ですが、存在します。
その場合、CopilotとChatGPTのどちらを使った方が良いのか迷う時もあると思います。2つには機能や精度に明確な違いがあるので、開発の段階によってうまく使い分けるのが良いと思います。
CopilotとChatGPTは3つの大きな違いが存在します。
1. 扱える文脈の深さ・広さ
前述の通り、Github Copilotのベースとなる大規模言語モデルはCodexというモデルです。こちらはGPT-3というモデルをベースに更にプログラミングに特化させた学習をしています。一方、ChatGPTではより進んだGPT-3.5-turboもしくはGPT4をベースに動作しています。
Copilotはプログラミングに特化していますが、頭の良さではChatGPTに敵いません。その為、より深い文脈のやり取りをしたい場合はChatGPTの方が向いています。
2. レスポンス速度
ベースとなる言語モデルに関連して変化するのがレスポンス速度です。より最新のGPTモデルではパラメータの数が増えている為、レスポンスの速度がCodexに比べ、相対的に遅くなります。その為、Copilotの方がコードを提案するスピードは圧倒的に早いです。
3. 開いているファイルのコードを認知するか
またGithub Copilotの1番の特徴は開いてるファイルのコードを認知することです。これによりプロジェクトの他ファイルで定義した関数やクラスを参照したり、プロジェクトのコード規約に沿ったコードの提案を行なってくれます。この機能はChatGPTでは提供できません。
以上の違いから個人的には以下の様な使い分けで使うのが良いかと思います。
Copilot:具体的に生成したいコードのイメージがある場合。コーディングなど下流の工程。
ChatGPT:どういったクラス、関数を書くべきか明確でない場合。設計など上流の工程。
まとめ:まずコメントを書こう!
コードのサジェスト機能だけでも充分に恩恵を受けることが出来ますが、場合によってはピントのズレたサジェストも多いと思います。サジェスト機能だけを使うのも良いですが、せっかくなら使いこなしたいところ。まず「コメントを書いてから実装する」癖を付けましょう。こうすることでサジェストの精度も上がり、Copilotに振り回されるのではなく、活用している感が上がります。
AIはあくまでもツール。うまく使いこなさなければ邪魔でさえあります。せっかく使うのであればその機能をフルで引き出し、コーディング業務の効率を上げていきましょう✊