AI駆動のプログラム自動生成 ― 可能性と課題

浅海 智晴 Created: 2025-08-18

近年、生成AIは自然言語のプロンプト (Prompt)からソースコードを生成できるまで進化してきました。これにより、従来手作業で行っていた実装の一部が自動化され、開発効率の向上が期待されています。

しかし、実際に開発現場でソースコードの自動生成を行うと「精度」「仕様との乖離」「修正コスト」といった問題が発生することが予想されます。本記事では、特にUIプログラミングやDSL設計といった領域に焦点を当て、生成AIの課題と可能性を整理します。

自然言語プロンプトの課題

AIによるコード生成は多くの場合、自然言語プロンプトによる仕様記述から始まります。

しかし、自然言語には次のような特性があります。

  • 曖昧さや多義性が含まれやすい

  • 記述の抜け漏れや曖昧な条件が発生しやすい

  • 一貫性を維持するための構造化が難しい

結果として、仕様の再現度が低いコードが生成されることがあります。

修正を行う場合も、プロンプトの表現を変えて再実行するという試行錯誤が必要になり、効率が低下します。

UIプログラミングと自動生成

一方で、自動生成が比較的成功しやすい分野も存在します。その代表例がUIプログラミングです。

自動生成の観点からUIプログラミングには以下の特徴があります。

  • ボイラープレート(定型コード)が多い

  • パターン化された構造が多く、抽象化しやすい

  • 構造と見た目の分離が比較的明確

過去にも「GUIビルダー」と呼ばれる、画面レイアウトを視覚的に組み立てるUI構築支援ツールが登場しました。 Visual BasicやDelphiのフォームデザイナ、NetBeansのGUIビルダーなどがその代表例です。

これらのツールは実用面では限界もありました。たとえば、画面コードとアプリケーション・ロジックの繋ぎ込みまでを完全に自動化することは困難でした。

しかし、生成AIと組み合わせることで、従来困難だった仕様と実装の乖離を減らす新しい可能性が見えてきています。

高精度生成を実現する3つの要素

以下に示すのはUIの自動生成を高精度に実現することに寄与する3つの要素です。

  1. 画面モック(UIモックアップ)

    • 視覚的で明確な仕様書となる

    • 一種のDSLとして扱える

  2. 動作パターン

    • ボタン押下、リスト選択、フォーム送信など、典型的なパターンに分類可能

  3. アプリケーション・ロジックの仕様

    • OpenAPIやgRPCなどIDL(Interface Definition Language)で機械可読に定義可能

これらの要素間の繋ぎ込みはボイラープレイトの作成を手動で行わなければならない点がネックでしたが、この繋ぎ込み部分を生成AIで自動化できる可能性があります。

DSLアプローチによる精度向上

UI以外でも、仕様の曖昧さを排除し高精度な生成を行うには、問題領域ごとのDSL(Domain-Specific Language)を導入する手法が有効です。

  • DSLを設計する過程で、問題領域の構造・概念・ルールをモデル化できる

  • モデル・コンパイラを用いることで、仕様から直接実行可能なコードを生成できる

  • AIはDSL設計の補助や、DSL記述の自動補完に活用できる

特にモデル・コンパイラの開発は工数がかかりますが、生成AIがコード骨格や変換ロジックを生成することで、大幅な効率化が期待できます。

DSLとモデル・コンパイラが揃えば、コードの整合性が仕様レベルで担保され、生成結果のブレを防げます。 この場合、レビュー対象はプロンプトではなくDSL文書そのものになります。 そして、DSL文書の作成、レビューにAIが大いに活用できることはいうまでもありません。

AI駆動開発のスタイル
図 1. AI駆動開発のスタイル

SimpleModelingにおける実践

SimpleModelingでは、DSLのメタ言語としてSmartDoxを採用しています。 SmartDoxはMarkdown, org-mode, Asciidocの機能をミックスしたテキスト・ベースの文法の汎用の技術文書用の文書記述フォーマットです。 本サイトの記事の記述にも使用しています。

