AI時代の開発プロセス考

浅海 智晴 Created: 2026-02-02

生成AIの登場によって、ソフトウェア開発の進め方は大きな転換点を迎えています。

プログラム生成そのものはすでに実用段階に入り、「AIにプログラムを書かせる」こと自体は珍しいものではなくなりました。しかしそれは、開発が自動化されることや、人間の役割が単純化されることを意味するわけではありません。

むしろ、AIが本当に力を発揮できるかどうかは、プログラムを書く前段階──要求の整理、仕様の明確さ、設計の粒度、そしてプロジェクト全体の進め方──に強く依存します。

本記事では、生成AIと協働しながら実際に開発を進めてきた経験をもとに、AI時代の開発プロセス (Development Process)を考えるための前提と文脈を整理します。

AIと一緒に開発して分かってきたこと

筆者は現在、生成AIを開発パートナーとして活用しながら、本業の合間に以下のプロダクトの開発を進めています。

SmartDoxとCozyはAI以前から細々と開発を進めていたものですが、CNCFSIEはVSCodeのCodex(OpenAPI)を使い始めた2025年11月以降に一気に開発したものです。

AIによる自動プログラミングがなければ考えられないことです。

この経験を通じて、AI駆動開発についていくつかの重要な前提が見えてきました。

AIが生成するプログラムは「動く」が、それだけでは足りない

生成AIが出力するプログラムは、コンパイルでき、とりあえず動くという意味では十分に有効です。 しかし、プログラムの構造、命名、責務分割、長期的な保守性といった観点では、そのまま大規模開発や長期間の運用に耐えるとは思えません。

この差は、AIの能力不足というよりも、与えられている仕様や文脈の質に起因します。

仕様が曖昧なとき、AIは極端な解釈を行う

仕様が明確に定義されている場合、AIは驚くほど適切なプログラムを生成します。 一方で、仕様に曖昧さや抜けがある場合、AIは人間の感覚からすると極端とも思える解釈や回避策を選ぶことがあります。

AIは「空気」や「常識」を補完するのではなく、与えられた情報から論理的に整合する解を選びます。

何の制約もない状況では、AIはコンパイルを通すことや、与えられたTDD (Test-Driven Development)のテストを成功させることといった目的を達成するために、必要最小限で合理的なプログラムを生成します。 その結果、これはしばしばBig Ball of Mudと呼ばれるような、手続き的で巨大なプログラムとして実現されてしまいます。

AIはプログラムだけでなく、すべての文章を読む

生成AIは、ソースコードだけを見ているわけではありません。 仕様書、設計文書、README、コメント、背景説明など、あらゆる文章による成果物を文脈として読み込みます。

文書同士の不整合や古い記述も、そのまま文脈に含まれます。 AIはこれらの矛盾した情報も正しい情報として受け止め、それらの矛盾を解消するための「正解」を捏造してしまうこともあります。

これはソフトウェア開発における大きなリスクです。

一方で、文書同士の不整合や古い記述をなくすことができれば、AIはこれらの情報を駆使して驚くほど精巧なプログラムを生成します。

文書の整備はAIとの協業に不可欠であり、その運用管理には最大限の注意を払う必要があります。

小規模チームでもプロジェクト管理は不可欠

AI時代では、人間が一人であってもAIがパートナーとして活動 (Activity)します。 筆者の開発環境では、OpenAPI DesktopとVSCode Codex(OpenAPI)を併用しているため、実質的には3人体制の開発チームということになります。

そして前述したように、大量の技術文書を作成しながら、その運用管理まで行っていく必要があります。

AIによる開発では、暗黙の了解や場当たり的な判断は、一時的にはうまく収まることがあります。 しかしそれは、コンパイルとテストを通過したBig Ball of Mudによって成り立っているに過ぎず、将来の機能拡張や障害修正に禍根を残します。

こうした問題に対応するためには、開発計画を立て、進捗を管理することが必要になります。

AIに対して、現在の状況や次に取るべきアクションを明確に指示しなければなりません。

これは複数人で構成される開発チームの活動と本質的に同じです。

そのため、人間が一人で開発している場合であっても、AIとの協業においてはプロジェクト管理が不可欠になります。

AI時代の開発プロセスを考える

SimpleModelingの開発プロセスは、Unified Process (UP)をベースに、ドメイン・モデリングやモデル駆動の要素を加えたものです。 ただし、UPの計画駆動的な側面を活かしつつ、アジャイル開発の要素も取り入れたハイブリッドな構成になっています。

