【Copilot はじめました】GitHub Copilot 導入におけるハードルの整理

こんにちは。M&AクラウドのEMの鈴木です。M&Aクラウドでは GitHub Copilot(以下Copilotと呼びます)を導入してみることになりました。導入にあたり一般に言われているCopilotのリスクを元に、弊社なりに整理してみました。この記事はその学びを共有するものです。最近は GPT-4をベースにした「Copilot X」も発表されて Copilot を導入しようか迷っている方も多いかと思いますが、導入の際の意思決定の参考になったら幸いです。

GitHub Copilot とは

GitHub Copilot は、開発者がコードをよりすばやく記述できるようになる、AI を活用した新しいコード補完ツールです。

GitHub Copilot for Business について - GitHub Docs

(この記事を見に来ている人はだいたい知っていると思いますし、詳細は別の詳しい記事が沢山あるので端折ります。)

Copilot 関係のリリース状況整理

GitHub Copilot for Business

2023/02/15からGA(General Availability: 一般公開)。

github.blog

Copilot for Businessの新機能(抜粋)

● より強力なAIモデル:新たなモデリングアルゴリズムにより、コード提案の品質が向上しました。
● AIベースのセキュリティ脆弱性フィルタリング:GitHub Copilot は、ハードコードされた認証情報、SQLインジェクションやパスインジェクションといった問題に焦点を当て、一般的に安全でないとされるコード提案を自動的にブロックします。

GitHub Copilot X

2023/03/23にプロダクト発表。現在はテクニカルプレビューでBeta版。

github.blog

GAについては明記されていませんでした。状況に関する参考資料としてこちらも参照しました。

現在はテクニカルプレビューのBeta版。Copilot Xの料金は未定であり、Copilot の延長線上として同料金で使えるのか、追加料金が発生するのかは不明。

現行の GitHub Copilot に登録すると Waitlist に登録できる。Waitlist はこちら

セキュリティ・ライセンス問題に関する論点

主な論点としてセキュリティ上の問題と、ライセンス侵害の問題があります。いずれも GitHub Copilot for Business(以下 for Business と呼びます) を使用すれば問題の緩和が可能そうです。

Copilot 経由で弊社コードが流出するセキュリティ上の懸念に対するチェック

for Businesssであるなら、デフォルトで自社のコードをCopilotプロダクトの学習には使われないようになっています。

GitHub Copilot for Business について - GitHub Enterprise Cloud Docs

image.png (186.3 kB)

GitHub でテレメトリデータの使用を許可または禁止するには、 [GitHub で製品向上のためにコード スニペットを使用することを許可する] をオンまたはオフにします。

テレメトリーというのがCopilot自体の改善への情報提供 = 学習に使われる、という設定。

注: Copilot for Business には、テレメトリまたはコード スニペット データは保持されません。

GitHub.com での GitHub Copilot 設定の構成 - GitHub Docs

上記のように明記されていました。

Copilot for Individualsの場合には自社のコードを Copilot の改善のための学習に使われないようにする設定(Allow GitHub to use my code snippets for product improvementsの off)が必要ですが、for Businessの場合にはデフォルトで学習に使われないようになっています。 Twitterなどでは「仕事で使用する場合には、このチェックボックスをoffにすれば学習に使われないよ」などとツイートが散見されます。for Business を使用している場合にはこの設定は存在しないので、for Individuals を使用していると思われます。

プライバシーポリシーを見てみる

docs.github.com

送信される情報について以下に抜粋。

ユーザーエンゲージメントデータ 受け入れられた完了や却下された完了などのユーザー編集アクションと、待ち時間や機能エンゲージメントなどの指標を特定するためのエラーおよび一般的な使用状況データが含まれます。

コード スニペット データ 提案を返すためにリアルタイムでのみ送信され、提案が返されると破棄されます。(中略)コード スニペット データを保持しません。

ユーザー エンゲージメント データは、サービスを提供し、改善を可能にするために、GitHubMicrosoft、および OpenAI によって使用されます。

ここに明記されているものは以外は送信されない、プロダクト自体の改善に使用されない(=弊社コードが学習に使われて他の無関係の人のサジェストに表示される事はない)。

Copilot を使用して書いたコードがセキュリティリスクを持っているケースがあることについて

人間が書いたコードも同様にリスクはあります。各エンジニアメンバーは、自身が書いたコード、Copilotに支援してもらったコードであっても、内容をよく理解してPRを出す必要がありますね。また、レビュアーもCopilotが書いたものであろうとChatGPTが書いたコードであろうと、内容を理解して人間が書いたコードと同様にレビューする必要があります。

コードライセンスに関する懸念について

弊社におけるライセンス侵害のリスク

