「GitHub Copilotの実践的活用テクニック完全ガイド」をGitHub Copilotに生成させてみた
はじめに
GitHub Copilotを導入したものの、「思うような補完が出てこない」「期待通りのコードが生成されない」と感じることはありませんか?実は、Copilotは適切な使い方をすることで、驚くほど開発効率を向上させることができるのです。
この記事では、GitHub Copilotを既に使い始めている方向けに、コード補完機能とコード生成機能を最大限に活用するための実践的なテクニックを紹介します。Laravel 11での具体的なプロンプト例も交えながら、あなたの開発体験を大幅に改善するヒントをお伝えします。
GitHub Copilotの基本操作
まずは基本的な操作方法を簡単におさらいしておきましょう。
| 操作 | ショートカットキー | 
|---|---|
| サジェストの受け入れ | Tab | 
| サジェストのキャンセル | Esc | 
| 次の候補を表示 | Alt + ] (Windows/Linux) Option + ] (Mac)  | 
| 前の候補を表示 | Alt + [ (Windows/Linux) Option + [ (Mac)  | 
| インラインサジェスト表示/非表示 | Alt + \ (Windows/Linux) Option + \ (Mac)  | 
知っておくと便利なコマンド
VSCodeでGitHub Copilotをより効果的に活用するためのコマンドをいくつか紹介します:
1. Copilotチャットを活用する
ショートカット: Ctrl+I (Windows/Linux) / Cmd+I (Mac)
カーソル位置でインラインチャットを開き、コードに関する質問や修正依頼をすることができます。また、コマンドパレット(Ctrl+Shift+P / Cmd+Shift+P)から GitHub Copilot: Start New Chat を選択することで、専用のチャットビューを開くこともできます。
2. 複数の補完候補を表示する
コマンドパレットから GitHub Copilot: Show Completions Panel を実行すると、複数の候補を一度に確認できます。特に複雑なコードを生成する場合に役立ちます。
3. コードブロック全体の生成
ファイルの先頭や新しい関数の前に、詳細なコメントを書いてからEnterキーを押すことで、コードブロック全体を生成できます。
コード補完機能を最大限に活用するコツ
1. 詳細なコメントを書く
Copilotは先行するコードやコメントから文脈を理解します。曖昧な指示よりも具体的な指示の方が良い結果を得られます。
🔴 曖昧な例:
<?php
// ユーザー登録処理
🟢 具体的な例:
<?php
// メールアドレス、パスワード、名前を受け取り、バリデーションを行う
// パスワードはbcryptでハッシュ化し、ユーザーをデータベースに保存する
// 登録成功後はユーザーオブジェクトを返し、失敗時は例外をスローする
2. 型情報を明示する
特にPHPのような型ヒントをサポートする言語では、型情報を明示的に書くことで、より正確な補完が得られます。
🔴 型情報なし:
<?php
function getUserOrders($userId) {
    // Copilotの推測に任せる形になる
}
🟢 型情報あり:
<?php
function getUserOrders(int $userId): Collection {
    // 型情報があることで、より適切な補完が得られる
}
3. パターンを教える
Copilotは同じファイル内のコードパターンを学習します。同様の処理を複数実装する場合、最初の1つを丁寧に書くと、残りは同じパターンで補完してくれるようになります。
4. 命名規則を一貫させる
変数名やメソッド名の命名規則を一貫させることで、Copilotはそのパターンを学習し、より的確な補完を提供します。
コード生成機能を最大限に活用するコツ
1. プロンプト駆動開発を取り入れる
コメントでやりたいことを詳細に説明してから、コードを生成させる「プロンプト駆動開発」が効果的です。
<?php
/**
 * Laravel 11の新機能を使用して、以下の要件を満たすAPI認証システムを実装:
 * - Sanctumを使用したトークン認証
 * - メールアドレスとパスワードによるログイン
 * - ログイン試行回数の制限(5回/10分)
 * - 2段階認証のサポート
 * - 成功時と失敗時の適切なレスポンス処理
 */
2. ステップバイステップで指示する
複雑な処理は一度に生成させるのではなく、段階的に指示すると品質が向上します。
<?php
// ステップ1: ユーザー認証用のリクエストバリデーションを作成する
// ステップ2: 認証ロジックとトークン生成処理を実装する
// ステップ3: レート制限とエラーレスポンス処理を実装する
3. テストファーストでコードを生成する
テストを先に書くことで、Copilotに期待する動作を明確に伝えることができます。
<?php
/**
 * 以下のテストを満たすUserServiceのcreateメソッドを実装:
 *
 * test('正しいデータでユーザーが作成される', function () {
 *     $service = new UserService();
 *     $user = $service->create([
 *         'name' => 'Test User',
 *         'email' => 'test@example.com',
 *         'password' => 'password123'
 *     ]);
 *     
 *     $this->assertInstanceOf(User::class, $user);
 *     $this->assertEquals('Test User', $user->name);
 * });
 */
4. エラー処理とエッジケースを明示する
セキュリティやエラーハンドリングに関する部分は明示的に要求しましょう。
<?php
/**
 * 以下のファイルアップロード機能を実装する。必ず以下のエラーケースを処理すること:
 * - ファイルサイズ制限超過(10MB以上)
 * - 無効なファイル形式(jpg, png, pdf以外)
 * - アップロード失敗時のエラーハンドリング
 * - 適切なエラーメッセージの返却
 */
Laravel 11での実践的なプロンプト例
1. EloquentモデルとRTKを使用したAPIエンドポイント
<?php
/**
 * Laravel 11のRTK (Route-Type-Kits)を使用して、
 * ユーザーリソースの以下のCRUD操作をサポートするAPIエンドポイントを作成:
 * - 認証済みユーザーのみアクセス可能
 * - ユーザー一覧取得(ページネーション、検索機能付き)
 * - ユーザー詳細取得
 * - ユーザー作成(管理者のみ)
 * - ユーザー更新(本人または管理者のみ)
 * - ユーザー削除(管理者のみ)
 */
2. FormRequestバリデーション
<?php
/**
 * 商品登録用のProductStoreRequestクラスを作成:
 * - 名前: 必須、3〜100文字
 * - 説明: 任意、最大1000文字
 * - 価格: 必須、100以上、整数
 * - カテゴリID: 必須、存在するカテゴリ
 * - タグ: 任意、配列、各タグは存在するもの
 * - 画像: 任意、最大3ファイル、1ファイルあたり2MB以下、jpg/png/webp形式
 * - 在庫数: 必須、0以上、整数
 * - バリデーションエラーメッセージは日本語カスタマイズ
 */
3. サービスクラスの実装
<?php
/**
 * 以下の機能を持つOrderServiceクラスを作成:
 * - 注文作成(ユーザーID、商品リスト、配送先情報から注文を作成)
 * - 在庫チェックと在庫更新(不足時は例外をスロー)
 * - 支払い処理(Stripeを使用)
 * - 注文確認メール送信
 * - トランザクション処理
 * - エラーハンドリングとログ記録
 */
4. アクションクラスとイベント処理
<?php
/**
 * Laravel 11のアクションクラスを使用して、ユーザー退会処理を実装:
 * - ユーザーの関連データを匿名化
 * - 進行中の注文があればキャンセル
 * - サブスクリプションの解約処理
 * - ユーザーアカウントの無効化
 * - UserDeactivatedイベントの発火
 * - 管理者への通知
 */
5. マイグレーションとファクトリー
<?php
/**
 * 以下の要件を満たす商品レビューのマイグレーション、モデル、ファクトリーを作成:
 * - レビューテーブル: id, user_id, product_id, rating, comment, is_verified, created_at, updated_at
 * - ユーザーとの関連
 * - 商品との関連
 * - レーティング(1〜5)のバリデーション
 * - 検証済みレビューのスコープ
 * - テスト用のファクトリー
 */
まとめ
GitHub Copilotは、適切に使いこなすことで開発効率を大幅に向上させる強力なツールです。この記事で紹介したテクニックを実践することで、より質の高いコード補完や生成結果を得ることができます:
- 詳細なコメントで意図を明確に伝える
 - 型情報を明示して精度を高める
 - パターンを教えてCopilotの学習を助ける
 - プロンプト駆動開発で具体的な要求を伝える
 - ステップバイステップで複雑な機能を実装する
 - テストファーストでコード品質を確保する
 - エラー処理とエッジケースを明示的に要求する
 
これらのテクニックを日々の開発に取り入れることで、GitHub Copilotを単なるコード補完ツールから、頼れる開発パートナーへと進化させることができるでしょう。
最後に、この記事自体もGitHub Copilotを使って生成しました。使用したプロンプトは以下の通りです:
Github Copilotの基本的な使い方とコード補完機能・コード生成機能の力を十二分に発揮するための方法をまとめた記事をZennに投稿したいと考えています。キャッチーな感じで構成、使い方などの基本的な文章、コード補完機能・コード生成機能のコツを考えて作成してください。以下に要件を示します。
- タイトルの最後に「をGithub Copilotに生成させてみた」のようなことを入れる
 - 記事は5分で読み終わるくらいのボリューム
 - Github Copilotのコード補完機能・コード生成機能の力を十二分に発揮するための方法がメイン
 - Github Copilotを使い出した人向けに出したいので、セットアップ方法は必要ない
 - 基本的な使い方はさらっと、便利なコマンドも少し紹介
 - 環境はVSCode
 - コード補完機能・コード生成機能活用についてはlaravel11で短いプロンプト例を出しながら説明
 - プログラムは生成しないでOK
 - まとめではこのプロンプトを紹介してみる
 
あなたも自分なりのプロンプト技術を磨いて、GitHub Copilotとの開発体験をより豊かなものにしてください!
Discussion