AIの登場によって、開発プロセスの位置付けや構成にも大きな変化が起きることは想像に難くありません。

この考察を進めるにあたり、Unified Processとアジャイル開発について一度整理しておきましょう。

Unified Processにおける開発プロセスの特徴

Unified Processについて、以下の項目に沿って特徴を整理していきます。

  • モデルとプログラム

  • フェーズとイテレーション

  • コンポーネント指向開発

  • ユースケース駆動開発

  • 反復/漸進

  • アーキテクチャ中心

  • リスク駆動

モデルとプログラム

Unified ProcessUP)は、モデルを中心とした技術体系になっています。 まずモデルを作成し、そのモデルをプログラムに落とし込んでいくことが前提となります。

要求モデルや設計モデルは、UPにおいて設計判断や実装方針の基準として用いられます。 プログラムはそれらを具体化した成果であり、モデルの意図と整合しているかどうかが確認の対象となります。

このようにUPでは、意味や構造をモデル側で確立したうえで実装に進むことが、プロセスとして前提とされています。

フェーズとイテレーション

UPの大きな特徴の一つは、プロジェクト管理の枠組みがフェーズとイテレーションの二重構造になっている点です。 フェーズは、インセプション、エラボレーション、コンストラクション、トランジッションの四つに分かれています。

フェーズは単なる工程区分ではなく、「次の段階で何を重視し、何を確定させるか」を切り替えるためのメタ構造です。 フェーズの進行に伴い、要求の精度、アーキテクチャの安定度、完成度の重心が変化していきます。

また、UPにおけるイテレーションは、単なる作業の反復ではありません。 各イテレーションは、その時点で得られた知見を踏まえて、「次をどう進めるか」を再設計する単位として位置づけられています。

このようにUPでは、変化を日々の作業に直接持ち込むのではなく、フェーズやイテレーション計画というメタレベルで受け止め、整理する仕組みが用意されています。

CBD

Unified ProcessUP)は、CBD (Component-Based Development)を前提としたプロセスでもあります。

UPでは、サブシステムやコンポーネントといった単位で責務を分割し、それぞれに明確な境界を与えることで、変更の影響範囲を制御しやすくすることを重視します。

CBDは、設計や実装の技法というだけでなく、プロセス上の重要な意味を持ちます。 コンポーネントの境界が定まることで、どこまでが変更可能で、どこからが安定領域なのかが明確になります。

UPでは、このような境界を比較的早い段階で意識的に設計し、以降の開発を安定させる土台とします。

ユースケース駆動開発

UPにおけるユースケースは、単なる要求記述ではありません。

ユースケースは、工程全体を貫く軸として利用されます。

  • 要求の整理

  • 設計の指針

  • テストの観点

  • 進捗や完了の判断

これにより、開発の各活動は「どのユースケースを実現するためのものか」という意味づけを持つようになります。 工程管理においても、タスクの消化ではなく、ユースケースの実現状況を基準に進捗を把握することが可能になります。

反復/漸進

Unified ProcessUP)は、反復的かつ漸進的な開発を前提としています。

UPにおける反復は、分析・設計から実装・テストまでを含む小さな開発単位を繰り返す進め方として定義されています。

これは、工程を一方向に流すのではなく、実装してみなければ明らかにならない技術的・構造的な要因を早い段階で把握することを前提とした設計です。

反復は、こうした要因を工程の後半に持ち越さず、開発の初期段階から顕在化させるための基本的なメカニズムとして位置づけられています。

UPにおける漸進は、最初から完成形を目指すのではなく、開発を進めながら成果物の内容や精度を段階的に確定させていく進め方として定義されています。

要求、設計、アーキテクチャといった要素は、初期段階では暫定的な形で置かれ、反復を通じて徐々に具体化・安定化されていきます。

漸進は、開発の初期段階で全体を確定させることを前提とせず、判断を段階的に積み上げていくための基本的な進行原理として位置づけられています。

アーキテクチャ中心

UPでは、アーキテクチャが意思決定の中心に据えられます。

アーキテクチャは単なる構造図ではなく、以降の設計や実装の選択肢を制約し、方向づける基盤です。 早い段階でアーキテクチャを確立することで、後戻りのコストを抑え、開発全体の安定性を高めます。

この「アーキテクチャ中心」という考え方は、機能の網羅性よりも構造的な健全性を優先する姿勢を表しています。

リスク駆動

