CTO統括室の黒崎(@kuro_m88)です。サイバーエージェントでは2023年4月下旬より、GitHub Copilotの導入を開始しました。
「実際のところどうなの?」という情報がまだまだ少ないと思われるので、本記事では導入から約3ヶ月が経過した現在の利用状況を公開します。

GitHub Copilotの利用状況

2023年7月現在、サイバーエージェントでは500名以上のエンジニアがGitHub Copilotを利用しています。
追記 7/20: そしてこの数字はGitHubによると現時点で日本で一番多いそうです🎉

サイバーエージェントではGitHub Enterpriseが導入されており、事業部や事業単位でOrganizationを保持しており、導入の条件が整ったOrganizationから順次Issueを起票することで、管理者側でCopilotを有効化するしくみにしています。

Copilotの有効化依頼
Copilotの有効化を依頼している様子

利用にあたってのルール整備などについてはこちらの記事をご参照ください。
生成 AI の利用ガイドラインの策定、生成 AI の利用事例紹介

Accept Rate(Copilotの推薦の採用率)

Copilotが推薦したコードをユーザがどの程度採用したかの指標です。みなさんが一番気になる指標ではないでしょうか。

グラフを読む上での注意点を先にいくつか紹介しておきます。

  • Full Accept(Copilotの推薦をそのまま採用)のみの数字です。Partial Accept(Copilotの推薦を一部採用)した値はグラフに含まれていません。
  • VSCodeの拡張機能としてのCopilotの利用状況のみを集計しているため、VSCode以外の環境での利用状況は含まれていません。
  • サイバーエージェントではGitHub EnterpriseおよびCopilot for Businessを利用しています。Copilot for Businessには個人のGitHubアカウントを紐づける利用形態のため、業務外での利用のAnalyticsも一部含まれています。

CopilotのAccept Rate

Accept Rateは集計期間の平均で32.1%でした。この数値は2023年6月のGitHubの記事とも概ね一致しています。
The economic impact of the AI-powered developer lifecycle and lessons from GitHub Copilot

On average, within the first year in the market, users accept nearly 30% of code suggestions from GitHub Copilot

分散が大きいのでなんともいえませんが、導入から時間が経つにつれてAccept Rateが上昇しているように見えなくもない気がします。

report increased productivity from these acceptances as developers became more familiar with the tool

後述しますが、サイバーエージェントでCopilotを利用しているユーザのうち、約50%がVSCodeを利用していることを考えるとAcceptedの数はこの数字の倍近くになると思われます。

言語別のAccept Rate(Copilotの推薦の採用率)

Accepted Lineの数が集計期間で1000行以上あったものをご紹介します。
定義は前述したものと同様で、Full AcceptかつVSCodeの環境に限られていることに注意してください。

言語ごとのAccept Rate

言語によってAccept Rateに差があるものの、おおむね20-30%のAccept Rateは出ているようです。この差はCopilotのモデルの精度であったり、言語自体の特性によるものと思われます。

Copilotを使っている環境の比率

ここまでのAnalyticsはVSCodeのみの利用状況を集計していますが、サイバーエージェントではVSCode以外の環境でもCopilotが利用されています。

Copilotの環境の比率
Copilotを使っている環境の比率

VSCodeとJetBrainsが大半を占めていて、次点でNeovim/Vimが続いています。このデータを見るまでXcodeでCopilotを使えることを知りませんでした。その他がなんなのか気になるところです。

Copilotを導入してエンジニアの生産性は向上したのか?

実際のエンジニアの感触をアンケート調査等で広く調査することは目下進行中で、今回ご紹介することはできなかったのですが、Accept Rateという指標を得ることでCopilotの導入によってエンジニアの生産性向上に寄与していそうかどうかを推測することはできるようになりました。
厳密に生産性の向上を測るためには定量的な指標がほかにもいくつか必要そうで、残念ながら現時点では「確実に生産性の向上に寄与しているが、具体的にどの程度かまではまだ言語化できていない」というのが正直なところです。どの程度生産性が向上しているかの指標を模索し、それをさらに生産性の向上に役立てていくサイクルにしていく必要があります。

私自身も業務でCopilotを利用しており、個人的に印象に残っている瞬間を紹介させてください。
ある入力を128ビットAESで暗号化する関数を実装しようとしたときに、関数名を書いたあとはCopilotが残りのコードを推薦してくれました。
グレーの部分はCopilotが推薦したコードで、明るい文字の部分は私が書いたコードです。まとまったコードの単位で推薦してくれました。

Copilotが推薦したAESのコード

推薦されたコードは以下です。

func EncryptAES128(key, text string) (string, error) {
	block, err := aes.NewCipher([]byte(key))
	if err != nil {
		return "", err
	}

	encrypted := make([]byte, aes.BlockSize+len(text))
	iv := encrypted[:aes.BlockSize]
	if _, err := rand.Read(iv); err != nil {
		return "", err
	}

	cbc := cipher.NewCBCEncrypter(block, iv)
	cbc.CryptBlocks(encrypted[aes.BlockSize:], []byte(text))

	return base64.StdEncoding.EncodeToString(encrypted), nil
}

このコードがそのまま使えるかというと残念ながらそうではなく、入出力の型が意図と違ったり、IVが使い捨てになっていたり、パディングの処理がないので任意の入力長に対応できなかったりと、いくつかの問題があります。ただ、「だいたいあってる」コードが生成されるので、なにもない状態から実装することに比べれば、実装時間は大幅に短縮されました。
こういったケースはPartial Acceptとして集計されているので、今回のAccept Rateの集計では表現できないようなCopilotの貢献は他にも多く含まれていそうです。

この記事もVSCodeでCopilotを有効化した状態で書いているのですが、Copilotが自分で推薦結果の問題点を指摘しているのは面白いですね。

Copilotの推薦

今のところの個人の感覚としても、ちょっとした推薦は誰でも生産性が上がる、この例のように少し複雑な推薦は、推薦内容を理解するための前提知識がないと妥当性の判断ができないため、生産性が向上するかどうかは人を選ぶという印象です。

費用対効果の観点では、Copilot Businessは月額19ドル(1ドル140円換算で2660円)であることから、1人月あたり数時間分の生産性向上が見込まれるかどうかが元が取れるかどうかのひとつの基準になりそうです。
仮定の計算+肌感覚による判断にはなってしまいますが、サイバーエージェントでは費用対効果の面では少なくとも元は取れていると判断し、順次導入を拡大しています。
また、Copilotに限らず、生成AI技術の活用の幅を広げるべく、社内でも事業部横断での活用事例の共有を進める試みがいくつか進行中です。

企業個人問わず多くの方々が活用方法を試行錯誤している時期かと思いますが、今後も事例を共有していきたいと思います。みなさんの活用方法もぜひ教えてください!

2015年新卒入社 AI事業本部 DX本部 兼 CTO統括室所属。バックエンドの実装やインフラ、セキュリティを担当。趣味で中古サーバやネットワーク機器を買ってデータセンタに設置して運用しています。