Skip to main content

GitHub Copilot インライン提案の責任ある使用

Copilot インライン提案の目的、機能、制限を理解することで、責任を持ってこれを使用する方法について説明します。

GitHub Copilot のインラインサジェストについて

Copilot インライン提案は、GitHub Copilot によってインラインで生成されるオートコンプリートスタイルの補完です。 Copilot インライン提案は、AI 塔載のペア プログラマーと協力して、コードを補完するための提案を自動的に提供するエクスペリエンスです。 さらに、コードのコメントやテストなども提案できます。 これらの提案は、サポートされるエディターを使ったコードの記述中に直接提供され、幅広いプログラミング言語とフレームワークで動作できます。 詳しくは、「GitHub Copilot とは何ですか?」をご覧ください。

Copilot の提案は、現在の行の補完である場合とまったく新しいコード ブロックの場合があります。 提案の全部または一部を受け入れる、提案を受け入れない、または提案を無視して入力を続けることができます。

Copilot インライン提案は、自然言語処理と機械学習の組み合わせを使用して、(カーソル位置に対する) 周囲のコードを理解し、提案を提供することで機能します。 このプロセスは、いくつかの手順に分けることができます。

入力処理

ユーザーのカーソルからの周囲のコードは、Copilot インライン提案システムによって前処理され、コンテキスト情報 (エディターで開いているタブからのコード スニペットなど) と組み合わされ、プロンプトの形式で大きな言語モデルに送信されます。 データ保持について詳しくは、GitHub Copilot Trust Center を参照してください。

続いて大規模言語モデルがプロンプトを受け取り、プロンプトに基づいて応答を提供します。 このシステムは、コーディングの支援のみを目的としています。

言語モデルの分析

入力プロンプトを処理する大規模な言語モデルは、インライン提案用に微調整された言語モデルです。これは、インライン候補を提供するために特化されたコード データの大規模な本文でトレーニングされたニューラル ネットワークです。

インライン検索候補に使用されるモデルを変更できます。 「GitHub Copilot インライン提案の AI モデルの変更」を参照してください。

応答生成

言語モデルによって、入力プロンプトとそれに提供されたコンテキストの分析に基づいた応答が生成されます。 この応答は生成したコードとプレーン テキスト コメントの形式になっており、現在の行の補完の場合もあれば、まったく新しいコード ブロックの場合もあります。

出力の形式

Copilot によって生成される応答は、周囲のコードとは視覚的に異なる "ゴースト テキスト" として書式設定され、提案としてユーザーに提示されます。 ユーザーが提案を明示的に受け入れた場合にのみ、ファイルやコードベースに追加されます。 ユーザーは、提案の全部または一部を受け入れる、提案を受け入れない、またはまたは提案を無視して入力を続けることができます (この場合、提案は破棄されます)。

GitHub Copilot インライン提案は、既存のコードを拡張するための最も関連性の高い有用なコード候補を提供することを目的としています。 ただし、ユーザーが探している回答が常に提供されるとは限りません。 Copilot のユーザーは、システムによって生成された回答を受け入れる前に、それを見直して検証し、正確で適切であることを確認する必要があります。 さらに、製品開発プロセスの一環として、Copilot インライン提案の安全性を理解して改善するためのレッド チーミングを行っています。 生成された提案は、コンテンツ フィルターでも実行されます。 コンテンツ フィルター システムは、有害または不快なコンテンツや安全でないコードを検出して、Copilot がそれを出力しないようにします。 さらに、ユーザーの GitHub 設定に応じて、フィルターはパブリック コードとの一致を含む提案をブロックまたは注釈付けします。

GitHub Copilot インライン提案の利用事例

GitHub Copilot インライン提案は、さまざまなシナリオでコーディング支援を提供できます。

ユーザーの指示に基づいてコードを生成する

Copilot を提案の提供に利用するだけでなく、コード コメントを使うことでコメントに従って望ましいコードを生成するよう Copilot に指示することができます。 たとえば、"再帰を使用する" や "シングルトン パターンを使用する" といったコメントを使って、Copilot が提案するアルゴリズムの種類を指定できます。 または、コメントを使ってクラスに追加するメソッドやプロパティを Copilot に伝えることができます。

単体テスト ケースの生成

Copilot インライン提案は、エディターで入力された周囲のコードに基づいてコードスニペットを生成することで、単体のテストケースを記述するのに便利です。 これにより、テスト ケースを記述するタスクの繰り返しに費やす時間を少なく抑えることができます。 たとえば、特定の関数のテスト ケースを作成している場合は、Copilot を使用して、関数のシグネチャと本体に基いた可能性のある入力パラメーターと予想される出力値の候補を取得できます。 インラインの提案では、コードのコンテキストとセマンティクスに基づいて、関数が正しく動作していることを確認するアサーションを提案することもできます。

Copilot インライン提案は、手動で識別するのが困難なエッジ ケースと境界条件のテスト ケースを生成するためにも便利です。 たとえば、Copilot は、エラー処理、null 値、または予期しない入力型のテスト ケースを提案できるため、コードの堅牢性と回復性に実現することができます。 ただし、生成されたテスト ケースが考えられるすべてのシナリオをカバーするわけではないことに注意することが重要です。また、コードの品質を確保するには、引き続き手動のテストとコードの確認が必要です。

これにより一般的なコーディング タスクと課題のガイダンスとサポートが提供されるため、プログラマーにとって便利なツールです。

GitHub Copilot のインライン候補におけるパフォーマンスの向上

