GitHub Copilotの全社導入効果について

ヘッドウォータース(以下、HWS)では2023年4月にGitHub Copilotの全社導入[^1]を行いました。本記事では、GitHub Copilotの導入効果について紹介します。

※本記事の内容は2023年10月時点での情報をもとに作成しております。

[^1]: https://www.headwaters.co.jp/news/gptai_github_copilot_for_business.html

# GitHub Copilotとは？
開発者がコードをよりすばやく記述することを可能にする、AIを活用したコード補完ツールです。Microsoft社とOpenAI社により開発され、GitHub社から提供されています。企業向けのGitHub Copilot for Businessでは、1ユーザーあたり19ドル(2023年10月現在)で利用を開始することができ、サポートされているいくつかのコードエディター[^2]で使うことができます。

GitHub Copilotを使うことで、開発者は、断片的なコードからAIによるコード補完を得ることができたり、コメントからコードを自動生成したりすることができます。GitHub Copilotが使用するAIはGitHub上のオープンソースをもとに学習を行っており、GitHub Copilot for BusinessでGitHubに送られる断片的なコードやプライベートリポジトリのソースコードが学習に使われることはありません[^3]。

[^2]: JetBrains IDEs、Vim/Neovim、Visual Studio、Vidual Studio Code
[^3]: https://docs.github.com/ja/copilot/overview-of-github-copilot/about-github-copilot-for-business

# GitHub Copilotの導入目的について
HWSでは、エンジニアの実装業務効率化による<font color="red">開発スピードの向上</font>と<font color="red">コード品質の向上</font>を主な目的として、GitHub Copilotが導入されました。

より具体的には、以下のような効果を期待していました。
● シンプルなコードを書く時間の短縮
● スペルミスなどのヒューマンエラー低減
● 開発者が初めて実装に利用する開発フレームワークなどの学習補助

# GitHub Copilot導入効果検証の方法について
2023年6月~7月にかけて、全社員向けにGitHub Copilot導入についてのオンラインアンケートを実施し、GitHub Copilotが業務の効率化に繋がっているかどうかを調査しました。また、GitHub Copilotを特に積極的に使っている一部の回答者に対しては、追加でインタビューを実施し、具体的なユースケースや使ってみてのリアルな感想などをヒアリングしました。

# GitHub Copilotの導入環境について
HWSエンジニアの多くはVisual Studio Codeを利用しており、今回のアンケート回答者は全員がVisual Studio Code上でGitHub Copilotを利用していました。また、今回の調査では使用言語や利用目的は特に制限せず回答を募集したため、エンジニアの開発作業全般における回答結果となっています。

# 結論
結論としては、基本的には従来のコード補完ツールのように使いつつ、書きたいコードが明確な時はコード提案を採用することで実装効率向上が期待できることがわかりました。ただし、コード提案の利用判断はエンジニア自身が都度判断しないといけない点は注意が必要です。

<details><summary>回答結果から得られた評価サマリー（一部抜粋）はこちら</summary>

- エディタの補完機能よりもGitHub Copilotの方が便利である。
- 可読性の向上やチーム開発時の意思疎通に効果的である。
- リファクタリングなど既存コードの改善や修正にはあまり使えないとの意見が多く、その目的にはChat GPTを利用している人が多い。（※今後、Copilot Xに期待）
- 実務経験が浅いエンジニアの方が業務効率の向上を実感していた。（ただし、実務5年以上経験者も56%は向上を実感）
- コード提案にかかる時間が長いと感じている人はほとんどいない。
- コード提案を使うことで自分の実力以上の実装を行えるようになることは少ない。
</details>

<details><summary>得意なユースケース例はこちら</summary>

- util系の関数定義をする場合や実装頻度の低い処理を書く場合のコード提案。
- 毎回書く必要のあるようなコードの提案。
- チーム開発観点における、新規メンバーが参画した場合のチーム実装ルールのキャッチアップ。
- 得意な言語を持っているエンジニアが知識の少ない言語で実装をする場合のコード提案。
- 経験の浅いエンジニアが静的型付け言語で実装をする場合の型定義に関するコード提案。
</details>

