なぜソフトウェア開発方法論を再構築するのか

Created: 2026-07-20

ソフトウェア開発は、機械語から高級言語、ライブラリ、フレームワークへと抽象化を重ねてきました。AIの登場によって、ドメインモデルは、人間が主に扱う新しいworking abstractionになりました。

プログラミングがなくなるわけではありません。AIがプログラミング作業の多くを下位層で担うようになることで、人間が直接扱う中心的な対象が、コードからモデル (Model)へ移ります。

本稿では、この変化によって、なぜソフトウェア開発方法論 (Software Development Methodology)をモデリング中心に再構築する必要があるのかを考えます。

記事の全体像

第1回の全体像: Domain Modelを実装へ接続されたworking abstractionとして扱います。 summary ja

抽象化の歴史

ソフトウェア開発の歴史は、抽象化の歴史として捉えることができます。

抽象化段階 人間が扱う主な対象

機械語

CPUが実行する命令

アセンブリ言語

機械命令を表す記号とアドレス

高級言語

、関数、制御構造、オブジェクト

ライブラリ

再利用可能な機能とAPI

フレームワーク

アプリケーションの構造と拡張点

抽象化が進むたびに、人間が担当する仕事は上位へ移ってきました。機械語を直接並べる代わりに、高級言語で型 (Type)や関数を記述します。共通処理を毎回実装する代わりに、ライブラリを利用します。アプリケーション全体の制御を一から組み立てる代わりに、フレームワークが提供する構造の中に固有の処理を配置します。

この変化は、人間が細部を考えなくなったということではありません。細部を安定して扱う仕組みが生まれたことで、人間がより上位の問題に集中できるようになったということです。

ドメインモデルは以前から存在していました。しかし、多くの場合、それは実装とは直接結び付かない、問題領域に対するView (ビュー)でした。Javaなどのオブジェクト指向言語、設計規約、コード生成によってドメインモデルと実装を対応させる試みは行われてきましたが、その変換の多くは人間に依存 (Dependency)し、モデルと実装の間には大きな乖離が残っていました。

AIの登場によって、ドメインモデルは、人間が主に扱う新しいworking abstractionになりました。ここでworking abstractionとは、実装への実現経路を持ち、開発を実際に前へ進められる抽象という意味です。AIはドメインモデルを解釈して実装へ変換し、実装に必要な詳細を補完します。さらにTextusが実行基盤を提供することで、ドメインモデルから実行可能ソフトウェアへ至る経路を構成できます。これにより、ドメインモデルは、実装から切り離された分析資料ではなく、実装に接続されたソフトウェア開発上の抽象として機能します。

抽象化には実現手段が必要

成功した抽象化には、常に下位層へ到達するための信頼できる実現手段があります。

高級言語は、機械語を不要にしたわけではありません。コンパイラが高級言語を機械語へ変換するため、人間が機械語を直接記述する必要がなくなりました。フレームワークも、実行処理を消したわけではありません。ランタイムが共通の制御を引き受けることで、開発者はアプリケーション固有の問題に集中できます。

したがって、抽象化は、抽象的な表現を作るだけでは成立しません。その表現から実行可能なソフトウェアへ到達する経路が必要です。抽象化と実現は、ソフトウェア工学を支える一組の仕組みです。

SimpleModeling (シンプルモデリング)では、ドメインモデルを問題領域に対するViewであり、人間が主に扱うworking abstractionとして位置付けます。AIはドメインモデルを実装へ変換し、必要な実装詳細を補完します。Textusは、その結果得られるソフトウェアの実行基盤を提供します。この組み合わせによって、ドメインモデルから実装と実行へ至る経路を構成します。

AIが変えるもの

AIは、プログラムの生成、修正、テスト (Test)、リファクタリングなどを支援し、実装作業の多くを担えるようになりつつあります。

しかし、これはプログラミングそのものが消えることを意味しません。生成されたソフトウェアは、最終的にはプログラミング言語、ライブラリ、フレームワーク、ランタイムによって構成され、実行されます。変わるのは、プログラミングの存在ではなく、人間がその作業へ関与する位置です。

AIへ実装を依頼する場合、人間は、何を作るのか、どの制約 (Constraint)を守るのか、どの責務 (Responsibility)をどこへ置くのか、何を正しい結果とするのかを示す必要があります。コードの各行を直接指定する代わりに、実装の前提となる意味と構造を与える仕事が重要になります。

このときAIは、ドメインモデルから実装への変換と、実装に必要な詳細の補完を担います。この働きによって、ドメインモデルが実装へ接続されます。

プログラミングからモデリングへ

この意味と構造を表現する活動 (Activity)がモデリングです。

ここでいうソフトウェアモデリングは、図を描くことだけではありません。問題領域をどのように捉えるか、ソフトウェアの各要素がどの責務を持つか、処理がどのように進むか、知識をどのように構造化するかを、異なるViewから明確にすることです。ドメインモデルは、このうち問題領域に対するViewです。

人間の中心的な仕事がプログラミングからモデリングへ移るというのは、人間がコードを一切書かなくなるという意味ではありません。開発全体を成立させるために、人間が直接設計すべき主対象が、コードの記述からモデルの構成へ移るという意味です。

