Github Copilot活用 【初級編】
Github Copilot活用 【初級編】

Github Copilot活用 【初級編】

Tags
AI
Software Development
Published
June 3, 2023
Author
heyhey1028
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の導入

  1. github copilotのライセンスを購入
  1. お使いのエディタでGithub Copilotのプラグインをインストール
 
GithubのアカウントからSettings > Copilotと進むとライセンス購入のページが表示されます。
notion image
あとはお使いのエディタのプラグインでGithub Copilotをインストールしましょう
notion image
エディタでGithub Accountにサインインしていない場合はSettingsからサインインしましょう
notion image
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をオンにしている場合、タイピングを始めるとこちらの意図を汲み取り、コードが自動で提案されます。提案コードはグレーで記述され、提案を受け入れると書き込まれ、拒否すると消えます。
notion image

複数の提案を見る

ファイル上では1つのコードだけが提案されますが、裏では複数の提案コードが用意されています。異なる提案を見たい場合はOption (⌥)+]で1つ1つインライン上で見ていくか、Ctrl+Returnでまとめて別ウィンドウで見ることができます。
Ctrl+Enterで別ウィンドウを表示。提案をまとめて表示
Ctrl+Enterで別ウィンドウを表示。提案をまとめて表示

再提案させる

提案を拒否するとコードは提案されなくなります。再度カーソル位置で提案して欲しい場合はOption (⌥)+\で強制的に提案をトリガーしましょう。
自動入力をEscで拒否した後に、Option+\で提案をトリガー
自動入力をEscで拒否した後に、Option+\で提案をトリガー

CopilotのON/OFF

Copilot自体を止めたい場合は右下のCopilotアイコンをクリックして無効化してください。またデフォルトでは設定されていませんが、ショートカットキーを割り振る事でオン・オフをワンタッチで切り替えることも可能です。
notion image

ショートカットキーの設定

ショートカットキーの割り当てはエディタのショートカットキー設定から変更可能です。
notion image

コメントでのプロンプト

自動で行われる提案以外にもコメントアウトにプロンプトを記述する事でコードを生成することも可能です。

ケース1:コードを生成させる

メソッドやクラスを書き始める前にこれからどういったコードを書きたいのかをコメントします。すると少し時間がかかりますが、丸っとそのコメントを汲み取ったコードが提案されます。提案されるコードの精度はコメントで提供したプロンプトに左右される為、プロンプト力が試されます。
ex. FizzBuzz問題を解く関数を書くように指示
ex. FizzBuzz問題を解く関数を書くように指示

ケース2:既存コードに対して質問する (Q&Aプロンプト)

次に既存のコードの先頭にコードに関する質問文をコメントすることでQ&A方式で答えをコメントしてくれます。最もイメージしやすいのは既存コードの解説を質問する事でしょうか。
ex. 逆に関数内で何が行われているのかを解説させる
ex. 逆に関数内で何が行われているのかを解説させる

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はあくまでもツール。うまく使いこなさなければ邪魔でさえあります。せっかく使うのであればその機能をフルで引き出し、コーディング業務の効率を上げていきましょう✊