NTTドコモR&Dの技術ブログです。

NTTドコモのGitHub Copilot導入事例とその成果

# はじめに こんにちは!NTTドコモの大林(@dcm_tohbayashi)です。

dポイント/d払い加盟店様向け集客・販促サービス(スーパー販促プログラム)を担当しており、アジャイル開発によるプロダクト開発に携わっています。

今回は、我々のプロジェクトで取り組んでいるGitHub Copilot活用による開発効率向上について、紹介させていただきます。(10名~40名程度の中規模プロジェクトで導入しています)

本記事はGitHub Copilotに興味がある人、チーム内への導入を検討している人を対象にしています。 実際、私たちもプロジェクトでGitHub Copilotを活用する中で、効果や課題があることがわかってきました。本記事にて、ぜひみなさんにそれを共有できれば嬉しいです。

(本記事は、NTTドコモ R&D Advent Calendar 2024 の22日目の記事となります)

Github Copilotの概要

GitHub Copilotとは何か?

GitHub Copilotは、GitHub社が提供するAIを活用したコード補完ツールです。 生成AIによる最適なコード提案やバグ修正提案、コードの説明等のサポートが得られることにより、エンジニアはコードをより速く楽に記述できるようになります。

代表的な機能(2024/11時点)

参考:https://docs.github.com/ja/copilot/about-github-copilot/what-is-github-copilot

GitHub Copilot

サポートされている IDE (Visual Studio Code、Visual Studio、JetBrains IDE、Azure Data Studio、Vim/Neovim) での Copilot からのオートコンプリート スタイルの提案をしてくれます。

  • コードの候補を表示
    • 入力したコードやコメントに基づいて、関数やクラス、変数、処理の候補を提示する
  • コードのバグ修正
    • 選択したコードやエラーメッセージから問題の原因と修正案を提示する

GitHub Copilot Chat

サポートされている IDE (Visual Studio Code、Visual Studio、JetBrains IDE) やGitHub ウェブサイト、GitHub Mobileでコーディング関連の質問をできるチャット インターフェイスです。

  • コード生成
    • ChatGPTのように自然言語を指示してコード生成を行う
  • コードの説明
    • コードの内容や動作を自然言語で説明する

導入の狙い

我々のプロジェクトでは、利用者へ素早くより多くの価値を届ける体制作りや環境作りを進めています。その取組みの一環として、以下2点を狙い導入を決めました。

  • 開発効率の向上
    • 生成AIのサポートにより、コーディング時間や検索時間短縮を実現し、リリースまでのリードタイムを短縮する
  • エンジニアの負担軽減
    • 生成AIのサポートにより、内容理解や検索時間の負荷軽減をすることで実装中のフラストレーションを減らし、エンジニアが集中して作業できる環境を作る

導入後の利用状況・効果測定

2023年10月にGitHub Copilotを導入し、3回導入効果を測定するアンケートを実施しました。 プロジェクト状況により回答者の増減はありますが、チーム内のエンジニアを対象にアンケート収集しています。

  • 第1回(24/01時点) 24名
  • 第2回(24/03時点) 31名
  • 第3回(24/10時点) 10名 

開発効率向上効果

時間節約効果

時間節約効果を問う設問では、78%以上が「1日あたり1時間以上」時間を節約できたと回答してます。一方で、11%が「一日あたり1時間未満」と時間節約効果が低かったと回答しています。一部のエンジニアは利用機会が限られていたことが影響していると考えられます。(プラグイン都合によりJava(Eclipse)導入対象外、業務に占めるコーディング比率が低い等)

また、過去3回のアンケート結果と比較し、時間節約の傾向推移をグラフにまとめました。 利用期間が長くなるにつれて、時間節約効果を実感する声が増えています。 GitHub Copilotの各種機能やプロンプト活用に慣れれば慣れるほどGitHub Copilotによる改善効果を高まり、Copilot側もコーディング機会が増えるほどこれまでの実装内容から利用者の意図を汲み取った提案をしてくれる傾向にあるようです。 このような傾向を元に、利用者の習熟度を高める施策(勉強会やナレッジ共有)を実施し習熟度を高めたことが改善効果を高める上で効果的だった推察します。

作業効率化

作業の効率化を問う設問では、すべての項目で過半数以上が「そう思う」以上の高評価を回答しています。 特に「検索時間短縮*1」については、「そう思う」、「とてもそう思う」の回答が9割に達しており、全項目中で最も評価が高い結果となりました。 GitHub Copilot導入により、製造方法調査/ソース解析/エラー解析の回答が得れるようになったため、検索時間短縮を実感する声が多くありました。

