GitHub Copilot を使用して SQL を操作する

完了

GitHub Copilot を使用すると、すべての種類のコードを操作できます。これには、一般的なプログラミング言語との対話や、SQL コードの記述、デバッグ、最適化のオプションが含まれます。

GitHub Copilot では、SQL コードに関連する次のタスクを実行できます。

  • クエリの説明: Copilot を使用して複雑な SQL クエリを説明し、そのロジックと構造をより深く理解します。
  • クエリの最適化: 不要な JOIN の削除、SELECT DISTINCT の最適化、サブクエリのリファクタリングなど、低速または非効率的なクエリを最適化するための提案を Copilot に依頼します。
  • クエリのリファクタリング: 読みやすさや保守性を向上させるために、たとえば CROSS JOIN の置き換えや入れ子になったクエリの簡略化のために、Copilot にクエリを書き直すよう要求します。
  • クエリの生成: SELECT、INSERT、UPDATE、DELETE ステートメントなどのデータ要件に基づいて、Copilot に新しい SQL クエリを生成させます。
  • データの検証: Copilot を使用して、データの整合性を検証する SQL クエリを記述したり、データベース内の特定の条件を確認したりできます。
  • スキーマの探索: データベース スキーマを探索または文書化するクエリ (テーブル、列、リレーションシップの一覧表示など) を作成できるように Copilot に依頼します。
  • テスト生成: クエリの結果またはデータベースの状態を検証する SQL ベースのテストまたはアサーションを生成するように Copilot に要求します。
  • エラー デバッグ: SQL エラーのデバッグに役立つ Copilot に依頼するか、一般的な問題 (構文エラー、インデックスが見つからないなど) の修正を提案します。
  • プロンプトの作成: Copilot に、パフォーマンスの高いクエリを最初から作成するためのプロンプトまたはテンプレートを生成させます。

GitHub Copilot は、プロンプトがより具体的な場合に、より優れた結果を提供します。 一般的なプロンプトを指定すると、一般的な回答を受け取る可能性があります。 プロンプトに詳細を入力し、より詳細な質問をすると、より詳細な回答が得られる可能性が高くなります。

たとえば、GitHub Copilot を使用して SQL コードを提供し、次のプロンプトを発行して、名、姓、生年月日、お気に入りの映画、ペット名の列を含むテーブルを作成できます。

@workspace名、姓、生年月日、お気に入りの映画とペットの名前の列を含むテーブルを作成する SQL コードを提供してください

SQL でのテーブルの作成に関連する GitHub Copilot プロンプトのスクリーンショット。

SQL を含むアプリケーションについて

たとえば、SQL コードを含むアプリケーションが表示されたコードスペースを開いた場合は、次のプロンプトで GitHub Copilot にクエリを実行し、次の方法でプロジェクトの詳細を理解できます。

@workspaceこのプロジェクトの構造を簡単に説明してください。 実行するには何をすればよいですか?

プロジェクト構造に関するクエリに対する GitHub Copilot の応答を示すスクリーンショット。

SQL コードについて

/explain プロンプトを使用して、特定のコードを理解できます。 たとえば、プロジェクトには、アプリケーションで実行されているクエリを含む complex.sql という名前のファイルが含まれている場合があります。 complex.sqlの内容を理解するには、GitHub Codespaces のエクスプローラー ウィンドウ内でそれを選択し、チャットで /explain プロンプトを使用します。

コンピューター画面の AI によって生成されたコンテンツのスクリーンショットが正しくない可能性があります。

ファイル全体を選択するのではなく、コードのセクションを選択し、GitHub Copilot にこれらのセクションの詳細を提供するように依頼することができます。

SQL クエリの最適化とリファクタリング

不要な JOIN があり、クエリ対象のテーブルにインデックスがない、または冗長な入れ子になったサブクエリが含まれているため、低速または非効率的なクエリが表示されることがあります。 GitHub Copilot を使用すると、クエリを選択し、パフォーマンスを向上させる可能性のある最適化を求めることができます。

同様に、読みやすさや保守性を向上させるためにクエリを書き換えるよう Copilot に要求し、コードを確認する必要がある将来の開発者に機能を説明するためのコメントを提供するよう Copilot に依頼できます。

