AI時代の開発現場:スピードと品質の両立
NECソリューションイノベータは10,000人を超えるシステムエンジニア・ソフトウェア技術者を擁する国内最大規模のシステムインテグレータ。業務ソリューションやソフトウェア基盤など幅広い開発を手がけている。その中で、藤原氏はアジャイルチームでAI製品の開発に携わっている。

藤原氏は、「アジャイル開発とAIの普及で、開発には以前よりも短い期間で、より高い品質が求められるようになっている」と指摘する。
アジャイル開発が普及した背景には、不確実性が高く、市場に何が受け入れられるかわからないというビジネス環境がある。高い品質のプロダクトをすばやく作って市場に問うために、アジャイルという手法が普及したのだ。
この「品質と速度」を両立するために、開発現場ではすばやい「検証」が重要になってくる。藤原氏はその一つとして「テスト」の工程を取り上げて、重要な考え方を共有した。
「テストにおいて重要なのは、そのテストの結果が製品の目的に適合しているかを確認することです。しかし製品の目的を表現できていないテストも多く、とくにコード化されていないテストでは自然言語での記載になり、目的が不明瞭になりやすい。結果として、エンジニアの判断が製品の目的にとってかわることになるでしょう」
そのため藤原氏は、「製品目的を理解していないエンジニアがテストを行うと、バグの原因となる」と指摘し、「チームに所属するエンジニア全員が製品や機能のゴールを語れることが、品質に寄与する」と強調した。
次に藤原氏は、素早い検証活動の一つとしてTDD(テスト駆動開発)におけるUT(単体テスト)の課題に着目。開発中に「テストコードを書くのが大変」という声をよく聞くが、その原因をコードが複雑になってしまっているからだと考察する。
反対に、「UTがすんなり終わる」コードは、SOLIDの原則のS「単一責任の原則」に忠実なキレイなコードだ。「キレイなコード=テストしやすいコードと言える」と藤原氏は言う。
また、「関数やメソッドが動くことをテストしても意味がない。そのメソッドが何をしないといけないのか。その役割が製品においてどういう位置づけなのかをテストする必要がある」と藤原氏。
つまり、TDDにおいてエンジニアが製品のゴールを表現するには、「仕様や要件を適切な機能やクラスに落とし込むスキル」と「関数やメソッドを単一責任の原則に従い実現するスキル」が求められる。加えて、キレイなコードを維持し続けるために「リファクタリングに踏み切る勇気」も必要だという。
AI活用の前にテストに向き合う
昨今では、こうしたCD/UTのプロセスにおいて生成AIが活用できる。藤原氏は、NECソリューションイノベータにおいて、これまでどのように生成AIを活用したコーディングやテスト生成を行ってきたのか、紹介した。
同社では、GitHub CopilotとChatGPT的に扱える社内LLMが導入された。初めはうまくいかなかったが、使ううちにどういったコードに対してAIが効果を発揮するのか、勘所がつかめたという。
「LLMにテストコードを書かせても、機能をテストできないなどの課題がありました。一方で、『単一責任の原則』を守っている場合はうまくテストコードが生成されることが分かりました。AIも結局はツールなので、AIの特徴や使い方を理解しなければいけません」
しかし、こうしたAI活用のポイントを他のメンバーに伝えても「あまり浸透しなかった」と藤原氏。その要因をひも解くと、AIの導入以前に「テストに対する忌避感」や「開発期間の短さ」といったマインド的な障壁があることがわかった。
そこで藤原氏のチームでは「テストを書かないとレビューが通らない」というルールを設定した。
「先述の通り、キレイなコードでないとなかなかテストコードは書けず、テストは終わりません。こうした失敗の体験を通して『このやり方ではだめだ、なんとかしないと』という意識になってくれれば、マインド変革のチャンスです」と藤原氏は語る。これは、失敗を経験させることで、「今までのやり方を踏襲」することに疑念を抱いてもらうのを目的としている。
このタイミングで「いい方法がある」と提案を行い、「キレイなコード」や「AIによるサポート」の効果を実感してもらうのだ。チームとして成功体験を得れば、後述する文化としての定着を図ることができる。
生成AIを最大限に生かすための「テキスト化」
続いて、開発作業全体における生成AIの活用について考える。「要件定義やアーキテクチャ設計といったタスクステップでも活用できそうだが、データの形式がバラバラのためマルチモーダル環境が必要。コストがかかりすぎる」と藤原氏。
そこで、藤原氏のチームでは開発プロセスに必要な多くの情報をテキスト化することで、AIのメリットを享受しやすくしているという。

