AI駆動のプログラム自動生成 ― 可能性と課題
近年、生成AIは自然言語のプロンプト (Prompt)からソースコードを生成できるまで進化してきました。これにより、従来手作業で行っていた実装の一部が自動化され、開発効率の向上が期待されています。
しかし、実際に開発現場でソースコードの自動生成を行うと「精度」「仕様との乖離」「修正コスト」といった問題が発生することが予想されます。本記事では、特にUIプログラミングやDSL (Domain Specific Language)設計といった領域に焦点を当て、生成AIの課題と可能性を整理します。
自然言語プロンプトの課題
AIによるコード生成は多くの場合、自然言語プロンプトによる仕様記述から始まります。
しかし、自然言語には次のような特性があります。
-
曖昧さや多義性が含まれやすい
-
記述の抜け漏れや曖昧な条件が発生しやすい
-
一貫性を維持するための構造化が難しい
結果として、仕様の再現度が低いコードが生成されることがあります。
修正を行う場合も、プロンプトの表現を変えて再実行するという試行錯誤が必要になり、効率が低下します。
UIプログラミングと自動生成
一方で、自動生成が比較的成功しやすい分野も存在します。その代表例がUIプログラミングです。
自動生成の観点からUIプログラミングには以下の特徴 (Feature)があります。
-
ボイラープレート(定型コード)が多い
-
パターン化された構造が多く、抽象化しやすい
-
構造と見た目の分離が比較的明確
過去にも「GUIビルダー」と呼ばれる、画面レイアウトを視覚的に組み立てるUI構築支援ツールが登場しました。 Visual BasicやDelphiのフォームデザイナ、NetBeansのGUIビルダーなどがその代表例です。
これらのツールは実用面では限界もありました。たとえば、画面コードとアプリケーション・ロジックの繋ぎ込みまでを完全に自動化することは困難でした。
しかし、生成AIと組み合わせることで、従来困難だった仕様と実装の乖離を減らす新しい可能性が見えてきています。
高精度生成を実現する3つの要素
以下に示すのはUIの自動生成を高精度に実現することに寄与する3つの要素です。
-
画面モック(UIモックアップ)
-
視覚的で明確な仕様書となる
-
一種のDSLとして扱える
-
-
動作パターン
-
ボタン押下、リスト選択、フォーム送信など、典型的なパターンに分類可能
-
-
アプリケーション・ロジックの仕様
-
OpenAPIやgRPCなどIDL(Interface (インターフェース) Definition Language)で機械可読に定義可能
-
これらの要素間の繋ぎ込みはボイラープレイトの作成を手動で行わなければならない点がネックでしたが、この繋ぎ込み部分を生成AIで自動化できる可能性があります。
DSLアプローチによる精度向上
SimpleModelingにおける実践
SimpleModeling (シンプルモデリング)では、DSLのメタ言語としてSmartDoxを採用しています。 SmartDoxはMarkdown, org-mode, Asciidocの機能をミックスしたテキスト・ベースの文法の汎用の技術文書用の文書記述フォーマットです。 本サイトの記事の記述にも使用しています。
通常の文書の中に構造を埋め込み (Embedding)、その構造を取り出してモデル (Model)のDSLとすることで文芸モデリング (Literate Modeling)を実現しています。 CML (Cozy Modeling Language)(Cozy Modeling Language)はこのModelDoxをDSLのメタ言語とした、オブジェクト・モデル記述用DSLです。
CozyはCMLからScalaなどのソースコードを生成するモデル・コンパイラであり、これにより説明文とコードの同期を保ったまま文芸モデル駆動開発 (LMDD, Literate Model-Driven Development)が可能になります。
-
自然言語による説明と構造化された仕様記述を同居させられる
-
構造部分は機械可読であり、生成AIやコンパイラが正確に処理可能
-
ドキュメントとコードが乖離しにくく、仕様変更への追随が容易
まとめ
生成AIは、適切に構造化された仕様記述と組み合わせることで、プログラムの自動生成において大きな力を発揮します。 特にUIやDSLの領域では、モックアップやIDLのような精度の高い仕様、そしてモデル・コンパイラの活用により、従来よりも高精度で保守性の高いコード生成が可能です。
生成AIは万能ではなく、構造化DSLと組み合わせることでこそ、実用的かつ持続可能な運用が可能になると考えられます。
SimpleModelingのように、文章と構造化仕様を統合し、生成AIとモデル駆動開発を組み合わせる文芸モデル駆動のアプローチは、今後の開発スタイルの有力な選択肢となるでしょう。
参照
用語集
- プロンプト (Prompt)
-
RAGによって取得された知識を、AIモデルの推論プロセスに橋渡しするための構造化指示または文脈表現。 BoKに格納された構造化知識を、モデルが理解し行動・内化できる物語的/命令的形式に変換する。
- DSL (Domain Specific Language)
-
DSL(ドメイン固有言語)は、特定の領域(ドメイン)に特化して設計された言語であり、その分野の概念や構造を直接的かつ簡潔に表現することを目的とします。 一般的な汎用プログラミング言語(GPL)に比べ、DSLは特定ドメインの問題解決や自動生成に適した高い抽象度を持ちます。
- 逸脱 (deviation)
-
計算値や観測値が、基準値や真値から外れている状態。観測可能な量的ずれを表す。
- 特徴 (Feature)
-
UMLにおけるFeatureは、ClassifierのInstanceを特徴付ける構造上または振る舞い上の性質です。AttributeなどのStructural Featureと、OperationなどのBehavioral Featureがあります。
- インターフェース (Interface)
-
Undefined
- シンプルモデリング (SimpleModeling)
-
SimpleModelingは、KnowledgeからDomain Modelを構成し、CMLで形式化し、CozyとAIによって実行可能ソフトウェアへ実現し、Textus上で動作させる、モデリング中心のソフトウェア開発方法論と技術体系です。
- モデル (Model)
-
Modelとは、対象を特定のPurposeとConcernに基づいて選択し、理解、判断、検証、構築に利用できる形で表した抽象です。対象そのものではなく、目的に必要な要素、関係、意味を保持する表現です。
- 埋め込み (Embedding)
-
埋め込み(Embedding)とは、文章、用語、モデル要素などを、その意味上の近さを計算できる数値ベクトルへ変換した表現です。類似検索や候補抽出に利用します。
- 文芸モデリング (Literate Modeling)
-
Undefined
- Cozy Modeling Language (CML)
-
CML(Cozy Modeling Language)は、オブジェクト・モデルのうち、プログラム生成と実行へ接続する実行可能モデルを記述するSimpleModelingの形式モデリング言語です。
- Cozy
-
Cozyは、CMLと各種DSLで記述されたModelを解析し、プログラム、設定、文書などの実現成果物へ変換するSimpleModelingのツールチェーンです。
- Scala
-
Undefined
- 文芸モデル駆動開発 (LMDD, Literate Model-Driven Development)
-
文芸モデル駆動開発(Literate Model–Driven Development, LMDD) は、自然言語による語りと形式的なモデル構造を統一されたテキスト基盤上で統合するソフトウェア開発手法です。従来のモデル駆動開発(MDD)を拡張し、ドキュメントとモデルを単一の整合的ソースとして扱います。 LMDDでは、開発成果物の記述要素と構造要素をSmartDox言語を用いて同時に表現します。この統合的な表現から、ModelDoxが構造データを抽出し、CML(Cozy Modeling Language)がドメイン固有モデルを定義し、Cozyが実行可能なコード、ドキュメント、構成情報などの成果物を生成します。 人工知能(AI)は、語りの文脈を解析し、構造の整合性を検証し、モデルおよび生成成果物の改良を支援することでLMDDプロセスに関与します。すべての成果物はテキスト形式で表現されるため、トレーサビリティ、バージョン管理、標準的な開発環境との相互運用性が確保されます。 ドキュメント、設計、実装の間に形式的かつ機械可読な関係を定義することにより、LMDDは人間による記述と機械による推論が同一の表現層で機能する、AI支援型モデル駆動開発の基盤を提供します。