開発者の素晴らしい助っ人、GitHub Copilot、使う前に知るべきのこと
開発者の素晴らしい助っ人、GitHub Copilot、使う前に知るべきのこと

開発者の素晴らしい助っ人、GitHub Copilot、使う前に知るべきのこと

작성자
ユミンユミン
카테고리
Dev.Log
작성일
2023년 10월 23일
태그
CS
AI
https://github.com/features/copilot
 
前回の記事では、「Copilotとは何か」についてまとめてみました。
Copilot公式サイトに「Frequently asked questions」をまとめたものがあったのでこれについて翻訳してまとめてみました。
 

Frequently asked questions

GitHub Copilotとは?

GitHub CopilotはOpenAI Codex技術を利用して作成した人工知能ペアプログラマーで、コード作成を高速化し、労力を軽減するツールです。コメントとコードから文脈を把握し、個々の行や関数全体を即座に提案します。GitHub Copilotは、Visual Studio Code、Visual Studio、Neovim、およびJetBrains統合開発環境(IDE)の拡張機能として提供されます。

GitHub Copilotはどのようなデータで学習されましたか?

GitHub CopilotはOpenAIが開発した事前学習された生成モデルであるCodexを利用して動作します。このモデルは、公開的に利用可能なソースコードと自然言語テキストを学習し、GitHubの公開リポジトリにあるコードを含む様々なソースから学習しました。

GitHub Copilotは完璧なコードを作成しますか?

最近の評価では、GitHub Copilotが提案したすべての完了タスクのうち、平均して26%がユーザーに受け入れられたことがわかりました。 また、開発者のコードファイルの平均27%以上がGitHub Copilotによって生成され、Pythonのような特定の言語では40%まで増加します。 しかし、GitHub Copilotは完璧なコードを作成するわけではありません。 可能な限り最高のコードを生成するように設計されていますが、提案されたコードをテストしないため、コードが常に機能しない、または意味がない場合があります。GitHub Copilotは非常に限られたコンテキストしか理解できないため、プロジェクトの別の場所や同じファイルで定義された有用な関数を使用しない可能性があり、古いまたは廃止されたライブラリや言語の使用を提案することもあります。他の言語で書かれた注釈をコードに変換する場合、英語と比較してパフォーマンスの違いがある場合があります。提案されたコードは、他のコードと同様に慎重にテスト、レビュー、確認する必要があります。 開発者は常に責任を負わなければなりません。

GitHub Copilotは新しいプラットフォームのコードを書くのに役立ちますか?

GitHub Copilotは公開コードで学習します。新しいライブラリ、フレームワーク、APIがリリースされると、学習する公開コードが少なくなり、新しいコードベースの提案を提供する能力が低下します。より多くの例が公開されると、学習セットに統合して提案の関連性を高めます。 今後、GitHub Copilotの提案で最新のAPIやサンプルを強調して、関連性を高める方法を提供する予定です。

ユーザーはGitHub Copilotを最大限に活用するためにはどうすればよいですか?

GitHub Copilotは、コードを小さな関数に分割し、関数パラメータに意味のある名前を使用し、適切なドクストリングとコメントを作成した場合に最もよく機能します。 また、未知のライブラリやフレームワークを探索するのに役立つ場合に最もよく機能するようです。

ユーザーが貢献する方法は何ですか?

GitHub Copilotを使用し、フィードバックフォーラムで意見を共有することで、お客様はGitHub Copilotの改善に貢献することができます。 また、インシデント(例:侮辱的な出力、コードの脆弱性、コード生成で個人情報が見える場合など)を copilot-safety@github.com으로 に直接報告することで、セキュリティを向上させることができます。GitHubは安全とセキュリティを非常に重要視し、継続的な改善に取り組んでいます。

GitHub Copilotが提案するコードにセキュリティ上の脆弱性がある可能性はありますか?

公開コードには、セキュリティの脆弱性やバグ、古いAPIやイディオムの参照などが含まれている可能性があります。GitHub Copilotは、このようなデータに基づいてコード提案を合成する際に、これらの不要なパターンを含むコードを生成することもあります。GitHubはこのことに非常に気を配っており、最近ではGitHub Actions、Dependabot、CodeQLなどのツールをオープンソースプロジェクトに提供し、コードの品質を向上させるのに役立てています。もちろん、GitHub Copilotは、良いテストとコードレビュー慣行とセキュリティツール、そして個人の判断で使用する必要があります。

