GitHub Copilotを初めて使うなら、短い日付整形関数を題材に、補完で候補を出す、チャットで既存コードを説明させる、修正後にテストする、という順で試せます。候補を表示できたことと、正しいプログラムができたことは別です。最後に正常入力・空入力・不正入力を確認してから採用しましょう。
この練習の到達点は、存在しない日付を変換せず null にする関数です。補完を受け入れた後にテストを動かし、なぜその結果になったかを差分から説明できるところまで進めます。
Copilotの画面操作・生成比較は未実施です。配布コードは編集側の参考実装で、自動テストを実行済みです。
VS CodeでGitHub Copilotを使う準備
GitHub公式のIDE向けクイックスタートは、対応するCopilotプラン、IDE向け拡張、GitHubへのサインインを前提にしています。個人契約か組織からの割当かによって利用条件が異なるので、まず使うGitHubアカウントを確認してください。
VS CodeではCopilot関連の機能が有効かを確認し、小さなJavaScriptファイルを開きます。公式手順では、Copilot Chatを開いてファイルの説明を求めたり、コードを書きながらインライン候補を受け取ったりできます。拡張や画面の構成は更新されるため、ボタンの位置より機能名を手がかりに探しましょう。
補完とチャットの役割は次のように分けられます。
| 使い方 | 向いている場面 | 採用前の確認 |
|---|---|---|
| コード補完 | 直前のコメントやコードに続く短い処理 | 入力条件と戻り値が合うか |
| チャット | 既存コードの説明、問題の整理、変更依頼 | 説明が実コードと一致するか |
| エージェントによる変更 | 複数の編集・検証を伴う作業 | 変更ファイル、コマンド、差分の範囲 |
初心者の練習では、一つの関数に対象を絞ります。今回の教材に外部ライブラリやAPIキーは必要ありません。
GitHub Copilotの補完がVS Codeで出ないとき
候補が出ない場合は、関数を書き直す前に環境を切り分けます。
- VS Codeで意図したGitHubアカウントへサインインしているか。
- そのアカウントにCopilotの利用権限があるか。
- 関連する拡張や機能が無効になっていないか。
- 対象ファイルがJavaScriptとして認識され、補完設定が有効か。
- 組織のポリシーやネットワークの制限、利用上限の通知がないか。
チャットが使えることだけで、補完の設定も正常とは判断できません。逆に、候補が出ないだけで契約失効と断定しないでください。変更した設定と表示されたメッセージを記録し、必要なら公式トラブルシューティングへ進みます。
練習用の関数を開く
題材は、2026-10-29 を 2026/10/29 にする関数です。最初のコードは区切り文字を変えるだけで、存在しない日付を判定しません。
export function formatDate(value) {
return value.split('-').join('/');
}
このままだと 2026-02-29 も 2026/02/29 になります。2026年はうるう年ではないため、今回の「有効な日付だけ変換する」という仕様では不正です。まず期待する動作を決めないと、Copilotに「直して」と頼んでも判断の基準がありません。
今回の仕様は次のとおりです。
- 入力は
YYYY-MM-DD形式の文字列だけを受け付ける。 - 年は0001〜9999、月日が実際に存在するときだけ
YYYY/MM/DDを返す。 - 空文字、文字列以外、桁不足、存在しない日付は
nullを返す。 - タイムゾーン変換、時刻の解釈、前後空白の自動削除は行わない。
- 外部ライブラリを追加しない。
補完に渡すコメントの書き方
新しいファイルで試す場合は、関数の前に仕様コメントを置きます。これは入力用の編集例であり、実際に表示された補完候補の記録ではありません。
// YYYY-MM-DDをYYYY/MM/DDへ変換する。
// 年は0001〜9999。実在しない日付、空文字、文字列以外はnull。
// 月日を自動補正しない。タイムゾーン変換と外部ライブラリは不要。
export function formatDate(value) {
候補が出たら、全部を一度に信頼せず、型確認、形式確認、月の日数確認、戻り値の順に読みます。new Date()を使う候補なら、不正な日付の補正や年の扱いが今回の仕様と一致するかをテストします。短いコードであることだけを採用理由にしないでください。
既存コードを日本語で説明してもらう
GitHub Copilotのチャットでは、対象のファイルや関数を選択し、説明の範囲を指定します。最初は変更を頼まず、理解の確認に使えます。
このformatDate関数を日本語で説明してください。まだ編集しないでください。
入力の前提、処理、戻り値、副作用の有無を分けて説明してください。
空文字、null、2026-02-29を渡すと何が起きるか、コードの該当箇所を根拠に示してください。
実行していない結果は「コードからの予想」と明記してください。
回答が「日付を検証している」と説明していても、元のコードに検証処理はありません。説明を読むだけで終わらず、split と join 以外に何が書かれているか確かめます。コードと説明が食い違ったら、該当行を示して再説明を求めてください。
関数の修正とテストを依頼する
変更前に元ファイルを保存し、次の指示を渡します。対象外のファイルや依存関係に変更がないかも確認します。
formatDate関数だけを、次の仕様に修正してください。
入力はYYYY-MM-DDの文字列。年は0001〜9999で、存在する日付だけをYYYY/MM/DDへ変換する。
空文字・文字列以外・桁不足・存在しない日付はnullを返す。
空白を自動削除しない。タイムゾーン変換、外部ライブラリ追加は行わない。
最初に変更方針を説明してください。
修正後は、正常・空・不正入力に加え、うるう年の2000年と平年の1900年をテストしてください。
実行したテストと、実行できなかったテストを分けて報告してください。
差分を見るときは行数だけでなく、仕様にない便利機能が増えていないかを確認します。例えば前後の空白を勝手に削る変更は、便利でも今回の要件外です。まず決めた仕様で小さく完成させ、その後に必要なら仕様変更として依頼します。
配布コードと実行済みのテスト
以下は編集側で用意した教材です。同じフォルダへ保存してください。
Node.jsを利用できる環境で、そのフォルダから実行します。
node --test date.test.mjs
2026年10月29日、編集環境でこのテストを実行し、3つのテスト群がすべて成功しました。内訳は参考実装の正常入力4ケース、不正入力14ケース、修正前コードの問題を再現する3ケースです。これは編集側のコードを検証した結果で、Copilotの生成能力の評価ではありません。
| 代表入力 | 期待する参考実装の結果 | 確認する理由 |
|---|---|---|
2026-10-29 |
2026/10/29 |
正常な日付 |
| 空文字 | null |
入力なし |
null |
null |
型が違っても例外にしない |
2026-02-29 |
null |
平年の2月29日 |
2000-02-29 |
2000/02/29 |
400で割り切れる年 |
1900-02-29 |
null |
100で割り切れる平年 |
自分のCopilot出力を確かめる場合は、次の手順で参考実装と分けます。
- 自分の関数を
date-mine.mjsとして保存し、formatDateをexportする。 - 同じフォルダ内に
date.test.mjsをdate-mine.test.mjsとしてコピーする。 - コピーしたテスト内の
date-after.mjsを参照するimport先だけをdate-mine.mjsに変える。 - そのフォルダで
node --test date-mine.test.mjsを実行する。修正前コードの問題再現用importは変えない。
元の参考実装とテストを残せば、自分の変更とテスト側の変更を区別しやすくなります。「Copilotがテスト成功と言った」だけでなく、自分の環境の終了状態と出力を確認してください。
採用前に残しておく情報
変更をGitへコミットする前に、依頼文、実際の差分、テスト結果、未確認の条件をまとめます。プラン名、VS Codeと拡張のバージョン、利用した機能も記録すると、後で同じ手順を試す際の手がかりになります。
テストが通っても、未検証の入力まで正しいとは限りません。今回は時刻や時差、地域別の表示形式を対象外にしています。業務側で必要になったときは、仕様とテストを追加してから実装を変えます。
別の開発AIの進め方はCodexの使い方、小さなアプリ全体の依頼と確認はClaude Codeの使い方で扱っています。
出典と検証範囲
公式確認日:2026年10月29日。執筆:Codex。GitHub Copilotの画面操作・補完生成・チャット修正は未実施。編集側の参考実装とテストを作成し、ローカル実行で検証しました。