プロンプトの例を次に示します。

"各 CTE、SQL 句、計算の目的と機能を説明する詳細なコメントを complex.sql ファイルに追加します。 年の抽出方法、ローリング平均の計算方法、パフォーマンス比の背後にあるロジック、各 CASE ステートメントの意味など、クエリの各セクションで実行される内容を必ず記述してください。 コメントを使用すると、ファイルに慣れていないユーザーがクエリ全体のロジックと意図を簡単に理解できる必要があります。

データの整合性を検証する

Copilot を使用すると、データの整合性を検証したり、データベース内の特定の条件を確認したりする SQL クエリを記述できます。 たとえば、次の 4 種類の整合性チェックのいずれかを実行するように GitHub Copilot に要求できます。

  • 一意性/重複チェック
  • 参照整合性 (外部キー違反)
  • ドメインの整合性 (想定される範囲内の値)
  • ビジネス ルールのチェック (カスタム ロジック違反)

クエリの例を次に示します。

"Orders テーブルと Customers テーブルの間で孤立した外部キーをチェックする SQL クエリを記述します。"

データベース スキーマのドキュメント

GitHub Copilot に問い合わせて、データベース スキーマを探索または文書化するクエリの作成に役立てることもできます。 使用しているデータベースのコンテキストを GitHub Copilot に提供することで、そのデータベースと対話するコードを最適化できるかどうかを判断できます。 GitHub Copilot はクエリの実行プランを詳細に分析しませんが、対話している SQL データベースのコンテキストを理解することで、より良いアドバイスを提供できます。

SQL テストの生成

クエリの結果またはデータベースの状態を確認する SQL ベースのテストまたはアサーションを生成するように GitHub Copilot に要求できます。 Copilot は、プロジェクトの種類に基づいて適切なテスト フレームワークを提案できます。 テスト環境を構成するには、チャット入力フィールドに /setupTests コマンドを入力し、GitHub Copilot のガイダンスに従ってプロジェクトを構成します。

GitHub Copilot は、コードベースをカバーするテスト コードを生成することで、アプリケーション コードのテストを記述するのに役立ちます。 これには、単体テスト、エンド ツー エンド テスト、エッジ ケースのテストが含まれます。

SQL エラーのデバッグ

GitHub Copilot に依頼して、SQL エラーのデバッグを支援したり、一般的な問題の修正を提案したりすることができます。 たとえば、コードのファイルまたはブロックを選択し、GitHub Copilot に構文エラーを見つけて修正するように依頼できます。

GitHub Copilot で完全なテーブル スキーマとインデックスを提供することで、GitHub Copilot にテーブルに対する代表的なクエリを生成し、追加のインデックスを提案して、パフォーマンスを向上させることができます。

GitHub Copilot プロンプトの作成

GitHub Copilot を使用して、既存のコードよりもパフォーマンスの高いコードを作成するためのプロンプトを生成できます。 GitHub Copilot とやり取りする場合は、質問にできるだけ詳しい情報を入力して、提供された回答が要件を満たす可能性を高めます。 このためには、以下を行う必要があります。

  • コードを理解している。 この理解は、GitHub Copilot との既存の対話から派生できます。
  • 元のコードを選択し、GitHub Copilot Chat を開きます。
  • できるだけ詳しくお知らせください。 たとえば、次のプロンプトで GitHub Copilot チャットを提供できます。

次の要件を考えると:データベースは SQLite であり、映画の評価に関連するテーブルが含まれています (complex.sqlの構造を参照)。クエリでは、リージョン別に最上位の映画を効率的に集計して返す必要があります。これにより、実行時間を最小限に抑え、不要な操作 (冗長な CAST、不要な JOIN、必要でない場合は SELECT DISTINCT など) を回避できます。結果には、映画タイトル、平均評価、地域、およびその他の関連フィールドが含まれている必要があります。クエリは、大規模なデータセットで 1.5 秒以内に完了する必要があります。すべてのビジネス ロジックと正確性は、元のcomplex.sqlと同様に保持する必要があります。これらの要件を満たす高パフォーマンスの SQL クエリを記述し、適用する最適化について説明します。