GitHub Copilotが生成したコードの著作権はGitHubが所有していますか?

GitHub Copilotはコンパイラやペンのようなツールです。GitHubはGitHub Copilotが提供する提案の著作権を所有していません。GitHub Copilotを使用して作成したコードの責任はユーザーにあります。独自に作成していない資料を含むコードを作成するのと同様に、製品としてリリースする前に、コードを慎重にテスト、レビュー、確認することをお勧めします。

GitHub Copilotは学習セットからコードをコピーしますか?

GitHub Copilotの提案はすべて人工知能によって生成されます。GitHub Copilotは新しいコードを確率論的に生成し、学習データセットに含まれるコードスニペットと同じコードを生成する可能性は低いです。モデルにはコードデータベースがなく、コードスニペットを「参照」することはありません。 最近の内部調査によると、約1%のケースで、学習セットと一致する約150文字以上のコードスニペットが提案に含まれることがあります。以前の研究では、これらのケースの多くは、GitHub Copilotが作成しているコードから十分なコンテキストを推論できないか、問題に対する一般的な、あるいは普遍的な解決策がある場合です。

GitHub Copilotが公開コードと一致するコード提案を減らすにはどうすればよいですか?

GitHubは、公開コードと一致するコードをGitHub Copilotで推奨することを検知して抑制するフィルターを構築しました。
個人ユーザーの場合、Copilotの設定時にフィルターを有効にすることができます。ビジネスユーザーの場合、Enterprise管理者がフィルタの適用方法を制御します。すべての組織の提案を制御するか、組織管理者に制御を委任することができます。この組織管理者は、組織のユーザーに対して設定中にフィルターをオンまたはオフにすることができます(Enterprise管理者が制御を委任した場合)。
フィルターを有効にすると、GitHub Copilotは空白を無視して、約150文字の公開コードと一致するコードレコメンドをその周辺のコードと比較します。一致する場合、そのレコメンドはユーザーに表示されません。 また、公開コードと類似したレコメンドに関する参考情報を提供する機能を提供する予定です。 これにより、ユーザーはそのコードを使用するかどうか、どのように使用するかについてより効果的な判断を下すことができ、そのコードが他のプロジェクトでどのように使用されているかを探索し、学習することができます。
ユーザーが独自に作成していない資料を使用してコードを作成する場合と同様に、コードの動作を理解し、適切性を確保するために、厳格なテスト、IPスキャン、セキュリティの脆弱性の確認などの措置を講じる必要があります。 また、IDEまたはエディタが生成されたコードをレビューする前に、自動的にコンパイルまたは実行されないようにする必要があります。

フィルタ以外にも、GitHub Copilotが提案するコードを評価するために、どのようなアクションを取ることができますか?

独自に作成したものではない素材を使用して作成したコードと同様に、GitHub Copilotが提案するコードを評価するために適切な措置を講じる必要があります。 これらの措置には、厳密なテスト、IPスキャン、セキュリティの脆弱性の確認などが含まれます。コードをレビューする前に、IDEやエディタが生成されたコードを自動的にコンパイルまたは実行しないように注意する必要があります。

GitHub Copilotは英語以外の言語を使用しても同じように動作しますか?

オープンソースのほとんどが英語であるため、開発者が提供する自然言語プロンプトが英語でない場合や文法的に間違っている場合、GitHub Copilotが効果的に動作しない可能性が高いです。 そのため、英語以外の言語を使用するユーザーはサービスの品質が低くなる可能性があります。

GitHub Copilotはアクセシビリティ機能をサポートしていますか?

私たちは、障害を持つ開発者がGitHub Copilotを使うことの容易さを内部的にテストし、すべての開発者がGitHub Copilotを使えるように努力しています。GitHub Copilotのアクセシビリティに関するフィードバックは、いつでもフィードバックフォーラムで共有してください。

GitHub Copilotは侮辱的な成果物を生成しますか?

GitHub Copilotには、プロンプトで侮辱的な言葉をブロックし、機密性の高い文脈で提案を生成しないようにするフィルターが含まれています。私たちは、侮辱的な結果を検出し、除去するために、フィルターシステムをよりスマートに改善するよう努めています。もし侮辱的な結果を見つけた場合は、直ちに copilot-safety@github.com으로 まで報告してください。私たちはこの問題に真剣に取り組んでいます。

GitHub Copilotのような高度なコード生成ツールが開発者の職業にどのような影響を与えるのでしょうか?