元となったコードがほぼそのまま出力されるような Copilot のアウトプットを使用すると学習元となったOSSのライセンス侵害をしてしまうリスクがあります。一方で断片化されたスニペットの場合にはリスクは低いと考えています。強いライセンスを適用したOSSのコードをそのまま使ってしまうリスクについては、Suggestions matching public code という設定があるため、これを off にしておくことで緩和できます。サジェストされる前に、コードがOSSのコードと一致してしまっていたらサジェストされないようにする設定です。

Back in June, we introduced a feature that allows developers to block suggestions of 150+ characters matching public code)

https://github.blog/2022-11-01-preview-referencing-public-code-in-github-copilot/

どうやらスニペットの大きさでいうと150 文字が閾値とのことでした。

基本的には上記設定を off にしておけば大きなコピペは発生しないと理解すれば、問題は軽微と考えました。
Individuals ではオーガニゼーション単位での設定もできないため、このライセンスの問題についても Individuals では設定漏れなどもあり問題が発生する可能性が高くなりそうです。

弊社レポジトリは Private ですが、仮にコード流出などがあった場合に、重大な違反があった場合には咎められる可能性はあります。とはいえ、Copilotをつかってミキシングされた情報を元にしたサジェストを使用している範囲内であるなら、特定エンジニアが特定のレポジトリを参考にしてコードを書いているのと同等程度のリスクだろうとざっくり考えました。このような、他のレポジトリのコードを参考にしたりコピペしたりすることもエンジニア個人のスタンス・スキルに依存するため完全に防ぐことはできず、Copilotを入れたからといって極端にリスクが上がるものではないです。 (※咎められる、という表現で何が発生するかは元となったコードのライセンス次第。コードをOSSとしての公開を強制されるとか、使用料金が発生するとか。)

ライセンス侵害が問題になった時の防御

2022/12 にでた terms によれば、以下のように書かれており、50万米ドルまで肩代わりしてくれることになっています。

第三者からの請求の防御。
本契約の他の文言にかかわらず、GitHubは、GitHub Copilotの利用が企業秘密を不正利用した、または第三者の特許、著作権、商標、その他の知的財産権を直接侵害したという無関係の第三者からのクレームに対して、50万米ドルまたはクレームに先立つ12ヶ月間にGitHub Copilotを利用した対価のうち大きい金額を上限としてお客様を防御します。GitHubの防御義務は、(i)GitHub Copilotが提供したSuggestionと異なるコードに基づく請求、(ii)第三者の知的財産権またはその他の権利を侵害する可能性のあるコードの意図的または不注意な使用を防ぐために設計された合理的なソフトウェア開発レビュー慣行に従わない、(iii) GitHub Copilotで利用できるすべてのフィルタリング機能を有効にしなかった場合には適用しません。

すごくざっくり要約すると、1. suggestions に基づくものだけよ。 2. レビューしとけよ。 3. フィルタ設定入れておいた場合のみ、という制限はあり、上述のSuggestions matching public codeの設定が重要であることが分かります。

その他

Copilot X の Waitlistに登録する

Waitlist 再掲: https://github.com/github-copilot/chat_waitlist_signup/join

VS Code および Visual Studio とネイティブに統合するエディターにチャット インターフェイスを導入します。

現在は使えるエディタは限られているので注意。

join waitlist のページに書かれている規約はGitHub本体の規約ですが、その中にベータプレビューについての記述もありました。

以下は特に重要と思われる内容についてピックアップしておきます。

  • お客様は、これらのプログラムを通じて機密情報を受け取る場合があり、プログラムがプライベートなものである間は機密を保持する必要があります。 - 要約: ベータの内容は漏らすなよ

  • また、ベータ プレビューは、本サービスがこれまでおよび現在受けているものと同じセキュリティ対策および監査の対象にはなりません。 ベータ プレビューを使用することにより、お客様は、自己の責任において使用することになります。 - 要約: 使うのはリスクがある。個別の会社での判断になる。

弊社では、Waitlist には並んでおいて、いざ使えるとなったら、リスク許容できるかどうかはその時に考えることとしました。その時点で判断材料となる事例などの情報が増えているだろうと考えています。

特に参考にした資料

zenn.dev

ライセンスに関する論点など、こちらも参照するのがおすすめです。

あとがき

ほぼ書き上がった後に気がついたのですが、2日前にめちゃ似た記事が上がっていました! ちょっとだけ私の書いた方の記事の方が詳しいと思うので車輪の再発明はお許しください。

dev.classmethod.jp

採用もしてます

sg.wantedly.com

Copilotは「副操縦士」ですが、弊社で「パイロット」になることに興味がある方がいればお声がけください。こういったツールの意思決定や社内文化についてのカジュアルなお話も随時受け付けています(wantedlyで応募でも、@yamotukiまでメンション下さっても問題ありません)。