藤原氏は、「仮にすべてがテキストエディタで完結すれば、GitHub Copilotが活用できます。レビューやリファクタの相談、アーキテクチャの改善、さらには上流工程であるニーズ探索まで、全てをAIに問える理想郷が実現する」と語る。
テキスト化によってAIの効果を感じられるようになれば、自然と手放せない存在となり、AIの活用が進むわけだ。
AI活用のための開発チームビルディング
さらに、AIの効果を最大化するにはチームでの活用が欠かせない。藤原氏は、チームにAI活用の文化を定着させるためのポイントも紹介した。
まずやるべきなのは「ルールを決めること」だ。アーキテクチャ図を作成するという例で考えると、「要件定義」「必要なドキュメントの検討」「PlantUMLで製造」「レビュー」といったステップでAIを活用できる。
レビューに着目すると、AI導入の変化がわかりやすい。レビューのステップでは、AIを用いたレビューの後にチームメンバーによるレビューを行うだろう。そうすると、AIのレビューにより「当たり前のミスが減っているはず」で、チームメンバーによるレビューでは、動くコードを目指すレビューから「よりキレイなコードを目指す」レビューができるようになる。結果として、チームメンバーは、製品の目的に即した品質にかかわる内容に注力できるのだ。
このレビューのステップにおいて、良いレビューが行えたのであれば、次も同じことをやりたくなる。AIが行ったレビューについてはプロンプトという形である程度の再現性を保てる。このため、AIを活用するチームにおいて、プロンプトの管理を含めたルールの設定が重要であると指摘した。
ただし、チームにAI活用を定着させるにはこうしたルールづくりだけでは不十分だ。この状態では、「便利そうだから使う」の域を脱していない。AIを使いこなすということを考える必要がある。
藤原氏は「スキルを確認せずにメンバーを採用しないのと同様に、AIがどんな効果をもたらすのかわからないまま導入するべきではない」と指摘。「AIが効果を発揮するシーンを具体的にイメージしておく必要がある」と強調した。
「チームでAIを活用するときは、AIに任せるタスク領域を検討し、その使い方をメンバーで考え、ブラッシュアップしながら使うことが重要です」
さらに、AIの使い方をブラッシュアップしていくには、メンバー同士での情報の共有が欠かせない。ブラッシュアップつまり改善を文化として定着させるには、「情けは人の為ならず」のマインドが大事になる。こうしたマインドを醸成するために、実際に藤原氏のチームで実践しているのは、Copilotの使い方を振り返る定例会やペアワークだ。メンバー間で意見を交換することで情報の共有を図っている。
最初は藤原氏が主導して実施していたものの、現在では自発的に開催されるようになり、レビュー品質も向上したという。
「ペアワークで取り組んだ(AIを活用した)環境構築などはできて当たり前の状態になり、AI活用が標準化されました。またAIによる検証を挟むことも習慣化されました」
AI時代のエンジニアのこれから
藤原氏はセッションを振り返り、「AIを導入しても開発プロセスは変わらないが、その中身は変わっていく」と考察。AIに任せられる部分はAIに任せ、人間はより抽象的に、開発中の機能が製品のゴールに即しているかなど、より品質に向けた活動に注力できるようになる。藤原氏は「RAGを用いれば、AIがレビューできる範囲はより広がるかもしれない」と期待した。
開発プロセスにAIが入ってきたことで、「作業量は減るが、プロンプトエンジニアリングという新しい『やること』が増えている」と藤原氏。
作業量を減らすためにAI導入に踏み切る際は、「AIやLLMを使うとは何か」「何を任せればよいのか」について、チームで議論することがおすすめだと言う。減らす作業をはっきりさせなければ、「やること」が増えてしまい、以前よりパフォーマンスが下がってしまうかもしれない。
最後に藤原氏は、「自分たちの開発プロセスのどの部分にAIを導入できそうか、一度考えてみてください。AIは教育にも効果を発揮するので、そういった活用方法もおすすめです。AIはあくまでツール。何のためにAIをチームに導入するのかチームで考えて、同じゴール感を持って活用してみてください」と話し、セッションを締めくくった。
エンジニア積極採用中!
国内最大級のソフトウェア企業であるNECソリューションイノベータではともに働く仲間を募集しています。キャリア採用サイトでは現場の社員の声や働く環境、社内制度について詳しく掲載しています。本記事で興味を持たれた方は、キャリア採用サイトもぜひご覧ください。