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

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

しかし、実際に開発現場でソースコードの自動生成を行うと「精度」「仕様との乖離」「修正コスト」といった問題が発生することが予想されます。本記事では、特に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駆動開発のスタイル
Figure 1. 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やコンパイラが正確に処理可能

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

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

まとめ

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

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

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