AI駆動のプログラム自動生成―可能性と課題
近年、生成AIは自然言語のプロンプトからソースコードを生成できるまで進化してきました。これにより、従来手作業で行っていた実装の一部が自動化され、開発効率の向上が期待されています。
しかし、実際に開発現場でソースコードの自動生成を行うと「精度」「仕様との乖離」「修正コスト」といった問題が発生することが予想されます。本記事では、特にUIプログラミングやDSL設計といった領域に焦点を当て、生成AIの課題と可能性を整理します。
自然言語プロンプトの課題
AIによるコード生成は多くの場合、自然言語プロンプトによる仕様記述から始まります。
しかし、自然言語には次のような特性があります。
-
曖昧さや多義性が含まれやすい
-
記述の抜け漏れや曖昧な条件が発生しやすい
-
一貫性を維持するための構造化が難しい
結果として、仕様の再現度が低いコードが生成されることがあります。
修正を行う場合も、プロンプトの表現を変えて再実行するという試行錯誤が必要になり、効率が低下します。
UIプログラミングと自動生成
一方で、自動生成が比較的成功しやすい分野も存在します。その代表例がUIプログラミングです。
自動生成の観点からUIプログラミングには以下の特徴があります。
-
ボイラープレート(定型コード)が多い
-
パターン化された構造が多く、抽象化しやすい
-
構造と見た目の分離が比較的明確
過去にも「GUIビルダー」と呼ばれる、画面レイアウトを視覚的に組み立てるUI構築支援ツールが登場しました。 Visual BasicやDelphiのフォームデザイナ、NetBeansのGUIビルダーなどがその代表例です。
これらのツールは実用面では限界もありました。たとえば、画面コードとアプリケーション・ロジックの繋ぎ込みまでを完全に自動化することは困難でした。
しかし、生成AIと組み合わせることで、従来困難だった仕様と実装の乖離を減らす新しい可能性が見えてきています。
DSLアプローチによる精度向上
UI以外でも、仕様の曖昧さを排除し高精度な生成を行うには、問題領域ごとのDSL(Domain-Specific Language)を導入する手法が有効です。
-
DSLを設計する過程で、問題領域の構造・概念・ルールをモデル化できる
-
モデル・コンパイラを用いることで、仕様から直接実行可能なコードを生成できる
-
AIはDSL設計の補助や、DSL記述の自動補完に活用できる
特にモデル・コンパイラの開発は工数がかかりますが、生成AIがコード骨格や変換ロジックを生成することで、大幅な効率化が期待できます。
DSLとモデル・コンパイラが揃えば、コードの整合性が仕様レベルで担保され、生成結果のブレを防げます。 この場合、レビュー対象はプロンプトではなくDSL文書そのものになります。 そして、DSL文書の作成、レビューにAIが大いに活用できることはいうまでもありません。

SimpleModelingにおける実践
SimpleModelingでは、DSLのメタ言語としてSmartDoxを採用しています。 SmartDoxはMarkdown, org-mode, Asciidocの機能をミックスしたテキスト・ベースの文法の汎用の技術文書用の文書記述フォーマットです。 本サイトの記事の記述にも使用しています。
SmartDoxをDSLのメタ言語として用いる場合、その構造化部分をModelDoxと呼びます。 ModelDoxはSmartDox文書の中核を成すモデル記述部分であり、DSLの基盤を担います。
通常の文書の中に構造を埋め込み、その構造を取り出してモデルのDSLとすることで文芸モデリングを実現しています。 CML(Cozy Modeling Language)はこのModelDoxをDSLのメタ言語とした、オブジェクト・モデル記述用DSLです。
CozyはCMLからScalaなどのソースコードを生成するモデル・コンパイラであり、これにより説明文とコードの同期を保ったまま文芸モデル駆動開発が可能になります。
Cozyによる文芸モデル駆動開発には、以下の利点があります。
-
自然言語による説明と構造化された仕様記述を同居させられる
-
構造部分は機械可読であり、生成AIやコンパイラが正確に処理可能
-
ドキュメントとコードが乖離しにくく、仕様変更への追随が容易
