1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIが90%のコードを生成する時代: 「AIが書いたコードだから」は通用しないエンジニアに課せられる「揺るぎない最終責任」。「コーダー」から「アーキテクト」へ進化するための思考法

Posted at

目次


Part 1: AIによるコード生成90%時代の到来

Part 1 まとめ

このパートでは、AIがソフトウェア開発の大部分を担う未来が、すでに一部のプロジェクトで現実になっていることを紹介します。AIがコードの90%以上を生成する事例を基に、この変化がエンジニアリングの本質をどう変えるのか、そして人間が担うべき役割の重要性について、本記事全体の核心的なメッセージを提示します。

Chapter 1: はじめに - 変化するソフトウェア開発の現実

Core Message: 「AIがコードの大部分を書く」という予測はもはや未来の話ではなく、特定のプロジェクトにおいては既に達成されている現実です。

ソフトウェア開発の世界は、今、大きな変革の波に直面しています。かつてはSFの世界の話だと思われていた「AIがプログラミングを行う」というシナリオが、驚くべき速さで現実のものとなりつつあります。

結論
近年のAI技術、特に大規模言語モデル(LLM)の進化により、開発プロセスにおけるAIの役割は劇的に増大しました。一部の開発現場では、プロジェクト全体のコードの90%以上をAIが生成するという事例も報告されており、これは開発の生産性を根本から変える可能性を秘めています。

主要なポイント

  1. 驚異的な生成能力: あるGo言語で書かれたインフラ系サービスでは、Goのコード、設定ファイル(YAML)、インフラ構成(Pulumi)、SDKなどを含め、約40,000行のコードのうち90%以上がAIによって書かれたとされています。
  2. 品質の維持: AIが生成したコードであっても、その最終的な品質責任は人間が負います。コードの重複がなく、コメントのスタイルが統一され、システムアーキテクチャの基本が守られているなど、高い品質基準が維持されています。
  3. 「 unevenly distributed(不均等な分布)」な未来: このようなAI活用の現実は、まだ一部でしか見られないかもしれません。しかし、この働き方は確実に広がりつつあり、ソフトウェア開発の新しい標準となる可能性があります。

具体例

  • プロジェクト概要: メールを送受信するGo言語のサービス開発。
  • 成果物: Goのサーバーコード、OpenAPI仕様書、Python/TypeScriptのSDK。
  • AIの貢献度: 全体(約40,000行)の90%以上。

この現実は、開発者にとって脅威なのでしょうか?それとも、新たな可能性を切り拓く機会なのでしょうか?次の章で、本記事が伝えたい核心に迫ります。

Chapter 2: 本記事の核心

Core Message: AIは強力な「コード生成ツール」ですが、優れたシステムを構築するための「設計と思考」は依然として人間のエンジニアの最も重要な役割です。

AIがコードを書く時代において、エンジニアの価値がなくなるわけではありません。むしろ、その役割がより高度で本質的なものへとシフトしていくと考えられます。

結論
AIを効果的に活用する鍵は、AIを単なる作業者としてではなく、思考を助けるパートナーとして捉え、最終的な意思決定と品質保証の責任を人間が担うことです。AIはコードを書く速度を飛躍的に向上させますが、システムの安定性、拡張性、保守性を確保する設計思想までは提供してくれません。

主要なポイント

  1. 責任の所在: AIが生成したコードの一行一行は、あたかも自分が書いたかのようにレビューされ、その動作に全責任を負う必要があります。AIは責任を負うことはできません。
  2. 役割の変化: エンジニアの仕事は、タイピング作業から、システム全体のアーキテクチャ設計、データベースの相互作用の深い理解、そしてAIへの的確な指示出しとレビューへと重点が移ります。
  3. 判断力の重要性: AIの提案を鵜呑みにせず、それがプロジェクトの文脈や規模に対して適切かどうかを判断する能力が、これまで以上に重要になります。

この新しい開発スタイルを理解するために、具体的なワークフローを次のパートで詳しく見ていきましょう。


Part 2: AIと協業する新しい開発ワークフロー

Part 2 まとめ

このパートでは、AIを開発プロセスに組み込む際の具体的なステップを解説します。システムの土台を作る「設計フェーズ」から、コードを生成する「実装フェーズ」まで、AIと人間がどのように役割分担し、協業していくのかを明らかにします。特に、AIの能力を最大限に引き出すための技術スタックの選択についても掘り下げます。