よりインテリジェントなシステムを導入することで、開発者の経験に大きな変化をもたらす可能性があります。GitHub Copilotが開発者に取って代わるとは考えていません。 代わりに、GitHub Copilotは開発者と協力して、開発者の能力を高め、生産性を向上させ、手作業を減らし、開発者が興味深い作業に集中できるようにすることを目指しています。 また、GitHub Copilotは、ソフトウェア開発を探求し、次世代の開発者が参加するために必要な参入障壁を下げることに貢献する可能性があると考えています。私たちは、内部および外部の研究を通じて、これらの仮説を検証するために取り組んでいます。

ビジネス用Copilotが収集するデータは?

GitHub Copilotはファイルコンテンツと追加データに依存して動作します。サービスを提供するためにデータを収集し、一部のデータはその後の分析と製品改善のために保管されます。
ビジネス用Copilotは以下の方法でデータを収集します。
  1. ユーザー参加データ
    1. GitHub Copilotを使用すると、IDEまたはエディタとの対話時に生成されるイベントに関する使用状況情報を収集できます。これらのイベントには、完了が承認または拒否されたユーザー編集操作、遅延時間、機能への参加などの指標を特定するためのエラーや一般的な使用状況データが含まれる場合があります。この情報には、匿名識別子などの個人データが含まれる場合があります。
  1. コードスニペットデータ
    1. GitHub CopilotはIDEからコードスニペットをGitHubに送信し、提案を提供します。コードスニペットデータは、提案を返すためにリアルタイムで送信され、提案が返された後に削除されます。ビジネス用Copilotはコードスニペットデータを保管しません。

Copilot for Businessのデータはどのように使用され、共有されますか?

ユーザー参加データは、GitHub、Microsoft、OpenAIがサービス提供と改善のために使用します。
 
そのようなユースケースは以下の通りです。
  • ユーザーにポジティブな影響を与えるかどうかを測定してGitHub Copilotを評価すること。
  • ランキングやソートアルゴリズムやプロンプトの作成を調整すること
  • GitHub Copilotの不正使用や許可されていない使用ポリシー違反を検出すること。
  • 開発者ツールとサービスの研究・実験を実施
 

Copilot for Businessユーザーはどのようにデータ使用をコントロールできますか?

ユーザー参加データ(医師名を含む匿名の識別子と一般的な使用データ)はGitHub Copilotの使用に必要であり、GitHub Copilotの使用時に収集、処理、MicrosoftおよびOpenAIと共有されます。
Copilot for Businessはコードスニペットデータを保管しません。

Copilot for Individualsはどのようなデータを収集しますか?

GitHub Copilotはファイル内容と追加データに依存して動作し、その一部は分析と製品改善のために保存されます。GitHub Copilotは個人ユーザーから以下のデータを収集します。
ユーザーエンゲージメントデータ GitHub Copilotを使用する場合、IDEまたはエディタとの対話時に生成されるイベントに関する使用情報を収集します。これらのイベントには、エラーや一般的な使用状況データ、ユーザーの完了の承認や拒否などのユーザー編集操作、遅延時間や機能への参加などのメトリックを識別するデータが含まれます。この情報には、匿名の識別子などの個人データが含まれる場合があります。
コードスニペットデータ 好みのテレメトリ設定に応じて、GitHub Copilotは次のようなものを収集して保存することもできます。一般に「コードスニペット」と呼ばれるもの: 編集中のソースコード、関連ファイル、および同じIDEまたはエディタで開いているその他のファイル、リポジトリ、ファイルパスのURLが含まれます。

Copilot for Individualsで収集したデータはどのように使用され、共有されますか?

ユーザーエンゲージメントデータとコードスニペットデータは、GitHub、Microsoft、OpenAIがGitHub Copilotおよび関連サービスを改善し、開発者向けの製品および学術研究を行うために使用されます。
 
これらのユースケースには次のようなものがあります:
  • さまざまな戦略を処理し、予測するための異なるアプローチを評価することで、GitHub Copilotを直接改善し、ユーザーに役立つようにします。
  • GitHub、Microsoft、OpenAIで密接に関連する開発者向け製品やサービスを開発し、改善していく
  • GitHub Copilotの潜在的な誤用や使用ポリシー違反の調査と検出を行う。
  • 開発者および開発者ツールやサービスの使用に関する実験や研究を行うこと。
  • GitHub Copilotのポジティブな影響を測定してGitHub Copilotを評価する
  • 肯定的な例と否定的な例を提供し、ベースコード生成モデルを改善します。
  • ランキングとソートアルゴリズムとプロンプトの作成を微調整する
