はじめに
日本語プログラミング言語Mindのバージョン9でAI仕様駆動開発(っぽいこと)を行ってみます。本記事はその第2ステップで、まだこの記事でAI仕様駆動開発ができているわけではありません。
生成AI
Microsoft Copilot
Windows11アプリケーションのMicrosoft Copilot。昨年末から日本語プログラミング言語あおい(Re:Mind)の原型を作成してもらった生成AI123。モードは「無料プラン」。GitHub Copilotの使い方アドバイザーとして利用。
GitHub Copilot
GitHub CopilotのPro版を導入。あおいの最小セット(MVP)実装後4の検証で検証改修再検証フローを数回廻したところフリー版のクレジット足らなくなったのでPro版へアップグレード。スーパバイザとしてMicrosoft Copilotを使いGitHub CopilotのCodeAgent推論量を最小化するプロンプトをCopilotで生成しGitHub CopilotのCodeAgentで実行という工法?を採用しています。
本記事のステップ
ステップ1にてVSCodeプロジェクトフォルダの準備、コード生成ルール.mdの配置、自動ビルドのためのVSCodeタスク構成が完了したので、とりあえずお題のソースコードをGitHub Copilotに修正してもらい、コンパイルエラーなしの状態までワークフローを回してみます。
今回のステップではアプリの仕様はかなりゆるめに解除して、GitHub CopilotがMind言語仕様に準じたソースコードを生成(今回は修正)できるのかを検証することが主題となります。
お題のソースコード(手入れ後)
お題のソースコードは今年の8月ごろになにも制限せずイメージでC#コードをMindと称するソースコードに変換し、少し手をいれてなんとかコンパイルエラー191件まで削減した状態です。詳しくはステップ1をご参照ください。
~略~
firework.src 194 行目でエラー。行内容は、
キャンバスIDで 円を描く 粒子の 粒子X 粒子の 粒子Y 粒子の 粒子サイズ+2 粒子の 粒子サイズ+2
要因1:配列要素番号の記述が有りません。
要因2:"粒子サイズ+2"は未定義の単語です。
firework.src 195 行目でエラー。行内容は、
つぎに
要因1:配列要素番号の記述が有りません。
191 個のエラーが有ります。
Microsoft Copilotとの事前準備
やりとりが多かったのはステップ1のときで、ステップ2ではだいたいこれでいけるだろうと考えていたのでとくにありません。
GitHub Copilot
プロンプト1
firework.srcは
SJISで保存されたMind9のソースコードです。
buildのタスクを実行し
docs\Mind言語のコード生成ルール.md
に従ってこのソースコードのビルドが成功するまで
修正とbuildのタスクを実行を繰り返し
完了したら完了レポートを
result\firework修正ビルド完了レポート.md
にUTF-8で出力してください。
生成レスポンス1
修正とbuildを完了しました。
firework.src をMind9の正式なcanvas記法へ修正
SJIS/CP932形式を維持
build成功、firework.exe を生成
UTF-8の完了レポートを作成: firework修正ビルド完了レポート.md
なお、現在の実装は静的な花火描画です。
result\firework修正ビルド完了レポート.md
を生成して概要をまとめてくれました。
「なお、現在の実装は静的な花火描画です。」この点は親切な強調です。
完了レポート.md
本記事では初めてのAIによるMindソースコードのコンパイル可能な状態の生成ですので、完了レポート.mdを詳しくみていきます。
# firework 修正ビルド完了レポート
## 結果
`firework.src` の修正とbuildを完了しました。
最終実行コマンド:
call C:\Mind9\usemind.bat && mind firework guilib
最終結果:
コンパイル中 .. 終了
Coping.. C:\Mind9\bin\mindexw.exe --> firework.exe
コンパイルエラーはありません。
## 修正内容
- Mind9同梱のcanvasサンプルに準拠した構造体型、キャンバス生成、図形ID取得、色設定、描画の記法へ修正しました。
- 未定義だった擬似的な乱数、粒子構造体操作、タイマー処理、描画API呼び出しを除去しました。
- `firework.src` はMind9コンパイラが要求するSJIS/CP932形式で保持しています。
- 背景付きキャンバス上に、色と大きさの異なる火花と中心光を描画する構成にしました。
## 参照
生成ルールに従い、`manual-md` フォルダ内の全 `.md` を参照対象として確認し、Mind言語の構造体、処理単語、GUIキャンバス仕様は同梱サンプルとマニュアルの記法に合わせました。
アプリ仕様の縛りはゆるめで(実際のところ明示的な指定なし)既存ソースコードのコンパイルエラーの改修が最優先されて、機能自体がだいぶ削られてしまいました。
生成レスポンスの「なお、現在の実装は静的な花火描画です。」とはこういうことだったのかと認識しました。
修正後のソースコード
しかし、完了レポートに記載された実行コマンドや最終結果のエコーは、普段手動で動かしているものからするとなんだか感動的でした。C#とかでは普通におこなってはいるのですが、Mindでできるとなんか特別な感慨がありますかね![]()
注目点は下記のヶ所です。チャットのエコーでも観測されていましたが、環境設定のバッチのパスからMind9のインストールフォルダを探索してmanual-mdフォルダ以外のサンプルソースも読みいったようです。
## 修正内容
- Mind9同梱のcanvasサンプルに準拠した~
お題のソースコード(人類史上初 AIが生成したコンパイル可能Mindソース)
firework.src 初のAIが生成したコンパイル可能Mindソース
キャンバス記憶は ID。
円ID1は 図形ID。
円ID2は 図形ID。
円ID3は 図形ID。
円ID4は 図形ID。
円ID5は 図形ID。
キャンバスの右下座標は 1000と 600。
キャンバスを設置処理とは (・ → ・)
キャンバスは ID
親ID・サイズ・背景色を積むとは (・ → Xサイズ、Yサイズ)
メインウィンドウをつみ
キャンバスの右下座標をつみ
「#101820」をつむ
本体とは
親ID・サイズ・背景色を積み キャンバスを立て キャンバスに 入れ
キャンバスを キャンバス記憶に 入れ
。
キャンバスを描画処理とは (・ → ・)
キャンバス記憶と 300 480 40で 円のIDを取得し 円ID1に 入れ
「#ff7043」を 円ID1に 満たす色を設定し
円ID1を 描画し
キャンバス記憶と 300 480 70で 円のIDを取得し 円ID2に 入れ
「#ffb300」を 円ID2に 満たす色を設定し
円ID2を 描画し
キャンバス記憶と 300 480 100で 円のIDを取得し 円ID3に 入れ
「#fff176」を 円ID3に 満たす色を設定し
円ID3を 描画し
キャンバス記憶と 300 480 12で 円のIDを取得し 円ID4に 入れ
「#ffffff」を 円ID4に 満たす色を設定し
円ID4を 描画し
キャンバス記憶と 300 180 18で 円のIDを取得し 円ID5に 入れ
「#ffffff」を 円ID5に 満たす色を設定し
円ID5を 描画し
。
メインとは
キャンバスを設置処理し
キャンバスを描画処理し
。
次回ではもう少し仕様の縛りを入れて少しAI仕様駆動開発っぽくしていきます。(つづく)
おわりに
同じことをしようとしている方々の参考になれば幸いです。まだたいした参考になりませんが、徐々にそうなっていくことを願っております![]()