Chapter 1: 伝統と革新の融合:システム設計の初期段階

Core Message: システムの根幹をなす設計フェーズでは、AIをコードライターとしてではなく、思考を深めるための「壁打ち相手」として活用することが極めて有効です。

どんなにAIが進化しても、プロジェクトの成功は強固な土台、つまり優れたシステム設計にかかっています。この最も重要な初期段階で、AIは新たな価値を提供します。

結論
システム設計、スキーマ定義、アーキテクチャの策定といった foundational(基礎的な)作業は、依然として人間のエンジニアが主導すべき領域です。しかし、このプロセスにAIを対話相手として参加させることで、設計上の見落としや誤りを早期に発見し、より洗練された設計を生み出すことが可能になります。

主要なポイント

  1. AIの役割: この段階でのAIは、コードを書くのではなく、アイデアをぶつける「ラバーダッキング」の相手です。AIとの対話を通じて、自身の考えを整理し、客観的な視点を得ることができます。
  2. 設計の検証: AIに設計案を説明し、そのフィードバック(たとえそれが的外れであっても)を受けることで、自分では気づかなかった矛盾や改善点を発見するきっかけになります。
  3. 軌道修正の支援: 一度決めた設計に誤りがあった場合でも、AIの力を借りることで、大規模な手戻りやクリーンアップ作業を迅速に行うことができます。

AIとの設計フェーズにおける対話プロセス

Chapter 2: 実装の主役としてのAI

Core Message: 実装フェーズでは、AIに具体的な指示を与えてコードを生成させ、人間はレビューと微調整に集中することで、開発速度を劇的に向上させることができます。

設計が固まったら、次はいよいよ実装です。ここではAIが主役となり、驚異的なスピードでコードを形にしていきます。

結論
AIによるコード生成を成功させる秘訣は、AIにコンテキスト(文脈)を正しく与え、生成されたコードを厳しくレビューすることです。AIはシステム全体を常に把握しているわけではないため、人間がナビゲーターとして適切に導く必要があります。

主要なポイント

  1. コンテキストの提供: AIにコード生成を依頼する際は、「何を」「どのように」実装してほしいのかを具体的に指示します。既存のコードや設計思想を伝えることが、一貫性のあるコードを生成させる上で不可欠です。
  2. レビューの重要性: AIは時として不適切な抽象化を行ったり、既存の機能を再発明したりします。生成されたコードは必ず人間がレビューし、プロジェクト全体の品質基準を満たしているかを確認します。
  3. 2つの開発ループ:
    • エージェントループ + 仕上げ: まずAIに大枠を生成させ、その後で人間が手直しを加える方法。大部分の作業に適しています。
    • ロックステップループ: AIと人間が一行ずつ対話するように細かく修正を重ねていく方法。複雑なロジックに適しています。

AIを活用した開発・レビューサイクル

Chapter 3: AI時代の技術スタック選択

Core Message: AIによるコード生成を前提とすると、従来は手間がかかるため避けられがちだった技術選択が、逆に合理的で強力な選択肢となり得ます。

AIの能力は、私たちが使用する技術やフレームワークの選択にも影響を与えます。

結論
AIは、人間が書くと冗長で間違いやすい定型的なコードの生成を得意とします。この特性を活かすことで、「手で書くのは大変だが、マシンリーダブルで明確な仕様」を持つ技術が再評価される傾向にあります。

主要なポイント

  1. Raw SQLへの回帰:
    • 背景: ORM (Object-Relational Mapper) は便利ですが、内部でどのようなSQLが発行されているか不透明になりがちで、複雑なクエリでは限界があります。
    • AIの活用: AIは正確な SQL を書くのが得意です。これにより、開発者はORMのブラックボックス化を避け、パフォーマンスチューニングがしやすい生の SQL を直接コードに記述するアプローチを取りやすくなります。
  2. OpenAPI Firstアプローチ:
    • 背景: 最初にAPIの仕様(設計図)を OpenAPI (YAML形式など) で厳密に定義し、その仕様書からサーバーサイドとクライアントサイドのコードを自動生成する手法です。
    • AIの活用: AIは OpenAPI の仕様書を生成したり、仕様書から各言語の定型コードを生成したりするのに非常に長けています。これにより、サーバーとクライアント間の仕様の齟齬がなくなり、開発効率が向上します。

OpenAPI First アプローチの概念図


Part 3: AIの輝きと影 - 活用における光と闇

Part 3 まとめ