コードスニペットデータを処理する場合、GitHubは、「送信されたコードスニペットデータを保護する方法」で説明した保護措置を講じ、プライバシーステートメントに従って責任ある方法で適切な処理を行い、ユーザーのテレメトリデータがこれらのモデルを改善するために使用される場合、このデータが他のGitHub Copilotユーザーと共有されないようにします。

送信されるコードスニペットデータはどのように保護されますか?

ユーザーの修正作業、ソースコードスニペット、リポジトリおよびファイルパスのURLは機密データであることを認識しています。 したがって、以下の保護措置が適用されます。
  • 送信されたデータは、送信中と休憩中に暗号化されます。
  • アクセス権は厳重に管理されています。データにアクセスできるのは、(1)GitHub CopilotチームまたはGitHub Platform Healthチームで働く指名されたGitHubの従業員、(2)GitHub Copilotチームで働いている、または働いているMicrosoftの従業員、(3)GitHub Copilotで働いているOpenAIの従業員のみです。
  • コードスニペットデータにアクセスする従業員は、役割ベースのアクセス制御と複数認証が必要です。

個人用Copilotユーザーは、コードスニペットデータの使用をどのように制御できますか?

GitHub Copilotは、収集するデータの使用方法について選択肢を提供します。ユーザーの活動データ(User Engagement Data)は(類似匿名識別子と一般的な使用データを含む)GitHub Copilotの使用に必要であり、GitHub Copilotを使用すると、MicrosoftおよびOpenAIと一緒に収集、処理および共有されます。Copilot for Individualsユーザーは、ユーザー設定を調整することで、Code Snippets Dataを保持し、さらなる処理とMicrosoftおよびOpenAIとの共有を選択することができます。
Copilot for Individualsユーザーは、GitHub IDに関連するCode Snippet Dataの削除をリクエストすることができます。GitHub CopilotはOpenAIで学習された学習モデルであるCodexによって提供されます。Codexの学習データからコードを削除するには、OpenAIの利用規約の「著作権の苦情処理」セクションに記載されている手順に従ってください。さらに詳しい情報が必要な場合は、サポートチケットを作成してお問い合わせください。

私の個人コードは他のユーザーと共有されますか?

いいえ、GitHub Copilotの他のユーザーのための提案コードとして使用されないように、プライバシーポリシーに従って責任ある慣行に従います。

GitHub Copilotが個人データを出力する場合がありますか?

GitHub Copilotを駆動するCodexモデルは、公開されているコードを学習データとして使用しているため、そのデータに含まれる個人情報が学習データに含まれています。 しかし、内部検証の結果、GitHub Copilotで個人情報がそのまま含まれていることはほとんどないことがわかりました。モデルが個人情報のように見えるデータ(メール、電話番号など)を提示する場合でも、このデータは実際に学習データ内で発見されたパターンを合成した偽の情報です。 つまり、このデータは特定の個人とは関係ありません。 例えば、開発者の一人が「私の名前はMona、誕生日は...」というプロンプトを入力した場合、「私の名前はMonaです。というプロンプトを入力した場合、GitHub Copilotが提案する偽の誕生日「12月12日」はMonaの実際の誕生日ではありません。 また、標準形式で表示されるメールをブロックするフィルタリングシステムも実装されていますが、強引に試行錯誤すると、このような内容を提案することもあります。 しかし、GitHub Copilotの提案からより多くの個人情報を検出して削除するために、GitHubはフィルタリングシステムを継続的に改善していく予定です。

GitHubのプライバシーとデータ保護について詳しく知りたい場合、どこで知ることができますか?

GitHub Copilotの個人情報の処理と利用に関する詳細は、GitHub Copilot Privacy Statementをご覧ください。
 

まとめ

量も量ですが、久しぶりに英語の原文を見ると、頭が混乱する感じでした。笑
Github Copilotをインストールするだけでも使えますが、詳しく調べて使う方がより便利にGithub Copilotを使うことができると思い、まとめてみました。ポストをまとめながら思うことですが、Github Copilotで作成されたコードでも責任は開発者にあるので、適切なロジックで実装されたか確認する能力が必要だと思いました。
 

댓글

guest