Skip to main content

GitHub.com での Copilot コーディング エージェントの責任ある使用

Copilot コーディング エージェント の目的、機能、制限を理解して、GitHub.com 上で責任を持って使う方法について説明します。

GitHub.com

上の Copilot コーディング エージェント について

Copilot コーディング エージェント は、GitHub に統合された自律的で非同期のソフトウェア開発エージェントです。 エージェントは、issue または Copilot Chat からタスクを取得し、pull request を作成して、コメントに応じて pull request を反復処理することができます。

Copilot コーディング エージェント を使って、バグ修正、新機能の段階的な実装、プロトタイプ作成、ドキュメント作成、コードベースのメンテナンスなどのタスクを含め、説明と構成に基づいてカスタマイズされた変更を生成できます。 最初の pull request を作成した後は、エージェントを使ってユーザーのフィードバックとレビューに基づいて反復処理を行うことができます。

タスクの作業中は、エージェントから専用の一時的な開発環境にアクセスできます。ここで、コードを変更し、自動テストを実行し、リンターを実行することができます。

エージェントは���まざまなプログラミング言語で評価されており、主に英語がサポートされています。

エージェントを使って、自然言語処理と機械学習を組み合わせてタスクを理解し、コードベースに変更を加えてタスクを完了することができます。 このプロセスは、いくつかの手順に分けることができます。

プロンプトの処理

Issue、pull request コメント、または Copilot Chat メッセージを通じて Copilot に提供されたタスクは、他の関連するコンテキスト情報と組み合わされてプロンプトを形成します。 そのプロンプトは、処理のために大規模言語モデルに送信されます。 入力には、プレーンな自然言語、コード スニペット、または画像の形式を使用できます。

言語モデルの分析

次に、プロンプトは、大量のデータでトレーニングされたニューラル ネットワークである大規模言語モデルに渡されます。 言語モデルによって入力プロンプトが分析され、エージェントでタスクについて推論し、必要なツールを利用できるようになります。

応答の生成

言語モデルにより、プロンプトの分析に基づいて応答が生成されます。 この応答は、自然言語の提案とコードの提案の形式を取ることができます。

出力の形式

エージェントによる最初の実行を完了すると、変更内容に応じて pull request の説明が更新されます。 エージェントにより、アクセスできなかったリソースに関する補足情報が追加されたり、解決する手順について提案されたりする場合があります。

エージェントにフィードバックを提供するには、pull request 内でコメントするか、エージェント (@copilot) に明示的にメンションします。 そうすると、そのフィードバックはエージェントから言語モデルに再送信され、さらに分析されます。 エージェントによるフィードバックに基づいた変更が完了すると、コメントに更新内容が反映されて回答されます。

Copilot は、タスク解決に最も適切なソリューションを提供することを目的としています。 ただし、お探しの回答が必ず提供されるとは限りません。 ユーザーは Copilot によって生成された回答をレビューして検証し、正確かつ適切であることを確認する必要があります。

さらに、GitHub では、製品開発プロセスの一環として、エージェントの安全性を理解し、改善するためにレッド チーミング (テスト) を実施しています。

パフォーマンスを向上させる方法については、以下の「Copilot コーディング エージェント のパフォーマンスの向上」を参照してください。

Copilot コーディング エージェント のユース ケース

さまざまなシナリオで、次のようなタスクを Copilot に委任できます。

  • コードベースのメンテナンス: セキュリティ関連の修正、依存関係のアップグレード、対象を絞ったリファクタリングへの取り組み。
  • ドキュメント: ドキュメントの更新と新規作成。
  • 機能開発: 機能リクエストの段階的な実装��
  • テスト範囲の改善: 品質管理用の追加のテスト スイートの開発。
  • 新しいプロジェクトのプロトタイプ作成: 新しい概念のグリーンフィールド開発。

Copilot コーディング エージェント のパフォーマンスの向上

Copilot コーディング エージェント は幅広いタスクをサポートできます。 エージェントのパフォーマンスを高め、その制限に対処するために、さまざまな対策を講じることができます。

制限の詳細については、「Copilot コーディング エージェント の制限」(後述) を参照してください。

タスクのスコープを適切に設定する

Copilot コーディング エージェント で pull request を生成する際には、主要なコンテキストとしてプロンプトが利用されます。 エージェントに割り当てるプロンプトが明確であり、スコープが適切であるほど、より良い結果が得られます。 理想的な issue には次の要素が含まれています。

  • 解決すべき問題または必要な作業の明確な説明。
  • 適切なソリューションのイメージに関する完全な受け入れ基準 (単体テストが必要かなど)。
  • 変更する必要があるファイルに関するヒントまたはポインター。

コンテキストを追加してエクスペリエンスをカスタマイズする

提案された変更の生成時に、Copilot コーディング エージェント ではプロンプト、コメント、リポジトリのコードがコンテキストとして利用されます。 Copilot のパフォーマンスを高めるには、エージェントがプロジェクトをより適切に理解し、変更をビルド、テスト、検証する方法を理解できるように、カスタムの Copilot 指示を実装することを検討してください。 詳細については、「Best practices for using Copilot to work on tasks」の「リポジトリにカスタム指示を追加する」を参照してください。

Copilot コーディング エージェント のその他のカスタマイズについては、以下を参照してください。

Copilot コーディング エージェント は置き換えではなくツールとして使う

Copilot コーディング エージェント はコードとドキュメントを生成するための強力なツールですが、人間によるプログラミングの置き換えではなく、ツールとして使うことが重要です。 マージする前に、エージェントによって生成されたコンテンツを必ずレビューしてテストし、要件を満たしていること、エラーやセキュリティ上の懸念がないことを確認する必要があります。

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