新しいチョークポイント

AIが実装を高速化すると、モデルの曖昧さや矛盾も高速に実装へ伝わります。構造が不明確であれば、AIは局所的には動くコードを生成できても、システム全体の責務や整合性を安定して保つことができません。

一方で、目的、用語、責務、境界、実行規則が明確かつ一貫してモデル化されていれば、AIはその構造を解釈し、実装、検証、修正を進めやすくなります。ただし、明確性と一貫性は、モデルが現実の業務や要求に対して妥当で正確であることを意味しません。AIは、明確に記述された誤ったモデルも忠実に実装します。

そのため、ソフトウェアの品質は、モデル化の品質にこれまで以上に強く依存します。

モデリングがソフトウェア開発の新しいチョークポイントになります。
これは、単にモデリングが重要になるという主張ではありません。AIによって実装能力が広く利用可能になるほど、開発結果の差を生む場所が、実装量から、何をどのようにモデル化するかへ移るということです。

ドメインモデルの精度を高める仕組み

SimpleModelingでは、モデルの正確性は一度に確定できるものではないと考えます。用語集 (Glossary)ユースケース (Use Case)BoK (Body of Knowledge)、ドメインモデルのメタモデルを共通基盤として、ドメインエキスパート、開発者、AIが協業し、反復的にドメインモデルの精度を高める仕組みを用意します。

共通基盤 役割

用語集

用語の意味と境界を明確にします。

ユースケース

業務シナリオに対するモデルの妥当性を確認します。

BoK

知識をHTML(Web)としてドメインエキスパート、開発者、AIに共有します。AIはMCPを通してBoKを参照し、開発者とAIはコンポーネントとして提供される知識や機能も利用します。

ドメインモデルのメタモデル

オブジェクト制約、関数などによって、モデルに構造と厳密性を与えます。

三者は、この共通知識を基にドメインモデルを構成し、ユースケースによって業務上の妥当性を確認します。発見した不足や矛盾をBoK、用語、制約モデルへ反映し、AIが実装を更新します。このサイクルを繰り返すことで、モデルと実装の精度を高めます。

ドメインエキスパートは業務知識とモデルの妥当性を確認し、開発者はモデルの構造、制約、実現可能性を確認します。AIはBoKを参照し、知識の整理、矛盾や不足の発見、モデル化を支援します。AIが単独で正しいモデルを生成するのではなく、3者の協業と反復によってモデルを継続的に改善します。

なぜ方法論を再構築するのか

既存のソフトウェア工学には、オブジェクト指向、デザインパターン、ドメイン駆動設計 (DDD, Domain-Driven Design)、CQRS、知識グラフ (knowledge graph)など、多くの有用な技術があります。AIによって、これらの価値が失われるわけではありません。

ただし、人間が直接扱う抽象化レベルが変われば、個別技術の位置付けと使い方を改めて整理する必要があります。技術を一覧にした知識体系だけでは、どの技術を選び、どの設計判断を固定し、どのような順序で開発するかを決められません。

必要なのは、既存技術をモデリングという軸から選択し、相互の役割を定め、抽象から実行可能ソフトウェアへ到達する開発方法として統合することです。これが、ソフトウェア開発方法論を再構築する理由です。

SimpleModelingの立場

SimpleModelingは、AI時代に新しく現れた個別技術を集めることを目的としません。既存のソフトウェア工学知識をモデリング中心の視点から選択し、具体的なソフトウェア開発方法論として構成します。

Literate Model-Driven Cloud-Native Development with Object-Functional Paradigms for the AI Era
SimpleModeling.orgでは、このキャッチフレーズのもと、文芸モデル駆動、クラウド・ネイティブ、オブジェクト関数パラダイム (Object-Functional Paradigm)の三つを方法論の軸とします。

方法論上の役割

文芸モデル駆動

知識、説明、モデル、実装を接続します。

クラウド・ネイティブ

コンポーネントと実行基盤によって、モデルを実行可能ソフトウェアへつなぎます。

オブジェクト関数パラダイム

オブジェクト責務協調を、と関数による厳密な表現と組み合わせます。

また、モデルを作ること自体を最終目的にはしません。ソフトウェア工学に必要なのは、抽象化と、その抽象を実行可能ソフトウェアへつなぐ実現経路の両方です。シリーズ全体を通して、SimpleModelingがこの経路をどのように構成するかを説明します。

次回

SimpleModelingのモデル中心という方向性は、AIの登場によって始まったものではありません。CML (Cozy Modeling Language)DSL (Domain Specific Language)Literate Modeling (文芸モデリング)実行可能モデル (Executable Model)を通して、以前からModelからExecutable Softwareへの経路を追求してきました。

次回は「SimpleModelingが目指してきたもの」として、その歴史的な連続性と、AIがKnowledgeからModelへの変換をどのように補完するのかを説明します。

参照

用語集

モデル (Model)

Modelとは、対象を特定のPurposeとConcernに基づいて選択し、理解、判断、検証、構築に利用できる形で表した抽象です。対象そのものではなく、目的に必要な要素、関係、意味を保持する表現です。