エンジニアの負担軽減

作業の満足度、ストレス軽減に対する設問では、過半数以上が「そう思う」以上の高評価を回答しています。 一方で、充実感を問う設問では、「そう思う」以上が20%でした。割合としては低い結果となりましたが、コーディング業務比率が高いエンジニアほど「そう思う」の回答数が多い傾向にありました。 GitHub Copilotを利用する機会が多い人ほど充実感を実感する傾向にあると推察します。

開発工程毎の利用価値

開発工程毎のGitHub Copilot利用価値について、集計してみました。 両機能ともどの工程においても過半数以上が「かなり使える」、「手放せない」の高評価を回答しています。 工程別傾向はどちらの機能も同じ分布(実装>バグ解析・改修>試験)を示す結果となりました。 また、設計工程は有効回答数が得られないという結果になりました。業務要件に対する理解を求められる設計工程では利用シーンが限らるため、現状は、コーディング業務に対して改善効果を実感する声が多いことがわかります。

GitHub Copilot GitHub Copilot Chat

エンジニアからの声

実際に使ってみたエンジニアからは、GitHub Copilot導入に対する好意的な意見を多くありました。

  • コードで理解しづらいところは範囲選択をするとどんな処理をしているのかを説明してくれるので、部分的にも全体的にもわかるようになっていて便利に思う
  • コーディング自体には携わっていないが、自分の目でコードを追わなくてもCopilotChatを使うことで処理内容を要約してくれるのでバグ解析などで役に立っている
  • ソースを理解する速度が早くなったため、ソースを頭から追う時間が短縮された
  • 処理の書き方が分からないときや、どんな処理が書かれているかを理解するのにとても役立っている
  • GitHub Copilot導入によってリファクタ対応の速度が上昇したり、製造時のヒントなどを聞くことができ時間短縮につながっているように感じる
  • スタックトレースをチャットで投げることでエラーの原因を回答してくれるので、バク解析に重宝しています
  • 製造だけでなく、ソース解析やリファクタリングにも使えるのが嬉しいです
  • Copilotを利用してコーディングをすればするほどCopilot側も何を意図しているかを汲んでくれるようになるのでCopilotなしのコーディングにはもう戻れない気がする
  • @workspaceを指定して問いかけるとワークスペース内のコードを読み込んだうえで回答してくれるのでプロジェクト特有の作りにもある程度対応した回答をしてくれる

利用時に気を付けるべきポイント

ここまでは良い点ばかりを書いてきましたが、利用する中で見えてきた課題/注意点も見えてきたので紹介します。

  • 最終的なコードの正否やリスク判断はエンジニア自身でする必要がある

    • 生成されたコードを妄信するのではなく、最終的にはエンジニア自身がコードの正しさやリスクを判断するコーディングスキルは依然として求められる
    • ネットで掲載されていないような不具合の原因特定や修正が困難なものは、Copilotが回答してくれないケースもある
  • コード共通化は必要に応じてエンジニアが対応する必要がある

    • プロジェクト内のコードを参照して実装を提案してくれるが、共通機能を利用するといった痒いところには手が届かない
  • プロンプトの使いこなしが重要

    • GitHub Copilotではプロンプトの入力内容を元に回答を生成するため、プロンプトの書き方によって生成結果が左右される
    • どのようなプロンプトで指示を与えるとよいか、プロンプトエンジニアリングを合わせて学ぶとより高い効果が得られる可能性が高い
  • コード生産性向上効果を測定することは難しい

    • GitHub Copilot導入による生産性効果を検証するため、規模生産性(実装規模/総稼働時間)の推移を定期的に計測しましたが、GitHub Copilot以外の影響を除外できず、どの程度の効果が出ているか判断が難しい結果となりました
    • 実際に計測を進めるためには、類似機能をGitHub Copilotあり、なしで実証実験をするなどのPoC検証をする必要があると考えます
    • 我々のプロジェクトでは、アンケート結果からGitHub Copilot導入に好意的な意見が多く得られることがわかったため、コード生産性に対する精緻な効果測定までは実施しない判断をしました

まとめ

本記事では、NTTドコモにおけるGitHub Copilotの導入状況とその効果についてご紹介しました。 みなさまの参考になれば幸いです。 NTTドコモでは、今後も積極的に新しいツールを活用し開発効率化を推進していきます。

*1:検索時間とは、主にコーディング方法調査やエラー解析、既存実装の解析など、これまでGoogle検索等で行っていた調査にかかる時間のこと