Unified ProcessUP)の根底にある考え方の一つが、リスク駆動です。

UPでは、作業の優先順位を決める際に、単純な機能順や作業量ではなく、技術的・構造的なリスクの大きさを重視します。

フェーズ構成そのものも、「どのリスクを、いつ、どの段階で低減するか」という視点から設計されています。

これにより、問題が後半で顕在化して破綻するのではなく、早い段階で不確実性を顕在化させ、対処することが可能になります。


ここまで見てきたように、Unified Processは、企業向けの大規模開発から単発のWebアプリケーション開発まで、さまざまなスケールや目的のプロジェクトを想定して設計されたソフトウェア開発フレームワークです。

フェーズ、イテレーション、アーキテクチャ、ユースケース、リスクといった要素は、開発の進め方や判断の粒度を構成するための機能セットとして整理されています。

Unified Processは、これらの機能を組み合わせることで、プロジェクトの規模や性質に応じた開発プロセスを構成できる枠組みとして位置づけられます。

UPの特徴点を軸にしたアジャイル開発との比較

前節で整理したUnified Processの特徴点を比較軸として、アジャイル開発が同じ課題に対してどのように向き合っているかを見ていきます。

モデルとプログラム

UPは、UML (Unified Modeling Language)で記述したオブジェクト・モデルを一次情報として作成し、モデルから派生する成果物としてプログラムを位置づけています。

一方、アジャイル開発では、プログラムが一次情報となっており、プログラム主導の開発プロセスになっています。

モデル主導とプログラム主導。この点がUPとアジャイル開発の決定的な相違点といえます。

フェーズとイテレーション

この特徴点が扱っているのは、変化や不確実性をどのレベルで整理し、判断に反映するかという点です。

UPはフェーズとイテレーションの二重構造を持ち、開発全体の重心はフェーズで切り替えつつ、個々の検証や前進はイテレーション単位で行います。 変化は主に計画や再設計のレイヤで整理されます。

一方、アジャイル開発ではフェーズのような上位構造を持たず、イテレーション(スプリント)の中で直接変化に対応します。 両者は同じ課題を扱いながら、柔軟性を発揮するレイヤが異なっています。

CBD

この特徴点が扱っているのは、変更の影響範囲をどのような仕組みで制御するかという点です。

UPでは、コンポーネント指向が開発プロセスにあらかじめ組み込まれています。 境界は早期に定義され、以降の変更は原則として局所化されます。

一方、アジャイル開発では、コンポーネント境界の定義や安定化はプロセスとして必須には規定されておらず、開発者やチームの判断に委ねられます。

ユースケース駆動

この特徴点が扱っているのは、作業を何によって意味づけ、どの単位で管理するかという点です。

UPでは、ユースケースが工程全体を貫く管理単位として用いられ、要求、設計、テスト、進捗管理が結び付けられます。

アジャイル開発では、バックログを起点として、ユーザーストーリーやタスクへと分解しながら作業を進めます。 両者は同様の問題意識を持ちながら、粒度や表現方法の異なる手法を採用しています。

反復/漸進

この特徴点が扱っているのは、反復によって何を前進させるかという点です。

UPでは、反復は理解や構造を成熟させ、不確実性を減らすための手段として位置づけられます。 成果は、構造の明確化やリスク低減として評価されます。

アジャイル開発でも反復は重要な前進の手段ですが、主に動く成果物とフィードバックを通じて進められます。 違いは、反復を運用するレイヤと評価の観点にあります。

アーキテクチャ中心

この特徴点が扱っているのは、構造をいつ、どの程度まで確定させるかを、プロセスとしてどこまで担保するかという点です。

UPでは、アーキテクチャが意思決定の中心として位置づけられ、早期に確立することがプロセス上の要請となっています。

アジャイル開発では、アーキテクチャ中心という立場は必須ではなく、構造の確立は実践やリファクタリングを通じて段階的に行われることが想定されます。

リスク駆動

この特徴点が扱っているのは、何を優先して取り組むかという判断基準の置き方です。

UPでは、技術的・構造的リスクを明示的に優先し、フェーズ構成自体がリスク低減戦略として設計されます。

アジャイル開発では、ビジネス価値やフィードバックを主な判断材料とし、実行の中で顕在化したリスクを逐次扱っていきます。

比較の整理と位置づけ

前節では、Unified ProcessUP)の特徴点を軸として、アジャイル開発が同じ課題に対してどのように向き合っているかを個別に比較してきました。