SmartDoxをDSLのメタ言語として用いる場合、その構造化部分をModelDoxと呼びます。 ModelDoxはSmartDox文書の中核を成すモデル記述部分であり、DSLの基盤を担います。

通常の文書の中に構造を埋め込み、その構造を取り出してモデルのDSLとすることで文芸モデリングを実現しています。 CML (Cozy Modeling Language)(Cozy Modeling Language)はこのModelDoxをDSLのメタ言語とした、オブジェクト・モデル記述用DSLです。

CozyはCMLからScalaなどのソースコードを生成するモデル・コンパイラであり、これにより説明文とコードの同期を保ったまま文芸モデル駆動開発 (LMDD, Literate Model-Driven Development)が可能になります。

Cozyによる文芸モデル駆動開発には、以下の利点があります。

  • 自然言語による説明と構造化された仕様記述を同居させられる

  • 構造部分は機械可読であり、生成AIやコンパイラが正確に処理可能

  • ドキュメントとコードが乖離しにくく、仕様変更への追随が容易

SmartDox/ModelDoxによる文芸モデル駆動開発
図 2. SmartDox/ModelDoxによる文芸モデル駆動開発

まとめ

生成AIは、適切に構造化された仕様記述と組み合わせることで、プログラムの自動生成において大きな力を発揮します。 特にUIやDSLの領域では、モックアップやIDLのような精度の高い仕様、そしてモデル・コンパイラの活用により、従来よりも高精度で保守性の高いコード生成が可能です。

生成AIは万能ではなく、構造化DSLと組み合わせることでこそ、実用的かつ持続可能な運用が可能になると考えられます。

SimpleModelingのように、文章と構造化仕様を統合し、生成AIとモデル駆動開発を組み合わせる文芸モデル駆動のアプローチは、今後の開発スタイルの有力な選択肢となるでしょう。

参照

用語集

プロンプト (Prompt)

RAGによって取得された知識を、AIモデルの推論プロセスに橋渡しするための構造化指示または文脈表現。 BoKに格納された構造化知識を、モデルが理解し行動・内化できる物語的/命令的形式に変換する。

逸脱 (deviation)

計算値や観測値が、基準値や真値から外れている状態。観測可能な量的ずれを表す。

DSL (Domain Specific Language)

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

CML (Cozy Modeling Language)

CMLは、Cozyモデルを記述するための文芸モデル記述言語です。 SimpleModelingにおける分析モデルの中核を担うDSL(ドメイン固有言語)として設計されています。 モデル要素とその関係性を自然言語に近い文体で記述できるよう工夫されており、AIによる支援や自動生成との高い親和性を備えています。 CMLで記述された文芸モデルは、設計モデル、プログラムコード、技術文書などに変換可能な中間表現として機能します。

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

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

文芸モデル (literate model)

文芸モデル(Literate Model)は、モデル構造と自然言語による語り(構造化文書)を統合した「読めるモデル」です。 文芸的プログラミング(Literate Programming)の思想をモデリング領域に拡張し、 構造(モデル)+語り(構造化文書) を一体化することで、人間とAIの双方が理解・操作できる知識表現を実現します。 「Literate Modeling(文芸的モデリング)」という発想自体は、 これまでにも一部の研究者や開発者によって試みられてきました。 しかし、それらは主にドキュメント生成やコード理解の支援にとどまっており、 モデルと言語・語り・AI支援を統合した体系的なモデリング手法として確立されたものではありません。 文芸モデル(Literate Model)は、SimpleModelingがAI時代に向けて新たに体系化・提唱したモデリング概念です。 文芸的モデリングの思想を継承しつつ、 AI協調型の知識循環とモデル生成を可能にする知的モデリング基盤として再構成されています。 文芸モデルは、単なるモデル記述技法ではなく、 人間の思考過程や設計意図を語りとしてモデルに埋め込み、 AIがそれを解析・再構成して設計や生成を支援するための枠組みです。