生成AIを活用したソフトウェア開発の業務効率化の取り組み紹介

【技業LOG】技術者が紹介するNTTPCのテクノロジー

2024.08.22
AI・ディープラーニング
川尻 真寛

ソフトウェアエンジニア(Java・Android)
川尻 真寛

取得資格:応用情報技術者 / ITIL version3 Foundation / Ruby Association Certified Ruby Programmer Gold

1. はじめに

NTTPCでは、生成AIを活用した業務改善や新規サービスの創出に積極的に取り組んでいます。その中で、今回は私が所属するサービスクリエーション担当で行っている、GitHub CopilotやChatGPTを活用したソフトウェア開発の業務効率化の取り組みについて紹介します。

2. 背景~サービスクリエーション担当の紹介と課題~

私が所属するサービスクリエーション担当は、自社サービスのソフトウェア開発を担う部隊です。市場競争の激化やお客さまの需要の多様化する中でNTTPCの市場価値を維持・向上させるため、アジャイル開発の推進やぜい弱性対応などへの即応性向上に取り組んでおり、ここ数年内製化率を高めています。おおよその数字ではありますが、現在の内製化率は60%程度です。
ただ、その一方で、組織やチームをリードできる上級エンジニアが不足しており、全体的なスキルアップ、ひいては上級エンジニアの増員を喫緊の課題としています。

エンジニアの構成

図1. エンジニアの構成

これらの課題の一助として生成AIを活用できないか検討したのが、今回紹介する取り組みを始めたきっかけです。

3. 2023年度の取り組み~GitHub CopilotやChatGPT導入による業務効率化~

この取り組みは昨年度から始めていますので、まずは昨年度の取り組みを紹介したいと思います。ただ紙面の都合もありますので、詳細な内容はNTT Tech Conference2024の登壇資料:「生成AIを活用したソフトウェア開発効率向上の取り組み紹介」を参照してください。ここでは概要のみを紹介します。

昨年度は

  • ソフトウェア開発効率の向上
  • 初級エンジニアのスキルアップ

をテーマに、ソフトウェアの実装工程に対してGitHub CopilotやChatGPTを導入することでどの程度業務が効率化するかの効果測定から始まり、実業務で実際に利用した場合の効果・効能を確認しました。
その結果、次のような効果を発揮することがわかりました。

  1. ソフトウェア開発スピードの向上
    • (ア)
      特定ケースの効果測定において、従来方式と比較して4割時間短縮できる。
    • (イ)
      通常業務のトライアルにおいて、1日あたり約68分の作業時間が短縮できる。
  2. 開発者体験の改善
    • (ア)
      生成AI利用者の8割が業務に対するモチベーションアップを感じている。
  3. 若手エンジニアの育成支援
    • (ア)
      若手エンジニアの8割が自身が携わる案件に対する貢献度の向上を感じている。
    • (イ)
      若手エンジニアは知識の獲得に生成AIを活用する機会が多く、そこに対して強力な支援ツールとして機能している。

具体例として、調査結果の一部を載せておきます。

ツール毎の作業時間削減効果

図2. ツール毎の作業時間削減効果

利用者の行動・心情への影響

図3. 利用者の行動・心情への影響

このように、まだソフトウェアの実装工程に限定してはいますが、生成AIを導入することでポジティブな効果を得られることがわかると思います。
私個人の意見ではありますが、単純に作業の効率化・スピードアップだけでなく、エンジニアのモチベーションなどの心理的な側面に対してもよい影響を及ぼすというのは嬉しい効果だと考えています。

4. 2024年度の取り組み~設計工程の生成AI活用~

今年度は設計工程で生成AIを活用するための検証を行っています。生成結果の精査や品質を安定させるためのプロンプトエンジニアリングなど、ソフトウェアの実装の時と比べて課題が多いため、現状はまだまだノウハウを貯めている状況で具体的な効果・効能を整理にするには至っていません。

フェーズ 被験者 検証項目 検証対象 内容 期待する効果
効果測定 自チーム 試験設計の加速 GitHub Copilot
ChatGPT
試験観点、項目の洗い出し作業の精度およびスピードの向上が図れるかを検証する 精度:10%アップ
スピード:40%アップ
内部設計の加速 品質の向上
ドキュメント作成スピードの向上
スピード:30%アップ(md形式であれば)
外部設計の加速 品質の向上
ドキュメント作成スピードの向上
スピード:30%アップ(md形式であれば)

2024年度の取組内容

ですので、今回は試行錯誤したの中で現状一番開発業務をスピードアップできそうな手法を次の章で紹介しようと思います。

5. 活用事例~生成AIを使ってUIデザインからアプリを作る~

ここでは、UIデザインを基にChatGPT-4oとGitHub Copilot Chatにテストケース・テストコード・プロダクトコードを生成してもらい、アプリを作成する方法を紹介します。
もともとはChatGPT-4oのマルチモーダルの性能を調べるために、UIデザインからテストパターンを生成できるかを試していたのですが、比較的良質なテストパターンを生成できそうなので、そのままコード作成までやってみた結果の紹介です。

具体的な手順は次の通りです。

  1. ChatGPT-4oを使って、UIデザインからテストケースを生成する。
  2. アプリ用の新規プロジェクトを構築しておく。
  3. GitHub Copilot Chatを使って、テストケースからテストコードを生成する。
  4. GitHub Copilot Chatを使って、テストコードからプロダクトコードを生成する。
  5. テストを実行し、修正する。