以下の表は、これまでに見てきた各特徴点について、「本質的な違い」「アプローチの違い」「アジャイルのスコープ外」のいずれに該当するかを整理したものです。

特徴点 分類

モデルとプログラム

本質的な違い

フェーズとイテレーション

アプローチの違い

ユースケース駆動開発

アプローチの違い

反復/漸進

アプローチの違い

リスク駆動

アプローチの違い

コンポーネント指向開発

アジャイルのスコープ外

アーキテクチャ中心

アジャイルのスコープ外

この整理から見えてくるのは、基本的にはUPとアジャイルが開発プロセスとして「まったく異なることをしている」のではなく、どの課題をプロセスの責務として明示的に扱うかという方針の違いによるものが多いということです。

本質的な違いはモデルとプログラムの位置付けにあります。

UPはモデル中心であり、要求や構造、設計意図をモデルに集約し、それを基準としてプログラムを生成・評価します。

一方、アジャイル開発では、動いているプログラムが事実上の一次情報となり、モデルや文書はそれを補助する位置づけになります。

AI時代における前提の変化

ソフトウェア開発では本来、分析モデルを作成し、ステークホルダーの合意を得た上でプログラミングを行うことが理想的な作業手順とされてきました。

しかし実際には、モデルや仕様書を最新かつ整合した状態で維持することは容易ではありませんでした。 その結果、プログラミング言語の表現力向上とも相まって、プログラムを事実上の一次情報とするプログラム中心の進め方が現実的な選択として定着していきました。

生成AIの登場によって、この前提が変わりつつあります。

AIはプログラムだけでなく、モデル、仕様書、設計文書、コメントといったあらゆる文章を同時に読み込み、それらの関係性を前提としてプログラムを生成します。

そのため、モデルや仕様書とプログラムの間に齟齬や矛盾が存在すると、正確なプログラム生成は困難になります。

一方で、生成AIを用いることで、モデルや仕様書とプログラムの内容を相互に参照しながら、それらを同期させていくことも可能になりました。 開発の過程で仕様書やモデルを更新し、それを即座にプログラムへ反映させるといった作業は、もはや現実的な運用として成立します。

このように、プログラム主導を現実解としてきた前提条件そのものが大きく変わろうとしています。

今後は、モデルや仕様書を通じて、開発者やステークホルダーだけでなく、AIも含めた形で情報共有と合意形成を行う必要が生じます。

つまり、AIと協働するソフトウェア開発は、必然的にモデル中心の形を取ることになります。

21世紀初頭から、アジャイル開発はプログラム主導の開発手法としてソフトウェア開発を牽引してきました。 しかし、AIの活用を前提とすると、この分野にも大きな構造変化が起こる可能性があります。

AI時代においてソフトウェア開発がモデル中心へと移行するのであれば、開発プロセスそのものも、モデルを中心に据えたものを選択することが自然な帰結となります。

このような観点から見ると、モデル中心の開発プロセスとして設計されたUnified Processは、AI時代のソフトウェア開発プロセスを考える上で有力な補助線の一つになると言えるでしょう。

まとめ

UPが前提としていたモデルは、UMLに代表されるオブジェクト・モデルでした。 要求や設計は構造化された図として表現され、それを基準に人間が解釈し、プログラムへと落としていく。 これは、人間を中心とした開発を前提とした合理的な設計でした。

一方、AI時代のモデルはこれとは性質が異なります。 現在の生成AIは、オブジェクト・モデルを含んだ自然言語の文章を理解し、操作し、変換することができます。

自然言語は、説明や補足ではなく、AIにとっての理解可能で実行可能なモデルになりました。

この点が、UPが前提としていたモデル観と、AI時代のモデル観との根本的な相違です。

AIの登場によって、「モデルは図でなければならない」「モデルは形式言語でなければならない」という制約は外れました。 その結果、自然言語で記述された要求や設計そのものが、開発の中心に据えられる条件が整いました。

この変化を正面から捉え、自然言語による記述をモデルの中核として再構成しているのが、SimpleModelingで取り組んでいる文芸モデル駆動開発 (LMDD, Literate Model-Driven Development)です。

📄 AI時代の開発プロセスを考えるでは、この前提の上に立ち、Unified ProcessをAI時代の開発プロセスを考えるための補助線として読み替え、SimpleModelingとの接続をさらに掘り下げていきます。

参照

用語集

開発プロセス (Development Process)