<details><summary>あまり得意ではないユースケース例（※2023年7月時点）はこちら</summary>

- リファクタリングなど既存コードの改善や修正。
- 外部ライブラリを利用した実装。
- 動的型付け言語のコード提案。
- 実務経験の少ないエンジニアの学習補助観点。
</details>

# アンケート結果
以下は各アンケート項目の回答結果です。
### GitHub Copilotを利用したことで業務効率が向上したと思いますか？
![スクリーンショット 2023-12-02 17.48.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/be563198-53a2-9679-5a28-52897477ad32.png)

全体の結果としては、63%が向上したと回答した。特に、実務経験5年未満の人で向上したと回答した人は71%となっており、全体の結果よりも高かった。

<br />

### GitHub Copilotの利用を通して自分自身の実装力が向上したと思いますか？
![スクリーンショット 2023-12-02 17.33.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/58ab8596-23f2-c97a-0acf-fcf883215382.png)

75%が実装力の向上は感じていないと回答しており、学習補助効果は薄い。

<br />

### GitHub Copilotを利用したほうが難しい処理の実装ができると感じますか？
![スクリーンショット 2023-12-02 17.48.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/487e6456-1b26-004e-7b51-f0cddb3a61a0.png)

75%が効果を実感していないと回答しており、GitHub Copilotを使っても自分の実力以上に高度な実装を行うことの補助効果は薄い。

<br/>

### GitHub Copilotの提案コード採用率はどのくらいですか？
![スクリーンショット 2023-12-02 17.35.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/03b05b16-0251-91a5-336a-944bd3b8e129.png)

コードの採用率が高い人ほど業務効率の向上を感じている傾向があった。
うまく提案してくれる事が多い利用環境の人ほど効果を感じていると考えられるが、数名のインタビューを通して、<font color="red">「とりあえず提案コードを採用して間違っているところは自分で直す」というスタンスの人ほど結果的にGitHub Copilotの恩恵をより享受できている</font>という可能性も感じた。

### GitHub Copilotの提案コードを採用する時・採用しない時の理由
<dl>
  <dt>採用する時</dt>
  <dd>・自分が書くよりも分かりやすい。または全てを採用しなくても自分でアレンジを加えることで完成することができる。</dd>
  <dd>・自分の好みやプロジェクト内のコーディングルールを把握して提案してくれるため、違和感なく取り入れることができる。</dd>
  <br/>
  <dt>採用しない時</dt>
  <dd>・コーディングルールに反する時、方向性が違うコードを提案された時。</dd>
  <dd>・明らかに間違っているコードを提案するときもある。</dd>
</dl>

### GitHub Copilotを使っていて便利なこと・不便なこと
<dl>
  <dt>便利なこと</dt>
  <dd>・基盤作成時などいつも書かないといけないようなソースコードを書く手間が大幅に減った。</dd>
  <dd>・書きたいコードを即座に提案してくれる。型定義や変数名以外にコメントアウトの補完もしてくれる。</dd>
  <br />
  <dt>不便なこと</dt>
  <dd>・回線状況によって提案まで時間が掛かる時がある。Copilotを導入したことでエディターがもっさり重たくなった。</dd>
  <dd>・補完が明らかに違う時は補完表示が邪魔に感じる。</dd>
</dl>

# Appendix ： ファイル認識スコープの検証
<font color="red">※以下はHWSで独自に(そして簡単に)検証した結果であり、公式に発表されている仕様ではないため、内容の正確さは保証されません。参考程度に読んでいただければと思います。</font>

## 結論
<dl>
  <dt>認識ファイルのスコープについて</dt>
  <dd>vscode上で<strong>開いている</strong>ソースコードが提案に利用されます。そのため別プロジェクトのソースコードでもvscode上でファイルを開いていれば提案に利用してくれます。逆に同プロジェクト内でもvscode上で開いていなければ提案には利用されません。</dd>
  <br />
  <dt>認識ファイル数の上限について</dt>
  <dd><strong>提案に利用するファイル数は20が上限</strong>でそれ以上ファイルを開いていると、古いファイルから順に提案へ使われなくなります。ただ提案に使われなくなっても開いているファイルの中から不要なものを閉じて減らすことで再度提案へ利用されるようになります。</dd>
