AIの時代における拡張型ソフトウェアエンジニアリング
人工知能(AI)は多くの産業に影響を及ぼしており、ソフトウェアエンジニアリングもその例外ではありません。AIはソフトウェアの開発、テスト、管理を一新し、業界に新たなレベルの自動化、効率化をもたらす可能性を秘めています。しかし、AIを統合する過程で浮上する課題や、ソフトウェアエンジニアが把握しておくべき事柄もあります。まずは、AIが産業にもたらすメリットについてご紹介します。
AIの長所
AIがソフトウェアエンジニアリングに最も大きく貢献する事柄のひとつとして、ルーチンワークや反復作業の自動化が挙げられます。こういった作業は「配管」タスクとも言われ、開発プロセスに不可欠ではあるものの、退屈なうえに時間がかかります。例としては、コードのリファクタリング、バグ修正、テストなどです。開発者はAIを活用してこういった作業を自動化することで、より戦略的でクリエイティブな業務に集中することができるようになります。これによって生産性やソフトウェアのクオリティが向上し、製品を市場に投入するまでの時間を短縮することができます。
さらに、出入力を正確に行って特定の機能を自動化できるという点も、AIがソフトウェアエンジニアリングに与えるメリットとして挙げられます。例えば、AIはユーザーの要求に基づいたコードを自動生成することができます。これを利用すれば、開発者は反復的なコードをゼロから書く必要がなくなります。これにより、時間を節約できるほか、エラーが発生するリスクが減ることで、ソフトウェアの品質向上につながります。
ソフトウェアエンジニアリングにAIを組み込むと、エンジニアがイノベーションを起こしやすくもなります。ルーチンワークや反復作業を自動化することによって、より多くの時間とエネルギーを新規かつクリエイティブな作業に割くことができるようになり、業界にイノベーションがもたらされ、優れたカスタマーソリューションを導き出すことができるようになります。
これまでは、若手の開発者でも行えるような反復作業をベテランの開発者も請け負わなければならない場合がありました。チームに若手の開発者がいる場合でも、ベテランが開発の手をとめて反復作業の説明やフォローを行う必要がある環境は、負担がかかる上に非効率です。現在、こういった作業の多くはAIによって自動化することができます。
AIの限界が人間の強みを後押しする
それでも、AIにはまだ限界があるのも事実です。ビジネスにおいて、文脈やニュアンスを汲み取りながら特定のニーズに対応するには人間の力が必要です。AIはルーチンワークや反復作業を自動化することができますが、人間のソフトウェアエンジニアのようにクリエイティブかつクリティカルな思考は持ち合わせていません。
現段階では、エンジニアリングをよく理解していない製品マネージャーがAIを利用しても、完璧な製品を作ることはできません。ひとつの目標に対する達成方法は数多くあるため、問題を深く理解し、技術について幅広く熟知している人材だけがビジネス要件を解決することができるのです。
例えば、ベテランの開発者であれば、ビジネスの文脈を汲み取って特定のニーズに対応し、正しい情報に基づいてプロジェクトに適したテクノロジーやデザインパターンを選ぶことができます。また、AIをビジネスに合わせて微調整することや、異なるテクノロジーを統合してビジネス要件を満たす製品を作ることも可能です。
一方、AIの場合は、教えられたタスクや与えられたデータもしくはアルゴリズムに沿ったパフォーマンスしかできません。AIは批判的・創造的な思考を持ち合わせていないうえ、実世界におけるビジネスの複雑な事情も理解していません。
そのため、ソフトウェアエンジニアはAIに関するスキルや専門知識を身につけなければいけません。それと同時に、今後はAIを扱う能力が強く求められるようになるため、クリティカルな思考や問題解決の能力を高めておく必要があります。
さらに留意すべきなのが、ベテランの開発者は、経験とクリエイティブな思考を活かし、人間ならではの直感や推論を元に革新的なソリューションを生み出せるという点です。つまり、AIはベテラン開発者の役割を代わる存在ではなく、あくまでツールであるということです。
ハードルの上昇に伴い、より深い理解が求められる
今後、ベテラン開発者はAIの仕組みや限界を深く理解する必要があります。そうすることで、AIツールと効果的にコミュニケーションをとり、微調整を加え、ビジネスのニーズとの整合性がとれるようになります。また、AIを通して得られる結果を解釈・分析したうえで、それに基づく意思決定を行い、既存のテクノロジーとうまく連携するような統合を行うことが求められます。
AIは、新たな課題やチャンスをもたらす存在です。ルーチンワークや特定の機能を自動化することで、この業界に参入する際のハードルが上がります。
ソフトウェアの開発により多くのAIが組みこまれるということは、技術面・ビジネス面双方をより深く理解している人材が求められるということです。そのため、AIツールの効果的な活用法がわかること、得られた結果を理解できることなどを含め、エンジニアに求められる要件が高まっていくと思われます。
AIツールを効果的に扱える人材の需要が高まることは、ソフトウェアエンジニア開発の業界に大きな影響を与えます。より高度な内容への理解が必要となることから、業界への入り口のハードルが上がります。その結果、より質の高い人材が集まるようになり、継続的な学習が重視されるようになるでしょう。
ソフトウェアエンジニアリングでAIを最大限に活用するためには、AIだけに留まらず、製品開発に関わるすべてのテクノロジーについて熟知する必要があります。これはAIが普及する前から求められていたことでしたが、エンジニアの中で価値のある人材と代替可能な人材を差別化するという意味で、とても重要です。技術・ビジネス双方の知識を兼ね備え、業務に対して効果的にAIを取り入れられるエンジニアは高い人気を誇ります。
革命は、すべてが同じだけの影響を及ぼすわけではありません。中には、内容を全く理解していなくても差し支えないものもあります。例えば、コーディング作業が大幅に簡略化されたコンパイラやプログラミング言語に関する革命では、難易度の低いコードについて学んでいなくとも、多くの人が複雑なプログラムを理解し、入力することができるようになりました。
しかし、私たちの業界におけるAI革命は違います。なぜなら、この革命には、プログラミングしていない事柄をシステムが学習し、意思決定を自ら行う開発が含まれているためです。そのため、テクノロジーやビジネス要件に関わるアルゴリズムとテクニックだけでなく、システムに学習させるデータについてもより深く理解する必要があるのです。
拡張型ソフトウェアエンジニアリング
具体例として、ソフトウェアエンジニアの典型的な一日の業務を見てみましょう。日々のタスクは企業や個人によって異なるものの、いくつかのコード関係の作業はソフトウェアエンジニアに共通するものです。以下に、一般的な例をまとめました。
- メールの確認と返信:ソフトウェアエンジニアの一日は大抵、メールチェックと返信作業から始まります。AIを利用すれば、ある程度はメールの仕分けや優先順位付けができますし、返信を書かせることも可能です。しかし、今の段階では、AIが書いたメールは送信前に確認・承認する必要があります。
- コードの再調査:ソフトウェアエンジニアは、自分や同僚が書いたコードの確認に膨大な時間を割きます。この作業には、プルリクエストの確認やフィードバックの作成のほか、コードがコーディング基準に適応しているかどうかの確認が含まれます。AIはいくつかのコード分析や品質保証に使うことができますが、コードの再調査や最終的な意思決定はソフトウェアエンジニアが行う必要があります。
- 会議:ソフトウェアエンジニアは、チーム会議、プロジェクト会議、クライアントとの会議などに参加することがあります。こういった会議は、対面・オンラインを問わず行われ、プロジェクトの進捗やチームの連携、トラブルの解決などについて話し合います。AIはこういった会議に参加することはできないものの、スケジュール調整やリマインド、要点の再確認に活用することが可能です。
- 文書化:ソフトウェアエンジニアは、コードの文書化、テクニカルレポートの作成、プロジェクトに関するドキュメントの更新にも多くの時間を費やしています。これに関しては、企業内でAIを活用して、ドキュメントの作成や要約を行うことが可能です。しかしこのような場合でも、ソフトウェアエンジニアが最終的な確認・承認を行う必要があります。
- 学習と開発:ソフトウェアエンジニアは、常に学習し、自らのスキルを向上させています。例えば、業界に関する記事を読んだり、新たなテクノロジーを試したり、オンラインで講義を受けたりします。AIは学習のリソースを検索・推奨することができますが、ソフトウェアエンジニアが学習やスキル開発を続ける必要があることには変わりありません。
ソフトウェアエンジニアが「サイドのタスク」に費やす時間の短縮については、個人や企業ごとに異なるため、正確な数字を断定することはできません。しかし、私の経験を踏まえたうえで推測すると、そういったタスクにかかる時間はAIを利用することで25~50%短縮できると考えられます。例えば、あるソフトウェアエンジニアが業務にかける時間のうち、60%が企業や顧客に価値をもたらすタスク、35%が「サイドのタスク」、5%がイノベーションに費やされていたとします。この場合、AIを活用することで、イノベーションに費やせる時間を20%まで引き上げることができるでしょう。
AR(拡張現実)が世界中で私たちの認識を変えたように、AIがインテリジェントな働きを加えることで、私たちのタスク実行能力も向上するのです。
チームの強化
マネージャーの立場にいる人々は、拡張型ソフトウェアエンジニアリングへの移行を促すことが極めて重要です。この際は、必要なツールを提供して開発者がAIの役割を理解できるように尽力し、AIという最先端のテクノロジーを利用して仕事の質を挙げられるようにすることが求められます。また、開発者がAIに精通しているかどうかを業務評価にも組み込むことで効率性や革新性の改善に反映させることができます。AIを受け入れない場合、技術を使いこなす次世代の開発者に取って代わられる可能性があることを忘れないようにしましょう。
まとめ
ソフトウェアエンジニアリングにAIを組み込むことで、新たな知性の層が生まれ、効率性の向上しやイノベーションの拡大につながります。AIは、開発者を反復的なルーチンワークから解放し、ソフトウェアの開発、テスト、管理に変革を与える可能性を秘めています。これらの作業を自動化することで、開発者はより多くの時間とエネルギーを新しい創造的なソリューションの開発に費やすことができ、生産性やソフトウェア品質の向上、市場投入までの時間の短縮が実現します。さらに、AIが反復的なタスクを担うことで、エンジニアはより多く時間を革新的なプロジェクトに集中して割くことができるようになります。そのため、AIはあくまでソフトウェアエンジニアが活用するツールであり、彼らの役割を代わりにこなす存在というわけではありません。AIをうまく活用することで、現場におけるイノベーションが促進され、お客様により良いソリューションが提供することができるようになります。
※本稿は、この問題に関わる私の所見を表すものです。作成の過程においては、ChatGPTを利用し、文法の確認、意見を明確にするためのパラグラフ修正、現代のAI機能に関する事実確認を行いました。本稿の執筆にかかった時間は通常の3分の1ほどです。残りの時間は、私たちの最も大切なお客様のため、プロジェクトに尽力しました。