このパートでは、AIを開発ツールとして利用する際の具体的なメリット(輝き)と、注意すべきデメリットや危険性(影)を対比させて解説します。AIの能力を最大限に引き出しつつ、その落とし穴を回避するために、エンジニアが持つべき視点と責任を明らかにします。

Chapter 1: AIが開発を加速させる領域 (輝き) ✨

Core Message: AIは、調査、試行錯誤、定型作業にかかる時間を劇的に短縮し、エンジニアがより創造的で本質的な課題に集中することを可能にします。

AIは、正しく使えば開発プロセスにおける多くの側面を効率化し、これまでとは異なるレベルの生産性を実現します。

結論
AIの最大の強みは、情報収集から実装までのサイクルを高速化し、手作業ではコストが高く躊躇しがちな作業(リファクタリングや新しい技術の導入など)のハードルを劇的に下げる点にあります。

主要なポイントと具体例

  1. 調査と実装の同時進行:
    • 従来: ある技術について調査し、理解してから実装に着手する(数日かかることも)。
    • AI活用: AIに問いかけながら、その場でいくつかの実装パターンを試し、動かしながら評価できる。これにより、抽象的な思考から具体的な評価へと素早く移行できます(数日 → 10〜15分)。
  2. 迅速な技術選定:
    • : 3つの異なる OpenAPI 実装方法を、AIの支援を受けて1日で試し、最適なものを選択することができた。
  3. 低コストなリファクタリング:
    • コードの整理や改善(リファクタリング)は、品質向上のために重要ですが、コストがかかるため後回しにされがちです。AIを使えばこのコストが大幅に下がるため、常にコードを整理された状態に保ちやすくなります。
  4. 苦手な作業の克服:
    • : AWSPulumi を使ったインフラ構築など、多くのエンジニアが苦手意識を持つ作業も、AIに対話形式で指示し、発生したエラーをその場でデバッグさせることで、数週間かかっていた作業を数日で完了させることができた。
  5. 新しい開発パターンの導入支援:
    • : testcontainers を利用したテスト手法(テストごとにDBクローンを作成する)は非常に有用ですが、既存のテストコード全体を移行するのは大変な作業です。AIに依頼したところ、1時間ですべてのテストを新方式に移行できた。
  6. 高品質なSQL生成:
    • 人間が覚えにくい、あるいは書き間違えやすい複雑な SQL(例: MERGEWITH 句)も、AIは正確に生成してくれます。人間はレビューに集中できます。

Chapter 2: AIが陥りやすい罠 (影) ⚠️

Core Message: AIは、システムのランタイム挙動や並行処理といった深い概念を完全には理解しておらず、安易に信頼すると、不安定で観測不可能なシステムを生み出す危険性があります。

AIは万能ではありません。その生成物を無批判に受け入れることは、プロジェクトに深刻な問題をもたらす可能性があります。

結論
AIの弱点は、表面的な正しさに囚われ、システムの内部状態や複雑な相互作用を考慮できない点にあります。特に、エラーハンドリング、依存関係の管理、並行処理など、システムの堅牢性に直結する部分で危険なコードを生成する傾向があります。

AIが生成するコードは、一見すると正しく動作するように見えるかもしれません。しかし、その内部に潜む問題は、運用を開始してから深刻な障害として表面化する可能性があります。

主要なポイントと具体例

  1. 状態機械の無理解:
    • システムがどのような状態を取りうるか、状態間の遷移がどうあるべきかといった、ソフトウェアの根幹をなす概念をAIは完全には理解していません。
  2. 並行処理の誤解:
    • スレッドやGo言語の goroutine のような並行処理の扱いは特に苦手です。AIが生成したコードは、デッドロックや競合状態といった、発見が難しいバグを含んでいる可能性があります。
  3. 不適切な実装の提案:
    • : レートリミッターの実装を依頼したところ、一応は機能するものの、負荷を分散させるための「ジッター」がなく、ストレージの選択も不適切なコードが生成された。この分野の知識がなければ、危険性を見抜けません。
  4. インターネットの「慣習」の盲信:
    • AIはインターネット上の膨大なコードを学習データとしています。そのため、古くなった依存関係を平気で使ったり、不適切なエラー処理(エラーを握りつぶし、スタックトレースを消してしまうなど)を行ったりする悪しき慣習を模倣することがあります。
  5. 不透明なシステムの生成:
    • エラーを隠蔽する傾向があるため、AIに任せきりにすると、問題が発生しても原因究明が困難な「観測不可能な」システムが出来上がってしまう危険があります。