では、実際にやってみましょう。

手順1 ChatGPT-4oを使って、画面デザインからテストケースを生成する。

まずは画面デザインを用意します。今回はFigmaで作成したものを画像として保存したものを使います。

UIデザイン(パスワード変更画面)

図4. UIデザイン(パスワード変更画面)

そして、このUIデザインをChatGPT-4oのマルチモーダル機能で読み込んでもらい、テストケースの生成を依頼します。
結果、画面の構造や記載されている文字列を把握し、そこから必要そうなテストケースを生成してくれました。紙面の都合で省略しますが、今回は10個のテストケースとその実行手順を定案してくれました。
内容もよく行うテストケースがリストアップされていて、プロトタイプ作成レベルであれば十分だと思います。

ChatGPT 4oへの依頼と生成したテストケース(抜粋)

図5. ChatGPT 4oへの依頼と生成したテストケース(抜粋)

手順2 アプリ用の新規プロジェクトを構築しておく。

GitHub Copilot Chatを使ってコード生成を行うため、アプリ用の新規プロジェクトを作成してVisual Studio CodeなどのIDEで使える状態にしておきます。
今回は、私が携わっている案件の関係で、Vue3用のプロジェクトを作成しました。また、テストツールはjestを使います。
具体的な手順は本筋と関係ないので割愛します。

手順3 GitHub Copilot Chatを使って、テストケースからテストコードを生成する。

GitHub Copilot Chatを使ってChatGPT-4oが生成したテストケースからテストコードを生成していきます。ここでは、プロジェクトの内容を考慮してコードを生成してくれるため、Visual Studio CodeとGitHub Copilot Chatを使用します。プロンプトでもコードが動作する環境を共有してはいますが、GitHub Copilot Chat自身でもプロジェクトの内容からプロンプトを補完した上でテストコードを生成してくれています。

最初のテストケースからは、次のようなテストコードを生成してくれました。

テストケースから生成されたテストコード

図6. テストケースから生成された
テストコード

ただ、残念ながら一度に指示できる情報量に制限があるのか、すべてテストケースを1つのプロンプトに入れ込むことができませんでした。ですので、面倒ではありましたが、テストケースを1つずつ入力してテストコードを生成していきました。

テストケースから生成されたテストコード その2

図7. テストケースから生成された
テストコード その2

テストケースから生成されたテストコードを1つのspecファイルにまとめたものが次にコードになります。こちらも紙面の都合で一部の紹介とさせてください。

テストケースから生成されたテストコード その3

図8. テストケースから生成された
テストコード その3

手順4 GitHub Copilot Chatを使って、テストコードからプロダクトコードを生成する。

テストコードが出来上がったら、今度はそれをパスするプロダクトコードを生成します。

プロダクトコードの生成

図9. プロダクトコードの生成

手順5 テストを実行し、修正する。

プロダクトコードが生成されたらめでたく完成。とはいかず、ある程度人間が手直しする必要があります。実際にテストを実行すると失敗する部分があるので、そこを1つ1つ修正していきます。ただ、ものによると思いますが、今回の場合は全体の2割程度を修正してあげるとテストをパスすることができました。
そうして完成したのが次のコードです。

テストをパスしたプロダクトコード

図10. テストをパスしたプロダクトコード

感想

いかがでしたでしょうか。この方法を使えば内部ロジックに関してはある程度は生成できることがお判りいただけたと思います。実際には各手順での生成物を精査・修正する必要がありますし、プロンプトのブラッシュアップも必要ですが、ゼロから作る場合と比べてだいぶ楽になりそうです。また、自分の考えを整理することにも使えそうです。
ちなみに、この方法で実装できたUIは次の通りで、もともとのUIデザインを全く再現できていません。一応動作しますし、テストの再現もできますが、だいぶ手直しが必要です。

UI

図11. UI

ただ、UIに関しても、デザインツールを使えばプラグインなどでコードを生成する機能が提供されているので、セキュリティ上の懸念が無ければそちらを活用するのもよさそうです。例えば、今回使ったFigmaではFigma AIというUIデザインすらもAIが生成してくれる機能の提供が一部ユーザーに対して始まっていますので、すべてを組み合わせればかなりのスピードアップを実現できるかもしれません。

6. まとめ

以上、私が所属するサービスクリエーション担当で実施している生成AIを活用したソフトウェア開発の業務効率化に関する取り組みの紹介でした。今年度の取組はまだまだ道半ばという状態ではありましたが、少しでも参考になれば幸いです。

なお、NTTPCにはプラスチャレンジという業務の20%を利用して業務改善や新規プロジェクトの検討などを行う制度があり、それ利用して様々な生成AI活用の取り組みが行われていますので、今後も皆さんの参考になる情報が発信されていくと思いますので、ご期待ください。

  • GitHubは、GitHub Inc.の商標または登録商標です。
  • Copilotは、米国Microsoft Corporation.の米国およびその他の国における登録商標です。
  • GPTは、OpenAI Global, LLCの商標または登録商標です。

技業LOG

NTTPCのサービスについても、ぜひご覧ください

おすすめ記事

    お気軽にご相談ください