Copilot コーディング エージェント を使うと、構文としては正しいコードを生成できますが、必ずしも安全であるとは限りません。 エージェントの制限に対処するには、ハードコーディングされたパスワードや SQL インジェクションの脆弱性を避け、コード レビューのベスト プラクティスに従うなど、安全なコーディングのベスト プラクティスに常に従う必要があります。 独自に作成していないマテリアルを使用するコードと同じ予防措置を、その適合性を確保するための予防措置を含め、常に講じる必要があります。 これには、厳密なテスト、IP スキャン、セキュリティの脆弱性の確認などが含まれます。

フィードバックを提供する

GitHub.com 上の Copilot コーディング エージェント で issue や制限にぶつかった場合は、各エージェントの回答の下にあるサムダウン アイコンをクリックしてフィードバックを提供することをお勧めします。 これは、開発者がツールを改善し、懸念事項や制限事項に対処するのに役立ちます。 さらに、コミュニティ ディスカッション フォーラムでフィードバックを提供することもできます。

最新情報を入手する

Copilot コーディング エージェント は新しいテクノロジであり、時間の経過と共に進化する可能性があります。 新たに発生する可能性があるセキュリティ リスクやベスト プラクティスについては、常に最新の情報を入手する必要があります。

Copilot コーディング エージェント のセキュリティ対策

設計上、Copilot コーディング エージェント は、データとコードベースのセキュリティを確保するためにいくつかの軽減策を組み込んで構築されています。 軽減策は存在しますが、エージェントの制限とそれがコードに与える影響を理解しながら、セキュリティのベスト プラクティスを継続的に実装してください。

特権エスカレーションの回避

Copilot コーディング エージェント は、リポジトリ書き込みアクセス権限を持つユーザーからの操作 (エージェントの割り当てやコメントなど) に対してのみ回答します。

Copilot コーディング エージェント によって発行された pull request に応じてトリガーされる GitHub Actions ワークフローの場合、実行前にリポジトリ書き込みアクセス権限を持つユーザーからの承認が必要です。

GitHub.com に表示されない非表示の文字はエージェントによってフィルター処理されます。そのため、コメントや issue の本文のコンテンツに含まれる有害な指示をユーザーが非表示にすることはできません。 これ���より、脱獄などのリスクから保護されます。

Copilot のアクセス許可の制約

Copilot は pull request を作成しているリポジトリにのみアクセスできます。他のリポジトリにアクセスすることはできません。

アクセス許可は制限されており、コードのプッシュと他のリソースの読み取りのみを実行できます。 保護機能が組み込まれており、Copilot は copilot/ で始まる名前のブランチにのみプッシュできます。 つまり、Copilot は既定のブランチ (たとえば、main) にプッシュできません。

実行時に Copilot コーディング エージェント から Actions organization またはリポジトリのシークレットまたは変数にアクセスすることはできません。 copilot 環境に特別に追加されたシークレットと変数のみがエージェントに渡されます。

データ流出の防止

Copilot コーディング エージェント の既定ではファイアウォールが有効になっており、誤って、またはユーザーによる入力に悪意がある場合のコードやその他の機密データの流出を防ぐことができます。

詳しくは、「Customizing or disabling the firewall for Copilot coding agent」をご覧ください。

Copilot コーディング エージェント の制限

コードベースや入力データなどの要因によって、Copilot コーディング エージェント の使用時のパフォーマンス レベルが変わる可能性があります。 次の情報は、Copilot コーディング エージェント に適用されるシステム制限とパフォーマンスに関する主な概念を理解するのに役立ちます。

制限付きのスコープ

Copilot コーディング エージェント で使われている言語モデルは、大量のコードでトレーニングされていますが、まだスコープが限定されており、特定のコード構造や難解なプログラミング言語を処理できない可能性があります。 各言語で、受け取る提案の品質は、その言語のトレーニング データの量と多様性によって異なります。

潜在的なバイアス

Copilot コーディング エージェント のトレーニング データで使われている言語モデルと、大規模言語モデルによって収集されたコンテキストには、偏りやエラーが含まれており、それがツールによって永続化される可能性があります。 さらに、Copilot コーディング エージェント は特定のプログラミング言語やコーディングのスタイルに偏っていることがあり、結果として、最適ではない提案や不完全な提案につながる場合があります。

セキュリティ リスク

Copilot コーディング エージェント を使って、リポジトリ内の issue またはコメントのコンテキストに基づいてコードと自然言語を生成できますが、慎重に使わないと、機密情報や脆弱性が公開される可能性があります。 マージする前に、エージェントによって生成されたすべての出力を慎重にレビューする必要があります。

不正確なコード

現在のところ、公開されているコードと一致するコードを GitHub Copilot に提案させることは、Copilot コーディング エージェント ではサポートされていません。 詳しくは、「GitHub Copilot の候補に一致するパブリック コードの検索」をご覧ください。

有効であるように見えても、実際には意味的または構文的に正しくない、または開発者の意図を正確に反映していないコードが Copilot コーディング エージェント から生成される場合があります。

不正確なコードのリスクを軽減するには、重要または機密性の高いアプリケーションを処理する場合は特に、生成されたコードを慎重に確認してテストする必要があります。 また、生成されたコードがベスト プラクティスと設計パターンに準拠し、コードベースの全体的なアーキテクチャとスタイル内に収まるように確認する必要もあります。

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