ソフトウェア開発方法論 (Software Development Methodology)

Software Development Methodologyとは、ソフトウェア開発で使用するモデル、モデル変換、技術、設計原則、判断規則を一つの体系として定める方法論です。何をモデル化し、モデルをどのように構成し、実行可能ソフトウェアへ接続するかを定義します。 一般的な用法では、Software Development MethodologyがDevelopment Processを含む場合もあります。SimpleModelingでは、モデルとモデル変換を定めるMethodologyと、それを開発実務で運用するDevelopment Processを分離して扱います。

オブジェクト (Object)

Objectとは、Classまたは他のClassifierによって分類され、構造、State、Behaviorを持ち得るInstanceです。Objectは、同じClassifierの他のInstanceと区別して参照できる個体として扱われます。

型 (Type)

Undefined

依存 (Dependency)

UMLにおけるDependencyは、ClientとなるModel Elementの仕様または実装が、Supplierとなる別のModel Elementの定義へ意味的または構造的に依存することを表すDirected Relationshipです。

ビュー (View)

Viewとは、Modelを特定のPurposeとConcernに応じて選択し、理解、判断、検証、利用できる形で投影した表現です。ViewはModelの一部を見せるものであり、元のModelとは別に意味を所有しません。

Textus

Textusは、SimpleModelingによって実現されたソフトウェアを動作させるための実行基盤です。アプリケーションに共通する実行、運用、連携の機構を提供します。

シンプルモデリング (SimpleModeling)

SimpleModelingは、KnowledgeからDomain Modelを構成し、CMLで形式化し、CozyとAIによって実行可能ソフトウェアへ実現し、Textus上で動作させる、モデリング中心のソフトウェア開発方法論と技術体系です。

テスト (Test)

Testとは、指定した条件で対象を実行または評価し、観測した結果を期待する結果やConstraintと比較して、要求または契約への適合を確認する活動とその仕様です。

責務 (Responsibility)

Responsibilityとは、ObjectまたはRoleが、何を知り、判断し、行い、守るべきかを表す義務です。構造上の情報だけでなく、規則とBehaviorの所有を定めます。

制約 (Constraint)

UMLにおけるConstraintは、一つ以上のModel ElementのSemanticsの一部を宣言するため、自然言語または機械可読言語で表した条件または制限です。評価結果はBooleanであり、評価は副作用を持ちません。

活動 (Activity)

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

用語集 (Glossary)

Glossaryとは、対象領域で使用する用語について、名称、意味、境界、同義語、識別子を管理する知識資源です。関係者が同じ用語を同じ意味で扱うための共通基盤になります。

BoK (Body of Knowledge)

SimpleModelingでは文脈共有の核となる知識体系をBoK (Body of Knowledge)と呼んでいます。 BoKの構築は、知識の共有、教育、AIによる支援、自動化、意思決定支援を可能にするための基盤です。

ユースケース (Use Case)

UMLにおけるUse Caseは、対象システムがActorまたは他の利害関係者に観測可能な価値あるResultをもたらすために実行するActionの集合を定めるModel Elementです。

モデル・コンテキスト・プロトコル (MCP, Model Context Protocol)

モデル・コンテキスト・プロトコル(Model Context Protocol、MCP)とは、生成AIを利用するアプリケーションと外部のデータ源やツールを接続し、コンテキストと機能を標準化された形で提供するためのオープンプロトコルです。

コンポーネント (Component)

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

ドメイン駆動設計 (DDD, Domain-Driven Design)

Domain-Driven Designとは、複雑な問題領域をDomain Modelによって捉え、Ubiquitous Language、Bounded Context、Aggregateなどを用いて、業務上の意味とソフトウェア設計を接続するための原則、パターン、プラクティスの集合です。

知識グラフ (knowledge graph)

現実の概念・事物・出来事をノードとし、その関係をエッジとして表す意味的グラフ構造の知識ベース。

オブジェクト関数パラダイム (Object-Functional Paradigm)

Object-Functional Paradigmとは、ObjectのIdentity、Responsibility、State、Collaborationによる構造化と、型、値、関数、合成による厳密な計算表現を組み合わせる設計パラダイムです。

協調 (Collaboration)

UMLにおけるCollaborationは、専門化された機能を担う参加要素のRoleが共同して、目的とする機能を達成する構造を記述するClassifierです。

Cozy Modeling Language (CML)

CML(Cozy Modeling Language)は、オブジェクト・モデルのうち、プログラム生成と実行へ接続する実行可能モデルを記述するSimpleModelingの形式モデリング言語です。

文芸モデリング (Literate Modeling)

Undefined

実行可能モデル (Executable Model)

Undefined

DSL (Domain Specific Language)

DSL(ドメイン固有言語)は、特定の領域(ドメイン)に特化して設計された言語であり、その分野の概念や構造を直接的かつ簡潔に表現することを目的とします。 一般的な汎用プログラミング言語(GPL)に比べ、DSLは特定ドメインの問題解決や自動生成に適した高い抽象度を持ちます。