</dl>

## ファイル認識スコープの検証方法
・test/test1.pyとtest/test2.pyの二つのファイルを格納しフォルダ外にtest3.pyを作成（図A）
・test1.pyに”2つの引数の合計値を返す関数”を記載（図B）
・別ファイルに同じように計算処理の関数を記載しようとした時、test1.pyを開いている状態と閉じている状態で、プロジェクト内のファイル(test2.py)とプロジェクト外のファイル(test3.py)それぞれで同じフォーマットの提案をしてくれるか検証。

**図A**
![スクリーンショット 2023-12-02 17.36.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/3c19b787-28e5-969c-c4d5-78ec9a763591.png)


**図B**
![スクリーンショット 2023-12-02 17.36.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/d5168bc2-ea27-25df-15e4-47c738ddf4b4.png)


## 結果
提案してくれた場合は○、してくれなかった場合は×
| 条件 | 結果 |
|:-:|:-:|
| 同ファイル内で似た関数を記載した時  | ○ |
| test1.pyを開いた状態で、同PJ内の別ファイルに似た関数を記載した時 | ○ |
| test1.pyを閉じた状態で、同PJ内の別ファイルに似た関数を記載した時 | × |
| test1.pyを開いた状態で、PJ外のファイルに似た関数を記載した時 | ○ |
| test1.pyを閉じた状態で、PJ外のファイルに似た関数を記載した時 | × |

→ **VSCode上で開いていれば同一プロジェクトかどうかに関わらず提案に使われる。**

## ファイル認識スコープに関するインタビュー

<dl>
  <dt>GitHub Copilotによるファイル認識スコープを意識することはあるか。　また、どの範囲のファイルが認識されていると感じるか</dt>
  <dd>・特に意識はしないが、ソリューションやプロジェクト単位のソースコードまではみている気がする。
外部のモジュールをインストールして使う場合、その使い方まではわかっていない気がする。
<strong>開いているファイル上にない情報なのに、なんでこれを提案できたの？と思うことは結構ある。</strong></dd>
  <dd>・体感ですが、少なくともVS Codeで開いているプロジェクト内のファイルは認識されていると思う。
また、同一ファイル内の場合はフォーカス行の前のコードの方が後のコードよりも優先的に認識されているように感じる。
</dd>
</dl>

<br />

人によっては検証の結果得られた認識スコープ以上に認識されていると感じることもあるようでした。これは大規模言語モデルを使ったコード補完ツールならではの強みで、GitHub Copilotのポテンシャルの高さを表していると思います。

## ファイル認識数の検証方法
・開いた状態のファイル全てに適当な汎用的関数を一つ記載しておく
・ファイル認識スコープの検証と同様に、test1.pyに計算処理の関数を記載して、開くファイルの数やファイルの位置を移動させて検証を行った。

## 結果

| 検証内容 | 結果 |
|:-:|:-:|
| 提案に使うファイル数の上限 | <font color="red">20</font> |
| 開いているファイルの位置による提案への影響 | なし |
| 使わないファイルを閉じた場合 | 開いているが上限を超えたことにより提案に使われなくなったファイルが再度提案に使われるようになる |

# まとめ
GitHub Copilotを導入したことにより過半数のエンジニアが業務効率の向上を実感している事がわかりました。特に自分の書きたいコードが明確に頭の中にあるような場合は、GitHub Copilotの提案によってコーディングの時間を大幅に省略してくれていそうです。また、「GitHub Copilotを使うことの副産物としてコード内のコメントが増えて、結果としてエンジニア間の意思疎通が取りやすくなる」という意見もあり、チーム開発においてさらに効果を発揮するポテンシャルも感じます。一方で、まだ提案内容の精度には課題がありそうなので、そこは今後の改善に期待かなと思います。

本記事が少しでもGitHub Copilot導入検討の参考となれば幸いです。

# ヘッドウォータースでは一緒に働くエンジニアを募集しています！
カジュアル面談も歓迎です！
まずは話だけ聞きたいという方も、ぜひご応募いただければと思います！

https://www.wantedly.com/companies/headwaters/projects