Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AIがコードを書く時代の ジェネレーティブプログラミング

AIがコードを書く時代の ジェネレーティブプログラミング

Avatar for polidog

polidog PRO

April 10, 2026

More Decks by polidog

Other Decks in Technology

Transcript

  1. SDD (仕様駆動開発) SDD (Spec-Driven Development ) という考え方が広まりつつある。 1. 自然言語で仕様を書く 2.

    AI がそれに基づいてコードを生成する 3. 生成されたコードをレビュー・修正する 4. 変更があれば仕様を更新し、再生成する 仕様がモデルとなり、コードはその派生物という位置づけになる。 7
  2. ジェネレーティブプログラミングのプロセス DEMRAL (Domain Engineering Method for Reusable Algorithmic Libraries )

    という方法論で、3 つのフェーズからなる。 フェーズ やること 成果物 ドメイン分析 境界を決め、共通性と可変性を識別 スコープ定義、フィーチャーモデル、制約 ドメイン設計 アーキテクチャやDSL 、構成知識を設計 アーキテクチャ、DSL 記法、マッピングルール ドメイン実装 コンポーネントやジェネレータを実装 生成コード、テスト 11
  3. DSL で仕様を記述する フィーチャーの選択を宣言的に記述するためのDSL を定義する。 リストコンテナではYAML で仕様を記述する: name: IntList language: go

    element_type: int storage: type: array initial_capacity: 16 growth_strategy: doubling operations: - remove - insert - linear_search - iteration: direction: forward この記述がAI への入力となり、生成の再現性と検証可能性を高める。 14
  4. DEMRAL を参考にClaude Code のスキルに 各活動をスキルとして実装し、AI と対話しながら設計資産を作る。 活動 スキル 成果物 ドメインスコーピング

    /domain-scoping スコープ定義 フィーチャーモデリング /feature-modeling フィーチャーモデル、制約 ドメイン設計 /domain-design アーキテクチャ、コンポーネント、構成の知識 DSL 定義 /dsl-definition DSL 記法、サンプル仕様書 実装 /implement 生成コード テスト /test テストコード 15
  5. サンプル:リストコンテナの生成 Czarnecki の『Generative Programming 』で題材とされたリストコンテナを、 AI 時代のジェネレーティブプログラミングで再実装したサンプル。 フィーチャーモデル — Storage

    (Array/LinkedList ) 、Operations (Sort 、 Iteration 等)の可変性を構造化 コンフィグレーションDSL — YAML でフィーチャーを選択 構成の知識 — フィーチャー選択からコンポーネントへのマッピング + 言語 別の導出ルール 生成コード — 同じ仕様からGo ・PHP のコードを生成 https://github.com/polidog/gp-example-list 16
  6. 構成の知識 DSL に書かなくても、構成の知識が自動的に導出・補完するものがある。 言語別コントラクト導出: PHP → Countable , IteratorAggregate を自動実装

    Go → iter.Seq[T] 互換メソッドを自動生成 Python → Sized , Iterable , Container を自動実装 組み合わせルール: Contains 有効 → LinearSearch を自動で有効化 Sort 有効 → ElementType の比較可能性を確認 LinkedList + Singly + Reverse → 非効率の警告を付与 17
  7. 実際に生成できたもの リストコンテナのサンプルでは、同じ設計資産から複数言語のコードを生成で きた。 Go — 配列ベース + iter.Seq[T] 対応のイテレータ PHP

    — Countable , IteratorAggregate を自動実装 いずれも構成の知識のマッピングルールに基づいて生成され、テストも通過し ている。 18