🤖

ソフトウェア規模とAIに任せられる範囲

に公開

昨今、生成AIの進化により「エンジニア不要論」や「AIで全て解決」といった極端な言説をSNSでよく目にします。
しかし、これらの主張は多くの場合、対象となるソフトウェアの規模を考慮していません。

本記事では、ソフトウェアの規模とAIに任せられる範囲の関係について整理し、適切にAIを活用するための指針を考えます。

🟦 ソフトウェアの規模と複雑性

ソフトウェアは機能追加により青天井に複雑化していく性質があります。

一方で、現在のLLMには扱える知識量(コンテキストウィンドウ)に上限があり、プロンプトが膨大になると細かいルールが無視され始める傾向があります。

これはTransformerのAttention機構(入力の各部分がどの程度重要かを動的に判断する仕組み)の特性により、入力が長くなるほど各情報への注意が分散してしまうためです。

そのため、ソフトウェアの規模に応じてAIとの付き合い方を変える必要があります。

🟦 規模別のAI活用戦略

🟠 小規模

例:

  • 小さなツールやユーティリティ
  • スタンドアロンで動作する(外部サービスに依存しない)
  • 永続化層(データベース等)を持たない

AIとの付き合い方:

  • この規模であればAIに完全に任せられる
  • プロンプトで要件を伝えれば、動作するコードを生成可能
  • バグ修正や機能追加も容易

🟠 中規模

例:

  • フロントとバックエンドの様に複数のプロセスを扱う
  • 永続化層(データベース等)を持つ
  • 外部サービスとの通信が発生する
  • 複数のモジュールで構成される

この規模で起こり始めること:

  • デグレが発生し始める
    • 検証コストが増え始める

AIとの付き合い方:

  • AIにテストコードを整備させることが重要
  • まだAIに大部分を任せられるが、人間による検証・レビューが必要

🟠 大規模

例:

  • 複数のリポジトリで構成されている(またはモノレポでも大規模なもの)
  • 複数の永続化層(データベース等)を持つ
  • 複数の外部サービスに依存している

この規模で起こり始めること:

  • 全体をAIのコンテキストに載せることが困難
  • AIによる全体最適は期待できない

AIとの付き合い方:

  • 人間がタスクを適切に分割し、AIには局所的なタスクを任せる
  • 人間がアーキテクチャとテストコードを最適化し、ガードレールを機能させることが必須

※例に関してはあくまで参考値です。例外は存在すると思います。

🟦 AIモデルの進化と今後の展望

LLMの進化により、各規模の閾値は徐々に後方にシフトしていくと予想されます。
今は中規模とされるソフトウェアも、将来的には小規模扱いになる可能性があります。

しかし、ソフトウェアの複雑性も同時に増していくため、「規模に応じた適切な活用」という原則は変わらないでしょう。

🟦 まとめ

SNSでは「AIで全てが解決する」といった極端な主張が目立ちますが、実際にはソフトウェアの規模により適切な活用方法は大きく異なります。

重要なのは:

  1. 自身が関わるソフトウェアの規模を正確に把握する
  2. 規模に応じた適切なAI活用戦略を選択する
  3. 誇大広告に振り回されず、現実的な判断をする

AIを「魔法の杖」ではなく「強力なツール」として捉え、ソフトウェアの規模と特性に応じて適切に活用していきましょう。

(余談)最後まで読んで頂きありがとうございます!
内容に共感頂けたら いいね or リツイート 頂けると励みになります 🙏

Discussion