GitHub Copilot 入門 — コード補完を使いこなす
概要
GitHub Copilot は、コード中に自然言語コメントや途中まで書いたコードを与えると、続きの候補を提示してくれる AI ペアプログラミングツールです。本記事では、導入からエディタ上での基本操作、補完の精度を引き上げるコツ、そして「使ってはいけない場面」までをハンズオン形式でまとめます。対象は「名前は知っているが本格的に使ったことがない」エンジニアで、特定のプロダクトやフレームワークに依存しない一般的な使い方に絞っています。
環境
本記事は以下を前提としています(いずれも公開情報に基づく一般的な構成です)。
- エディタ: Visual Studio Code(JetBrains 系 IDE / Neovim でも拡張機能が提供されています)
- 拡張機能: GitHub Copilot / GitHub Copilot Chat
- アカウント: GitHub アカウント(Copilot は有料サブスクリプション。プラン・料金は公式ドキュメントで最新を確認してください)
セットアップ手順
1. 拡張機能をインストールする
VS Code の拡張機能ビューで「GitHub Copilot」を検索してインストールします。あわせて「GitHub Copilot Chat」も入れておくと、対話形式でのリファクタや説明依頼が使えます。
2. GitHub アカウントで認証する
コマンドパレット(Cmd/Ctrl + Shift + P)から GitHub Copilot: Sign In を実行し、ブラウザで認証します。
3. 動作確認
# 2つの日付の差を日数で返す関数
改行してしばらく待つと、グレーのゴースト テキストで候補が表示されます。Tab で確定します。
# 2つの日付の差を日数で返す関数
def days_between(date1, date2):
return abs((date2 - date1).days)
基本操作(キーボードショートカット)
| 操作 | 既定ショートカット |
|---|---|
| 候補を受け入れる | Tab |
| 候補を拒否する | Esc |
| 次/前の候補を見る | Alt + ] / Alt + [ |
| 単語単位で受け入れる | Cmd/Ctrl + → |
| 候補一覧を別ペインで開く | Cmd/Ctrl + Enter |
「単語単位で受け入れる」は、候補の前半だけ採用したいときに丸ごと消さずに済むので覚えておくと便利です。
補完の精度を上げるコツ
コツ1: コメントで意図を先に書く
// 配列を受け取り、重複を除いた上で昇順にソートして返す
function uniqueSorted(arr) {
// ここで待つと意図に沿った候補が出る
}
コツ2: 具体的な名前を使う
data や tmp より invoiceItems retryCount のように意味のある名前を使うと、周辺コードから役割が推測され候補が的確になります。
コツ3: 近くに「お手本」を置く
同一ファイルに既存パターンがあると Copilot はそれを踏襲します。テストを1件手書きしてから残りを補完させる進め方が有効です。
def test_add_positive():
assert add(1, 2) == 3
def test_add_negative():
コツ4: 開いているファイルが文脈になる
現在のファイルに加え、エディタで開いている関連ファイルも文脈になります。モデル定義やインターフェースを開いておくと、命名や型の一貫性が上がります。
Copilot Chat の活用
コードを選択して対話で指示できます。
/explain— コードの説明/fix— 問題点の指摘と修正案/tests— テスト生成/doc— ドキュメンテーションコメント生成
複雑な正規表現を選択して /explain を実行すると、何にマッチするかを自然言語で説明してくれます。レビュー前のセルフチェックにも使えます。
実装例: コメント駆動で小さな関数を組み立てる
// CSVの1行(カンマ区切り、ダブルクォートによるエスケープ対応)を
// フィールドの配列にパースする。閉じられていないクォートがあれば例外を投げる。
function parseCsvLine(line: string): string[] {
const result: string[] = [];
let field = "";
let inQuotes = false;
for (let i = 0; i < line.length; i++) {
const ch = line[i];
if (inQuotes) {
if (ch === '"' && line[i + 1] === '"') {
field += '"';
i++;
} else if (ch === '"') {
inQuotes = false;
} else {
field += ch;
}
} else if (ch === '"') {
inQuotes = true;
} else if (ch === ",") {
result.push(field);
field = "";
} else {
field += ch;
}
}
if (inQuotes) {
throw new Error("Unterminated quote in CSV line");
}
result.push(field);
return result;
}
定型ロジックは丁寧なコメントで大枠を提案してくれます。ただし、そのまま鵜呑みにせず必ず自分で検証することが前提です。
確認方法
- 読む — 各行を説明できるか。できない行は残さない。
- テストを書く/実行する — エスケープ・空フィールド・未閉じクォートのケースを流す。
- 境界値を疑う — 空入力、極端に大きい入力、想定外の型。
- 依存の実在を確認する — 存在しないメソッドやパッケージをそれらしく提案することがある(ハルシネーション)。
注意点
- 機密情報・認証情報をコメントやコードに書かないこと。
- 組織利用ではパブリックコード一致ブロック設定など管理者設定と社内ポリシーを確認すること。
- 正しさの責任は人間側にあります。認証・認可・暗号・SQL 組み立てなど重要箇所は特に慎重にレビューしてください。
Tab連打による思考停止に注意し、実装理由を説明できる状態を保つこと。- 料金・機能・対応 IDE は更新されます。数値・機能名は公式ドキュメントで最新を確認してください(本記事は執筆時点の一般的な挙動に基づく仮置きを含みます)。
まとめ
GitHub Copilot は「勝手にコードを書いてくれる魔法」ではなく、「文脈を与えると続きを提案してくれる高速な下書きツール」です。要点は3つ。
- 文脈を与える — コメントで意図を宣言し、具体的な名前とお手本を近くに置く。
- 操作を体で覚える — 受け入れ/拒否/単語単位確定を手を止めずに使う。
- 必ず検証する — 提案は下書き。読んで、テストして、境界を疑う。
まずは1週間、普段のコードの隣で使ってみて、「どういうときに当たり、どういうときに外すか」の感覚を掴むのがおすすめです。
