はじめに
日本語プログラミング言語あおい(Aoi)の実装言語仕様を生成AIに読み込ませて仕様駆動開発を展開しており、本記事は実装完了した「最小セット(MVP)」1の完了評価フェーズのステップ2になります。
日本語プログラミング言語あおい(Aoi)という自作言語の企画趣旨はこちらの記事をご参照ください。開発コード名を「Re:Mind」としており、AIとのやりとりではこの名称が使われています。
生成AI
GitHub Copilot
GitHub CopilotのPro+版。実装と検証の主担当。
Microsoft Copilot
GitHub Copilotのスーパバイザ2
本記事のステップ
1. 最小セット(MVP)
まずは「1つの小さなプログラムを通せる」レベルに絞る構成。Phase 1~8に分けて実装完了しました。1
下記の定義をMVPの実装済みセットとします。
docs\最小セットMVPの実装済要件.md 一部抜粋
# Re:Mind 最小セットMVPの実装済要件
## 5. MVPとして実装済みと判断できる最小要件
次の要件をMVPの実装済みセットとする。
1. UTF-8のRe:Mindソースをファイルから読み込める
2. 日本語識別子とRe:Mindの基本全角記号を字句解析できる
3. ドキュメントコメントからターゲット名を取得できる
4. namespace/class/methodの基本構造をAST化できる
5. ローカル変数、フィールド、代入をAST/IR化できる
6. 配列リテラルと添字アクセスを基本変換できる
7. 関数宣言、基本的な関数呼び出し、returnを変換できる
8. if、while、限定的なforを変換できる
9. Java、C#、VB.NETの基本ソースを出力できる
10. Console出力を各ターゲットの標準出力へ変換できる
11. CLIで入力ファイルと出力ファイルを指定できる
12. Javaについて固定JDKで生成ソースをコンパイル検証できる
この最小セットは、仕様全体ではなく、基本アルゴリズムとコンソール出力を対象
にしたトランスコンパイラMVPである。
Phase 9: 検証と品質改善
こちらの記事でPhase 9をいったん完了し完了条件の評価に進んでいます。
Phase 10: 完了条件
### 9.4 分類案のMVPを正式に満たすための追加作業
優先度の高い順に、次を実装・検証する必要がある。
1. 定数宣言をParser、IR、C#、Java、VB.NET Generatorへ接続する
2. `&&`、`||`、`!` と真偽値リテラルをLexer、Parser、型検査、Generatorへ
接続する
3. `return` / `返す` の構文を統一し、戻り値型と経路の検査を追加する
4. 代入、関数呼び出し、配列・メンバー操作の左辺と引数型を検証する
5. `ここまで`、省略形、入れ子構文の受入テストを追加する
6. 1つのMVPサンプルに定数、bool論理式、return、if、while、Console出力を
組み込み、3ターゲットでコンパイル検証する
完了評価フェーズでは上記の課題を満たすことをゴールとします。前回記事では上記課題を解消するためのあおいの検証用ソースコードの自動生成しました。本記事はそれをつかった検証・改修・再テスト・再評価の結果です。
Microsoft Copilot
GitHub Copilotへのプロンプトは自分でだしていましたのでMicrosoft Copilotとのやりとりはなかったです。
GitHub Copilot
プロンプト1
docs\優先度の高い残課題要件検証用ソースコード作成プラン完了レポート.mdで生成された検証用コードを使用し、
docs\最小セットMVPの実装済要件.mdの
9.4 分類案のMVPを正式に満たすための追加作業
を実行するプラン
docs\優先度の高い残課題要件検証結果反映実行プラン.md
を生成出力し、そのままそれを実行開始し
docs\優先度の高い残課題要件検証結果反映実行プラン完了レポート.md
に出力してください。
生成レスポンス1
直接の具体的なレスポンスは割愛しますが、下記のような実行プランを生成して実行開始しました。
docs\優先度の高い残課題要件検証結果反映実行プラン.md 一部抜粋
# 優先度の高い残課題要件検証結果反映実行プラン
## 1. 実施概要
[優先度の高い残課題要件検証用ソースコード作成プラン.md]に基づき、
優先度1から7を検証するAOIコーパスを作成した。
作成数は計画どおり24対、48ファイルである。
| Priority | 対数 | 検証対象 |
|---|---:|---|
| 01 | 6 | シンボル解決、型検査、関数呼出し、return型 |
| 02 | 3 | ローカル定数、定数配列、再代入禁止 |
| 03 | 4 | return英語表記、else-if、無限ループ、終端省略 |
| 04 | 3 | 汎用import、AliasClasses、未定義Alias |
| 05 | 4 | switch、break/continue、do-while、例外 |
| 06 | 3 | 継承、new、インスタンスメンバー、null演算子 |
| 07 | 1 | 3ターゲット統合受入 |
## 6. 次の実施順
1. Priority 01のシンボル登録・型診断を実装し、5つの期待診断ケースを生成前に
失敗させる。
2. Priority 02から06を、各PriorityのAOI対を受入テストとして使いながら実装
する。
3. 各正常系をC#、Java、VB.NETへ生成・コンパイル・実行する。
4. Priority 07の3ターゲット出力を完全一致させ、自動受入テストへ昇格する。
ここは数日の間(日中本業で外にいるときはPC電源落としていますので、夜中に作業実行)何度か中断と再開を繰り返して、実行プラン完了レポートは作成されたのですが、最終的には設計課題が浮き彫りとなりました。下記文書はその諸課題をまとめたものです。
プロンプト2
設計的な課題として残る要件について整理して
docs\優先度の高い残課題要件検証結果反映設計課題.md
に出力してください。
生成レスポンス2
設計課題を整理し、優先度の高い残課題要件検証結果反映設計課題.md に出力しました。
docs\優先度の高い残課題要件検証結果反映設計課題.md 一部抜粋
# 優先度の高い残課題要件検証結果反映 設計課題
## 1. 文書の目的
本書は、次の実行プランと完了レポートに記録された未完了事項から、個別機能の実装前に設計を確定すべき課題を整理する。
- [実行プラン](./優先度の高い残課題要件検証結果反映実行プラン.md)
- [完了レポート](./優先度の高い残課題要件検証結果反映実行プラン完了レポート.md)
- [完了レポート v2](./優先度の高い残課題要件検証結果反映実行プラン完了レポートv2.md)
- [完了レポート v3](./優先度の高い残課題要件検証結果反映実行プラン完了レポートv3.md)
- [完了レポート v4](./優先度の高い残課題要件検証結果反映実行プラン完了レポートv4.md)
- [完了レポート v5](./優先度の高い残課題要件検証結果反映実行プラン完了レポートv5.md)
対象は、単に未実装である構文ではなく、Parser、AST、IR、意味解析、3生成器の
境界をまたぐため、先に共通の意味や契約を決めないと実装が分岐する要件である。
## 2. 現状認識
Priority 01から03の一部、およびPriority 04から06の代表的なC#変換経路は
実装済み、または実装開始済みである。一方、次の事項は未検証または設計未確定で
あり、実装済みの型が存在することだけでは受入完了とみなせない。
- Java、VB.NETの生成物を対象コンパイラでコンパイル・実行する経路
- Parserが入れ子構造と省略終端を一貫して判定する規則
- Alias、複数クラス、継承、インスタンスメンバーを共通の名前解決で扱う規則
- switch、例外、null演算子、定数配列のターゲット間の意味
- 診断、終了コード、出力ファイル生成、3ターゲット統合受入の契約
## 3. 設計課題の全体像
表はmdのソースでは読みづらいので、ここはレンダリングします。
3. 設計課題の全体像
| 分類 | 対象要件 | 先に決める設計 |
|---|---|---|
| 構文境界 | else-if、終端省略、switch、try/catch、複数クラス | ブロック開始・終了、入れ子、曖昧入力の扱い |
| 共通意味モデル | Alias、定数配列、switch、例外、null、クラス | AST/IRが保持する意味とターゲット非依存の契約 |
| 名前・型解決 | Alias、catch変数、継承、インスタンス、new、null | スコープ、型、メンバー、継承探索、オーバーロード |
| ターゲット差分 | C#、Java、VB.NETの定数、例外、null、switch | 等価な出力への変換規則と制約の診断 |
| 受入・運用 | Priority 07、異常系、生成物検証 | コンパイル、実行、標準出力、失敗時のCLI契約 |
本ステップの評価
今回は「最小セット(MVP)」の要件を満たすための優先度の高い課題の解消を実行する際の検証用ソースコードを検証・修正のワークフローを実行してみました。保留にしていた設計上の課題が抽出されましたので、少し設計的な見直しを行い
再開します。
おわりに
以上です。いかがでしたでしょうか?なにか似たようなことをされようとしている方々の参考になれば幸いです。
-
AIとつくる日本語プログラミング言語Aoi (あおい) - Qiita
ステップ12 実行フロー統合の最小実装 ↩ ↩2 -
スーパバイザとしてMicrosoft Copilotを使いGitHub CopilotのCodeAgent推論量を最小化するプロンプトをCopilotで生成しGitHub CopilotのCodeAgentで実行という工法?を採用しています。 ↩