開発プロセスとは、ソフトウェアの構築・運用・保守に関わる活動全体を指します。 計画、設計、実装、テスト、リリースなどを含み、ソフトウェア開発の一連の流れを体系的に表現する概念です。

Cloud Native Component Framework (CNCF)

Cloud Native Component Framework(CNCF)は、クラウド・アプリケーションを構成するコンポーネントを、単一かつ一貫した実行モデルで実行するためのフレームワークです。 Component / Service / Operation という構造を中核とし、command、server(REST / OpenAPI)、client、script といった異なる実行形態から、同一の Operation を再利用できることを特徴とします。 ログ、エラー処理、設定、配備といったクラウド・アプリケーションに必要な品質属性をフレームワーク側に集約することで、コンポーネントはドメイン・ロジックの実装に集中できます。 CNCF は、文芸モデル駆動開発および AI 支援開発を前提に、「何を実行するか」と「どのように呼び出すか」を分離するための実行基盤として設計されています。

Semantic Integration Engine (SIE)

BoK(Body of Knowledge)から生成された構造化知識(RDF)および文書知識(SmartDox)を統合し、AIが直接利用できる形に変換・検索するための統合エンジン。

TDD (Test-Driven Development)

Test Driven Development(TDD, テスト駆動開発)とは、実装に先立ってテストを記述し、そのテストを通すことを起点として実装とリファクタリングを繰り返す開発手法である。

活動 (Activity)

アクティビティスペース内で実行される具体的な行為またはタスク。アルファをより進んだ状態へ移行させるために行われ、通常はワークプロダクトの生成や改良を伴う。

バグ (bug)

俗語的にソフトウェアの不具合を指す用語。厳密な技術的定義はなく、Defect や Fault、Failure を広く含む日常的な表現。

UP (Unified Process)

UMLを基盤とし、反復型・ユースケース駆動・アーキテクチャ中心のプロセスモデル。Rational Unified Process (RUP) などの派生形を持ち、CBD(コンポーネント指向開発)の実践基盤となる。

コンポーネント (Component)

責務・契約・依存関係を明示的に定義し、再利用可能で交換可能な単位としてカプセル化されたソフトウェア構成要素。論理モデルでは抽象構造単位として、物理モデルでは実装・デプロイメント単位として扱われる。

仕様確認 (verification)

Verification(仕様確認)とは、規定された設計仕様や要求仕様に対して、実装が一致しているかを確認する行為である。

CBD (Component-Based Development)

CBD(コンポーネント指向開発)は、ソフトウェアを責務・契約・インターフェースを明確に定義したコンポーネント単位で構築・再利用する開発方式です。 コンポーネントは独立性と交換可能性を備え、システムを疎結合に構成することで保守性と再利用性を高めます。 論理モデルでは機能や契約を定義する抽象構造単位として、物理モデルでは実際の実装・デプロイメント単位として扱われます。

UML (Unified Modeling Language)

オブジェクト指向分析・設計のための統一モデリング言語。クラス図、シーケンス図、ユースケース図などを通じてシステム構造と動作を表現する。UPおよびCBDの基盤言語。

妥当性確認 (validation)

Validation(妥当性確認)とは、システムや機能が利用目的や要求仕様に対して妥当であるかを確認する行為である。

文芸モデル駆動開発 (LMDD, Literate Model-Driven Development)

文芸モデル駆動開発(Literate Model–Driven Development, LMDD) は、自然言語による語りと形式的なモデル構造を統一されたテキスト基盤上で統合するソフトウェア開発手法です。従来のモデル駆動開発(MDD)を拡張し、ドキュメントとモデルを単一の整合的ソースとして扱います。 LMDDでは、開発成果物の記述要素と構造要素をSmartDox言語を用いて同時に表現します。この統合的な表現から、ModelDoxが構造データを抽出し、CML(Cozy Modeling Language)がドメイン固有モデルを定義し、Cozyが実行可能なコード、ドキュメント、構成情報などの成果物を生成します。 人工知能(AI)は、語りの文脈を解析し、構造の整合性を検証し、モデルおよび生成成果物の改良を支援することでLMDDプロセスに関与します。すべての成果物はテキスト形式で表現されるため、トレーサビリティ、バージョン管理、標準的な開発環境との相互運用性が確保されます。 ドキュメント、設計、実装の間に形式的かつ機械可読な関係を定義することにより、LMDDは人間による記述と機械による推論が同一の表現層で機能する、AI支援型モデル駆動開発の基盤を提供します。