Copilot インライン提案では、パフォーマンスと品質のメトリックが異なるさまざまなコンテキストでコード候補を生成できます。 Copilot インライン提案の機能を向上し、いくつかの制限に対応するためには、さまざまな対策を講じることができます。 Copilot インライン候補の制限の詳細については、「 GitHub Copilot インライン候補の制限事項」を参照してください。

プロンプトをトピックに沿ったものにする

Copilot は、コード関連またはコード自体の入力候補を生成することのみを目的としています。 そのため、エディター内の内容のコンテキストをコードまたはコーディング関連の情報に制限することで、モデルの出力品質を向上させることができます。

Copilot インライン提案を代わりとしてではなく、ツールとして使用する

Copilot はコード生成の強力なツールですが、人間によるプログラミングに代わるものとしてではなく、ツールとして使うことが重要です。 提案を受け入れる前に、Copilot が生成したコードを常にレビューし、さらに検証して、それが要件を満たし、エラーやセキュリティ上の問題がないことを確認することが必要です。

重要

セキュリティの脆弱性、バグ、IP 侵害など、生成されたコードに関連するすべてのリスクの責任はユーザー側にあります。

セキュリティで保護されたコーディングとコード レビュー プラクティスを使用する

Copilot インライン提案は構文的に正しいコードを生成することができますが、常に安全であるとは限りません。 Copilotの制限に対処するには、ハードコーディングされたパスワードやSQLインジェクションの脆弱性を回避し、コードレビューのベストプラクティスに従うなど、セキュアコーディングのベストプラクティスに常に従いましょう。

最新情報を入手する

Copilot インライン提案はまだ比較的新しい技術であり、これから進化していくでしょう。 ツールの更新や変更のほか、発生する可能性がある新しいセキュリティ リスクやベスト プラクティスについても、最新の情報に注意することが必要です。 Visual Studio Code、Visual Studio、JetBrains suite of IDE では、拡張機能の自動更新が既定で有効になっています。 自動更新が有効である場合、IDE を開く際に Copilot が自動的に最新バージョンに更新されます。 IDE の自動更新について詳しくは、お使いの IDE またはコード エディターのドキュメントを参照してください。

GitHub Copilot インライン提案の制限

コードベースや入力データなどの要因に応じて、Copilot インライン検索候補を操作するときに、さまざまなレベルのパフォーマンスが発生する場合があります。 次の情報は、Copilot インライン提案に適用されるパフォーマンスに関するシステム制限と主要な概念を理解するのに役立ちます。

制限付きのスコープ

Copilot インライン提案は、大規模なコードデータセットでトレーニングされていますが、スコープが限られているため、複雑なコード構造やあまり知られていないプログラミング言語を扱えない場合があります。 各言語で、受け取る提案の品質は、その言語のトレーニング データの量と多様性によって異なります。 たとえば、JavaScript は、パブリック リポジトリで適切に表現されており、GitHub Copilot でサポートされている最適な言語の 1 つです。 パブリック リポジトリでの表現が少ない言語は、Copilot によるアシストがより困難になることがあります。 さらに、Copilot インライン提案では、書き込まれるコードのコンテキストに基づいてのみコードを提案できるため、より大きな設計やアーキテクチャの問題を特定できない可能性があります。

最後に、Copilot のインライン提案は、コードやコード関連の出力を生成することを目的としています。 Copilot インライン候補の使用は、自然言語出力を生成することを目的としていません。

潜在的なバイアス

Copilot のトレーニング データは既存のコード リポジトリから取得されており、ツールによって永続化される場合があるバイアスとエラーが含まれている場合があります。 さらに、Copilot インライン提案は、特定のプログラミング言語やコーディング スタイルに偏りがあり、最適ではないコード候補や不完全なコード候補につながる可能性があります。

セキュリティ リスク

Copilot は、記述されているコードのコンテキストに基づいてコードを生成するため、注意して使わないと機密情報や脆弱性が公開されてしまう可能性があります。 Copilot を使ってセキュリティが重要なアプリケーションのコードを生成するときは慎重に行う必要があり、生成されたコードのレビューとテストを必ず十分に行ってください。

パブリック コードとの一致

Copilot インライン提案は新しいコードを生成することができ、それを確率的な方法で行います。 確率は高くありませんが、Copilot によりトレーニング セット内のコードと一致するコード候補が生成される可能性があります。

不正確なコード

Copilot の制限の 1 つには、生成されたコードが有効であるように見えても、実際には意味または構文的に正しくない場合や、開発者の意図を正確に反映していない場合があります。 不正確なコードのリスクを軽減するには、重要または機密性の高いアプリケーションを処理する場合は特に、生成されたコードを慎重に確認してテストする必要があります。 また、生成されたコードがベスト プラクティスと設計パターンに準拠し、コードベースの全体的なアーキテクチャとスタイル内に収まるように確認する必要もあります。

ユーザーは、AI サービスやソリューションを使用する際に、該当する法律や規制上の義務を評価する必要があります。AI サービスやソリューションがすべての業界やシナリオに適しているとは限りません。 さらに、AI サービスまたはソリューションは、該当するサービス利用規約と関連する行動規範で禁止されている方法のために設計されておらず、そのような方法で使うこともできません。

次のステップ

Copilot インライン検索候補の使用方法の詳細については、以下を参照してください。

  •           [AUTOTITLE](/copilot/using-github-copilot/getting-code-suggestions-in-your-ide-with-github-copilot)
    

参考資料

  •           [AUTOTITLE](/free-pro-team@latest/site-policy/github-terms/github-terms-for-additional-products-and-features#github-copilot)
    
  •           [GitHub Copilot トラスト センター](https://copilot.github.trust.page/)