はじめに
こんにちは、CTO/DevRelブロックの堀江(@Horie1024)です。ZOZOではGitHub Copilotを全社へ導入しました。本投稿では、GitHub Copilotの導入に際して検討した課題とその課題の解決策としてどのようなアプローチを取ったのかを紹介します。
目次
- はじめに
- 目次
- GitHub Copilotとは何か?
- GitHub Copilot導入の背景と目的
- 導入する上での課題
- 試験導入の実施
- 全社導入の判断
- 導入決定後のGitHub Copilot利用環境の整備
- まとめ
- さいごに
GitHub Copilotとは何か?
GitHub CopilotはGitHub社が提供するAIを活用したコード補完ツールです。開発者はコードを書き始めるか、そのコードに何をさせたいのかをコメントに記述することでGitHub Copilotのサポートを得られ、コードをよりすばやく記述できるようになります1。また、GitHub Copilotの能力を強化するGitHub Copilot Xのリリースも予定されています。AIとのチャットによる既存コードの分析や修正提案、Pull Requestの作成など、開発のライフサイクル全体を通してAIがサポートすることでよりスムーズな開発者体験の実現が期待されます2。
GitHub Copilot導入の背景と目的
ZOZOでは、ZOZOTOWNやWEAR、FAANS、ZOZOFITといった複数の事業でこれから実現していきたいことが多くあり、ユーザーへより多くの価値を素早く届ける体制作りを進めています。リリースまでのリードタイムのうち開発のプロセスが全てを占める訳ではありませんが、開発効率を向上させることは重要です。そして、開発効率の向上を目的とする施策の一環として、GitHub Copilotを導入することにしました。
GitHub Copilotが開発効率に与える影響について、GitHub社により行われた興味深い調査があります。この調査では、2,000名を超える開発者へのアンケート、GitHub Copilotの使用有無でタスクの完了までの時間に差が発生するかの対照実験を95名の開発者を対象に行なっています。
この調査では、抜粋すると次のような結果が報告されています。
- GitHub Copilotを使用した開発者の60-75%が開発の満足度が向上したと回答
- GitHub Copilotを使用した73%の開発者が集中して作業ができ、87%の開発者が繰り返し作業中の精神的疲労を軽減できたと回答3
- GitHub Copilotを使用した開発者群が55%早くタスクを完了
この調査結果を踏まえると、GitHub Copilotを導入することで開発効率を向上させる効果が期待できます。
導入する上での課題
GitHub Copilotを全社へ導入する上での課題として次の3点があげられます。
- セキュリティ上の懸念
- ライセンス侵害のリスク
- 導入による費用対効果
セキュリティ上の懸念
セキュリティ上の懸念として次の2点があります。
- プロダクトのコードが学習に使用されることでの社外への流出
- 提案されたコードへの脆弱性の混入
私達が様々なサービスを利用する際に入力したデータは、機械学習モデルの学習データとして活用される場合があり、特に業務利用では機密情報の入力に気をつける必要があります。GitHub Copilotにおいても入力となるプロダクトのコードが学習に使用される可能性が懸念点としてあがりました。加えて、GitHub Copilotが提案するコードに脆弱性が含まれていた場合、それをそのまま受け入れることでプロダクトに脆弱性を作り込んでしまう懸念もあります。
ライセンス侵害のリスク
普段の開発でOSSを利用しない場面は無く、その利用には各OSSが採用するライセンスを遵守する必要があります。弊社でもOSSの利用ガイドラインを策定してライセンスを侵害しないよう努めています。ライセンスの種類によりますが、侵害した場合OSSを利用したプロダクトのコードの公開要求や賠償請求のリスクがあります。
GitHub Copilotが使用するOpenAIのCodexモデルの学習データにはGituHub上で公開されているOSSのソースコードも含まれます。GitHub Copilotが生成するコードは学習元のコードをそのままコピーするわけではありませんが、特定のコードスニペットがライセンス違反を問われる可能性は存在します。
GitHub Copilot for Businessの利用
GitHub Copilotには、個人での利用を目的としたfor Individualsとビジネスでの利用を目的としたfor Businessの2つのプランがあります。そして、セキュリティ上の懸念およびライセンス侵害のリスクは、GitHub Copilot for Businessを利用することで低減できます。
GitHub Copilot for Businessでは、プロダクトのコードはGitHub Copilotの学習に使用されません4。また、GitHub Copilot for Businessを利用し、脆弱性を含むコードをチェックし提案から除外するフィルタを利用した場合でもGitHub Copilotが提案するコードに脆弱性が混入する可能性はあります5。しかし、脆弱性を作り込まないための対策はGitHub Copilotの使用有無で変わりません。開発者は自身の書いたコードの内容をGitHub Copilotの提案を含め理解した上でPull Requestを作成し、レビュアーによるコードレビューを必ず実施することが脆弱性を防ぐ上で重要です。
また、ライセンス侵害のリスクは、公開されたコードがGitHub Copilotの提案として出力されそれをそのまま受け入れてしまった場合に発生します。GitHub Copilotの設定には「Suggestions matching public code」という項目があります。こちらをBlockedにすることで公開されたコードと一致する提案をブロックし、ライセンス侵害のリスクを低減します。加えてGitHub Copilot for BusinessではOrganization全体にこの設定を強制可能です。
このような対策を講じた上でライセンス侵害が問題になった場合どうすれば良いのでしょうか。この場合、GitHub Copilot Product Specific Termsの第4項6およびGitHub Customer Agreementの第6項、第7項が適用されます。それにより第三者からの賠償請求に対してGitHub社から無制限の補償を受けられます7。
導入による費用対効果
GitHub Copilotを全社へ導入する上でその費用を賄う予算をどう確保するかは課題となります。GitHub Copilotを導入することで開発効率を向上させる効果が期待できますが、予算を計上するには費用対効果を意識する必要があります。ここで、導入に係る費用はGitHub Copilotの利用料金であり、その効果は開発効率を向上させたことでどの程度コストを削減できたかです。GitHub Copilotの導入にコストメリットがあると示すことは予算の承認を受ける上で重要です。
試験導入による費用対効果の見積もり
弊社では、費用対効果を見積もるために、GitHub Copilotの試験導入を計画しました。試験導入によって実際の開発業務でどの程度コスト削減できたかを可視化し、GitHub Copilotの導入にコストメリットがあると確認することで全社への導入判断に役立てます。
試験導入の実施
試験導入では、社内の様々な開発者を対象者として選出します。対象者には試験導入の終了後にアンケートを実施し、その集計結果から費用対効果を見積もります。そして、その結果を踏まえGitHub Copilotの全社への導入を判断します。
試験導入の開始から終了までのプロセスは次のとおりです。
- 試験対象者の選出
- アンケートの設計
- 試験導入の実施
- アンケート結果の集計
- アンケート結果の考察
- 費用対効果の見積もり
対象者の選出
試験対象者の選出には、様々な属性の対象者に対して満遍なく試験ができるよう次のような観点を設けました。
- 業務内容や使用するプログラミング言語、開発環境が異なるよう選出すること
また、望ましい対象者のパーソナリティとして次の点をあげています。
- 新しいツールを試すのが得意
- 導入時にチーム内で有効な活用方法を教示できる
これらの条件を元に社内の各マネージャーに対して開発効率の向上を狙いたいチームから各1名を目安に選出を依頼し、最終的に56名を対象者に選出しました。
対象者の一日の仕事の中でコーディングに費やす時間、GitHub Copilotと共に使用したプログラミング言語、開発に使用したエディタ・IDEは次のとおりです。
アンケートの設計
アンケートの設計は、GitHub社の調査を参考にZOZO独自の設問を追加する形で行いました。
次は実際のアンケートの設問内容です。
設問 | 選択肢 |
---|---|
開発でGitHub Copilotと共に使用したプログラミング言語を教えてください。 |
|
前問でその他を選択されえた方はこちらにプログラミング言語名をご入力ください。 | 記述式 |
あなたの職種を教えてください。 |
|
開発に使用したエディタ・IDEを教えてください。 | 記述式 |
GitHub Copilotを使用することでより生産的になった。※必須 |
|
一日の仕事の中でコーディングに費やす時間はどれくらいですか? |
|
GitHub Copilotを使用するとコーディング時のイライラが軽減される。 |
|
GitHub Copilotを使うことで仕事に充実感を感じられるようになった。 |
|
GitHub Copilotを使用することで繰り返し作業をより迅速にこなすことができるようになった。 |
|
GitHub Copilotを使うことでより満足度の高い仕事に集中できるようになった。 |
|
GitHub Copilotを使用することでより早くタスクを完了できるようになった。※必須 |
|
GitHub Copilotを使用することでフロー状態(作業に没頭し集中できる状態)に入りやすい。 |
|
GitHub Copilotを使用することで検索にかかる時間が短縮された。※必須 |
|
GitHub Copilotを使用すると繰り返し作業に費やす精神的な負担が軽減された。 |
|
1日あたり、GitHub Copilotを使用することでおおよそどれくらいの時間を節約できましたか?※必須 |
|
GitHub Copilotについて同僚に共有したいこと(tips等をまとめたページやSlackのコメントなど)があれば教えてください。 | 記述式 |
GitHub CopilotについてGitHubへのフィードバックがあれば教えてください。 | 記述式 |
テンプレートとの差分ですが、回答者の細かい属性を取得するために次の設問を追加しています。
- 「開発でGitHub Copilotと共に使用したプログラミング言語を教えてください」
- 「前問でその他を選択された方はこちらにプログラミング言語名をご入力ください」
- 「あなたの職種を教えてください」
- 「開発に使用したエディタ・IDEを教えてください」
加えて、テンプレートに存在した設問「GitHub Copilotでの経験について同僚に知っておいてほしいことはありますか?」については次のように変更しています。
- 「GitHub Copilotについて同僚に共有したいこと(tips等をまとめたページやSlackのコメントなど)があれば教えてください」
また、「1日あたり、GitHub Copilotを使用することでおおよそどれくらいの時間を節約できましたか?」の設問については、回答の選択肢として選べる時間区分をより細分化しました。
試験導入の実施
試験導入は期間を2週間として実施し、試験対象者への連絡は専用のSlackチャンネルにて行いました。
試験期間中には、GitHub Copilotを実際に使用して得た知見を試験への参加者同士で共有することを推奨しました。これはGitHub Copilotが活発に利用され、より良い試験導入とすることを意図しています。
試験導入は予定通り2週間で終了し、参加者にはGoogleフォームで作成したアンケートに回答頂きました。
アンケート結果の集計
アンケート結果の集計結果は次のとおりです8。
アンケート結果の考察
設問「GitHub Copilotを使用することでより生産的になった」への回答では、78.9%がGitHub Copilotを使用することでより生産的になったと回答しています。その他の設問でも「とてもそう思う」「そう思う」の合計は、ほとんどの設問で過半数を超えています。また、設問「1日あたり、GitHub Copilotを使用することでおおよそどれくらいの時間を節約できましたか?」への回答では、58%が1日あたり30分以上時間を節約できたと回答しています。
また、アンケートの次の設問は、SPACEフレームワーク9の「満足と幸福」に対応しています10。
- GitHub Copilotを使用するとコーディング時のイライラが軽減される
- GitHub Copilotを使うことで仕事に充実感を感じられるようになった
- GitHub Copilotを使うことでより満足度の高い仕事に集中できるようになった
回答結果を見ると、これらどの質問に対しても40%から50%の回答者が「とてもそう思う」「そう思う」と答えています。
加えて、次の設問はSPACEフレームワークの「効率とフロー」に対応しています。
- GitHub Copilotを使用することで繰り返し作業をより迅速にこなすことができるようになった
- GitHub Copilotを使用することでより早くタスクを完了できるようになった
- GitHub Copilotを使用することでフロー状態(作業に没頭し集中できる状態)に入りやすい
- GitHub Copilotを使用することで検索にかかる時間が短縮された
- GitHub Copilotを使用すると繰り返し作業に費やす精神的な負担が軽減された
設問「GitHub Copilotを使用することでフロー状態(作業に没頭し集中できる状態)に入りやすい」への回答は「とてもそう思う」「そう思う」の合計が29.9%です。しかし、それ以外の設問では60%を超えています。
これらの結果から、ZOZOの場合においてもGitHub Copilotを利用することで開発者の「満足度と幸福度」「効率とフロー」に良い影響を与えられると言えるでしょう。
78.9%がGitHub Copilotを使用することでより生産的になったと回答する一方、「そう思わない」「全くそう思わない」という回答も存在します。この原因を探るため「GitHub Copilotを使用することでより生産的になった」への回答を職種別に集計しました。
次は「GitHub Copilotを使用することでより生産的になった」への回答の職種別の集計結果です。iOSエンジニアにおいて「そう思わない」「全くそう思わない」と回答する割合が増えています。
今回の試験ではiOSエンジニアが開発に使用した開発環境はXcodeのみでしたので、プログラミング言語別、開発環境別での集計もSwift、Xcodeが同様の結果となります。
Xcodeは、GitHub Copilotが公式にサポートしているエディタに含まれていません11。XcodeからGitHub Copilotを利用するには非公式のプラグインを利用する必要があり、このような結果となった一因であると考えられます。iOSアプリ開発においてもGitHub Copilotを活用しやすい環境を整えることは導入後の課題となります。
費用対効果の見積もり
アンケートの集計結果を元に費用対効果を見積もります。アンケート「1日あたり、GitHub Copilotを使っておおよそどれくらいの時間を節約できましたか?」の回答結果を参照し、月あたりのコスト削減金額を計算します。そして、GitHub Copilotの利用料と比較することで費用対効果を見積もります。
まず、人件費、年間休日数、1日あたりの労働時間を次のように仮定します。
人件費 | 年間休日数 | 1日あたりの労働時間 |
---|---|---|
800万/年12 | 120日 | 8時間 |
この場合時給は4,082円となり、1日あたりの節約時間より計算すると平均削減金額は、1日あたり最大で4,917円/人、最小で2,372円/人になります。月(20営業日)で換算すると、月あたりの平均削減金額は次のようになります。
最大 | 最小 |
---|---|
98,340円/人 | 47,440円/人 |
また、GitHub Copilotの月あたりの利用料は次のとおりです。
- $19/月/人 ≒ 2,736円/人(為替レート144円13/ドルで計算)
したがって、「GitHub Copilot導入による人件費の平均削減金額」と比較して、次の金額だけコストメリットがあると見積もりました。
最大 | 最小 |
---|---|
95,604円/人 | 44,704円/人 |
全社導入の判断
前述の通り、GitHub Copilotの導入には3つの課題がありました。
- セキュリティ上の懸念
- ライセンス侵害のリスク
- 導入による費用対効果
セキュリティ上の懸念およびライセンス侵害のリスクについては、GitHub Copilot for Businessを利用することでその懸念とリスクを低減できます。また、導入による費用対効果についても十分な効果とコストメリットがあると判断したことから、GitHub Copilotの全社導入を決定しました。
導入決定後のGitHub Copilot利用環境の整備
GitHub Copilotの導入決定後、全社でGitHub Copilotを利用できる環境の整備を進めました。
まず、全社に対してGitHub Copilot利用希望者のリストアップを依頼しました。その後、コーポレートエンジニアリングチームと連携しながら総利用金額の見積りと予算確認の後、希望者全員に対してGitHub Copilotを有効化しました。また、GitHub Copilotの利用に関する社内承認フローを整備し、運用ルールについても整備しています。
社内LT会
GitHub Copilotを活用していく上で重要なのは、まずどのような使い方ができるかを開発者が知ることです。執行役員CTO瀬尾(@sonots)のアイデアもあり、GitHub Copilotのtipsについて発表するLT大会を開催しました。登壇者は試験導入への参加者の中から8名に依頼しています。
LTのタイトルは次のとおりです。
タイトル | GitHub Copilot × 言語 |
---|---|
GitHub CopilotとAndroid開発 | GitHub Copilot × Kotlin/Java |
PowerShellでGitHub Copilot利用 | GitHub Copilot × PowerShell |
How to use Copilot Successfully with jQuery | GitHub Copilot × jQuery |
Terraform, YAMLでの利用例 | GitHub Copilot × Terraform/YAML |
GitHub Copilotを使ってみた感想 | GitHub Copilot × Java |
iOSアプリ開発におけるGitHub Copilotの活用方法 | GitHub Copilot × Swift |
Copilot使ってみてLT | GitHub Copilot × TypeScript |
GitHub Copilot × VBScript | GitHub Copilot × VBScript |
LT会には約200名が参加し非常に盛り上がりました。様々な言語・フレームワークとGitHub Copilotについての事例をまとめて聞けたので個人的にも勉強になりました。社外秘の情報が含まれるので登壇資料の全てをお見せすることはできませんが、一部を抜粋して紹介しようと思います。
GitHub Copilotを使ってみた感想やまとめを見ると、当然ながら得意とする作業と苦手な作業があります。ペアプロの体験になぞらえた体験例も面白いですね。また、GitHub Copilot × Swiftの事例では、GitHub CopilotとXcodeとの相性やVSCodeを使ったコーディングについて触れられていました。どのようにすればiOSアプリ開発でGitHub Copilotをより活用できるかを探る必要があります。iOSチームでは全社導入後にもiOSアプリ開発でのGitHub Copilotの活用方法について勉強会を開いており、他の領域でも同様な勉強会が開催できればと考えています。
型定義をGitHub Copilotに与えること提案の精度が上がることもLTで報告されており、GitHub Copilotを活用していくヒントとなりました。
巨大なjQueryで書かれたコードに対して、GitHub CopilotにJSDocで型定義を書いてもらうことでコードリーディングを容易にする事例もありました。初見のコードに対してそのコードが何をしているかを理解する上でもGitHub Copilotは有効活用できそうです。
ZOZOTOWNのコードベースではJavaへのリプレイスが進んでいますが、今でもシステムの大部分をVBScriptが支えています14。今回の試験導入で、VBScriptでの開発についてもGitHub Copilotが有効に活用できる事例を得られたことは、既存機能の改修とリプレイスを行う際にもプラスになると考えています。
おまけ
GitHub Copilotが提案したコメントなのですが、謎のクリスマス事件として盛り上がりました。
まとめ
現在ZOZOでは社内のほぼ全ての開発者がGitHub Copilotを活用して開発業務を行なっています。GitHub CopilotはGitHub Copilot Xとして今後も継続的に機能の追加が予定されています。それにより開発効率を向上させユーザーへより多くの価値を素早く届けるための手助けとなってくれることを期待しています。また、GitHub NextのページではGitHub Copilotに関する興味深いプロジェクトを確認できます。これらのプロジェクトによってどのような開発者体験が実現されるのか楽しみです。
本記事では、ZOZOでのGitHub Copilotの導入にあたって課題となる点や、課題にどのように対応したのかを紹介しました。本記事がGitHub Copilotの導入の一助となれば幸いです。
さいごに
ZOZOでは一緒に楽しく働くエンジニアを絶賛募集中です。ご興味のある方は下記リンクからぜひご応募ください。
- https://docs.github.com/ja/copilot/overview-of-github-copilot/about-github-copilot-for-individuals↩
- https://github.blog/jp/2023-03-23-github-copilot-x-the-ai-powered-developer-experience/↩
- 原文では精神エネルギーの節約とありましたが、ここでは精神的疲労を軽減と表現しました。↩
- GitHub Copilot for Business Privacy StatementでGitHub Copilot for Businessが収集するデータを確認しました。その結果、GitHub Copilot for Businessではコードスニペットデータは保持されず、プロダクトのコードは学習に使用されないと判断できました。また、GitHub for Individualsの設定項目に「Allow GitHub to use my code snippets for product improvements」があります。GitHub for Individualsではこの項目の設定値によって学習への使用有無を制御可能です。↩
- GitHub Copilotには、リアルタイムに安全でないコーディングパターンをブロックするAIベースの脆弱性防止システムが導入されています。詳細はこちらの記事「GitHub Copilot now has a better AI model and new capabilities」をご覧ください。↩
- 「Suggestions matching public code」をBlockedに設定することが契約に基づいて補償する条件として明記されています。↩
- 「GitHub Copilot Product Specific Terms」および「GitHub Customer Agreement」は2023/6/22時点のものを参照し確認しています。また、弊社が締結した契約では無制限の補償を受けられることをGitHub社に確認済みですが、保証内容は契約しているプラン、契約時期によって異なります。エンタープライズ契約でも主契約次第で補償内容が異なる可能性もありますので、必ずGitHub社にご確認をお願いいたします。↩
- 記述式での回答結果の集計は除いています。↩
- https://queue.acm.org/detail.cfm?id=3454124↩
- Albert Ziegler, et al. "Productivity Assessment of Neural Code Completion" arXiv preprint arXiv: 2205.06537. 2022, p.12.↩
- GitHub Copilotがサポートするエディタは2023年6月時点でVisual Studio Code、Neovim、JetBrains系IDE、Visual Studioです。↩
- こちらは仮の人件費です。弊社実績とは関係ありません。↩
- 2023年6月末の為替レートを参照しています。↩
- https://technote.zozo.com/n/ndf768964d62e↩