AI駆動のプログラム自動生成―可能性と課題
近年、生成AIは自然言語のプロンプトからソースコードを生成できるまで進化してきました。これにより、従来手作業で行っていた実装の一部が自動化され、開発効率の向上が期待されています。
しかし、実際に開発現場でソースコードの自動生成を行うと「精度」「仕様との乖離」「修正コスト」といった問題が発生することが予想されます。本記事では、特にUIプログラミングやDSL (Domain Specific Language)設計といった領域に焦点を当て、生成AIの課題と可能性を整理します。
自然言語プロンプトの課題
AIによるコード生成は多くの場合、自然言語プロンプトによる仕様記述から始まります。
しかし、自然言語には次のような特性があります。
-
曖昧さや多義性が含まれやすい
-
記述の抜け漏れや曖昧な条件が発生しやすい
-
一貫性を維持するための構造化が難しい
結果として、仕様の再現度が低いコードが生成されることがあります。
修正を行う場合も、プロンプトの表現を変えて再実行するという試行錯誤が必要になり、効率が低下します。
UIプログラミングと自動生成
一方で、自動生成が比較的成功しやすい分野も存在します。その代表例がUIプログラミングです。
自動生成の観点からUIプログラミングには以下の特徴があります。
-
ボイラープレート(定型コード)が多い
-
パターン化された構造が多く、抽象化しやすい
-
構造と見た目の分離が比較的明確
過去にも「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の機能をミックスしたテキスト・ベースの文法の汎用の技術文書用の文書記述フォーマットです。 本サイトの記事の記述にも使用しています。
通常の文書の中に構造を埋め込み、その構造を取り出してモデルのDSLとすることで文芸モデリングを実現しています。 CML(Cozy Modeling Language)はこのModelDoxをDSLのメタ言語とした、オブジェクト・モデル記述用DSLです。
CozyはCMLからScalaなどのソースコードを生成するモデル・コンパイラであり、これにより説明文とコードの同期を保ったまま文芸モデル駆動開発 (LMDD, Literate Model-Driven Development)が可能になります。
Cozyによる文芸モデル駆動開発には、以下の利点があります。
-
自然言語による説明と構造化された仕様記述を同居させられる
-
構造部分は機械可読であり、生成AIやコンパイラが正確に処理可能
-
ドキュメントとコードが乖離しにくく、仕様変更への追随が容易