AIの生成コードにおける潜在的リスク

Chapter 3: エンジニアに求められる揺るぎない責任

Core Message: AIは強力なツールですが、最終的なシステムの品質、安全性、安定性に対する責任は、すべてそれを利用するエンジニアが負わなければなりません。

AIの輝きと影を理解した上で、私たちはこの新しいツールとどう向き合うべきでしょうか。

結論
AIを使いこなすために最も重要なことは、優れたソフトウェアエンジニアであり続けることです。AIに判断を委ねるのではなく、自身のエンジニアリング知識と経験に基づいてAIの生成物を評価し、制御する必要があります。

あなたがシステムのアーキテクトであり、最終的な品質保証責任者です。AIは、その責任を肩代わりしてはくれません。

エンジニアが担うべき責任

  • アーキテクチャの決定: システム全体の設計思想を定め、一貫性を保つ。
  • コードレビュー: AIが生成したすべてのコードを精査し、品質基準を満たしていることを確認する。
  • 技術的負債の管理: AIが導入しようとする不適切な依存関係や設計を拒否し、将来の問題を防ぐ。
  • システムの観測可能性の確保: 問題が発生した際に原因を追跡できるよう、適切なロギングやエラーハンドリングを徹底する。
  • 本質的な問題の理解: データベースの動作、状態遷移、並行処理といった、システムの根幹に関わる部分を深く理解し続ける。

AIは、エンジニアリングの知識が不要になる未来をもたらすのではなく、むしろその知識の深い理解をこれまで以上に求めるのです。


Part 4: 未来への展望 - AIとエンジニアの共生

Part 4 まとめ

最終パートでは、AIによるコード生成90%という数字がソフトウェア開発の未来にとって何を意味するのかを考察します。AIが単なるツールを超え、開発の主要な担い手となる時代において、エンジニアの役割はどのように進化し、どのようなスキルが求められるようになるのかを展望します。

Chapter 1: 90%という数字が意味するもの

Core Message: 「90%」という数字は、コーディング作業の大部分が自動化される可能性を示唆していますが、残りの「10%」にこそ、システムの成否を分けるエンジニアリングの本質が凝縮されています。

AIが90%のコードを書くという事実は、開発の風景を大きく変えます。しかし、これはエンジニアの仕事が90%なくなることを意味するわけではありません。

結論
この変化は、エンジニアの仕事のが減るのではなく、が変わることを示しています。単純なコーディング作業から解放されたエンジニアは、より創造的で、より影響力の大きいタスクに時間と知性を使うことができるようになります。

主要なポイント

  1. 価値のシフト: エンジニアの価値は「どれだけ速くコードを書けるか」から、「どれだけ優れたシステムを設計し、AIを導き、品質を保証できるか」へとシフトします。
  2. トレードオフの変容: AIの活用により、従来は時間的・人的コストから不可能だった選択肢(例: 全面的なリファクタリング、高度なテスト手法の導入)が現実的になります。これにより、より高品質なシステムを、より短期間で構築できる可能性が生まれます。
  3. 責任の集中: コードの大部分はAIが書いたとしても、そのシステムのアーキテクチャを形作り、本番環境で安定稼働させる責任は、すべてエンジニアにあります。AIはあくまで強力な「実行者」であり、「設計者」兼「責任者」は人間です。

Chapter 2: これからのエンジニアの役割

Core Message: 未来のエンジニアは、AIという非常に優秀なアシスタントを率いる「建築家」であり、「指揮者」です。重要なのは、何を、なぜ、どのように作るかというビジョンを描き、それを実現に導く能力です。

AIとの共生時代において、エンジニアはどのような存在になるべきでしょうか。

結論
これからのエンジニアには、特定の言語やフレームワークの知識以上に、ソフトウェアエンジニアリングの普遍的な原則(システム設計、データベース、ネットワーク、並行処理など)に対する深い理解と、AIを効果的に活用するための高度なプロンプトエンジニアリング能力やレビュー能力が求められます。

未来のエンジニアに求められる役割とスキル

AIがコードを書く時代は、すでに始まっています。それは、エンジニアという職業の終わりではなく、より高度で知的な役割への進化の始まりなのかもしれません。この変化の波を乗りこなし、AIを強力なパートナーとして使いこなせるかどうかが、これからのエンジニアの価値を大きく左右することになるでしょう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?