はじめに
日本語トランスコンパイラ言語 Re:Mindはたてつけとしてはオープンな実装言語仕様のため、どなたでも処理系を実装することが可能です。逆転の発想で生成AIに実装言語仕様を読み込ませて、いくつかの抽象度レベルのプロンプトからトランスコンパイラ的な動きをさせてみようと思います。本記事はその第13ステップで、トランスコンパイラ的な動作の続きとなりす。
Microsoft Copilot
生成AIはWindows11アプリケーションのMicrosoft Copilotとします。サインインした状態で使用しますが、第1ステップのプロンプト実行以前、この1年くらいの間で日本語トランスコンパイラ言語 Re:Mindに関連するセッションはないものとします。第12ステップの後にはサインアウトがあります。
第13ステップ
第11ステップでは、定番アルゴリズムの線形探索法、二分探索法、バブルソートのソースコードを日本語トランスコンパイラ言語 Re:Mindでバージョニング情報を付与して再生しました。
第11ステップの生成バージョンを下記のバージョン情報で識別します。
定番アルゴリズム:線形探索法・2025-12-08版・3回目
定番アルゴリズム:二分探索法・2025-12-08版・3回目
定番アルゴリズム:バブルソート・2025-12-08版・3回目
上記バージョンの二分探索法の日本語トランスコンパイラ言語 Re:Mindによるソースコードを下記のプログラミング言語のソースコードにトランスコンパイルします。
Java
C#
Typescript
Go
VisualBasic.Net
VisualBasic for Application
プロンプト
下記のバージョン情報で識別される
定番アルゴリズム:二分探索法・2025-12-08版・3回目
日本語トランスコンパイラ言語 Re:Mindのソースコードを下記のプログラミング言語のソースコードに変換してください。
・Java
・C#
・Typescript
・Go
・VisualBasic.Net
・VisualBasic for Application
生成された変換後のソースコードを下記のバージョン情報で識別し、次回以降も参照できるように保持してください。
定番アルゴリズム:二分探索法・2025-12-08版・3回目からJava・2025-12-12-1回目変換
定番アルゴリズム:二分探索法・2025-12-08版・3回目からC#・2025-12-12-1回目変換
定番アルゴリズム:二分探索法・2025-12-08版・3回目からTypescript・2025-12-12-1回目変換
定番アルゴリズム:二分探索法・2025-12-08版・3回目からGo・2025-12-12-1回目変換
定番アルゴリズム:二分探索法・2025-12-08版・3回目からC#・2025-12-12-1回目変換
定番アルゴリズム:二分探索法・2025-12-08版・3回目からVisualBasic.Net・2025-12-12-1回目変換
定番アルゴリズム:二分探索法・2025-12-08版・3回目からVisualBasic for Application・2025-12-12-1回目変換
変換すルールは下記のリンク、オープンな実装言語仕様 日本語トランスコンパイラ言語 Re:Mind(リマインド)2023 Lv1.1ドラフトに記載の仕様に従ってください。
https://qiita.com/mylifewithviolin/items/ee1a16a363aaa4fe3f4c
Re:Mind上のJavadocの注釈はJavadocを注釈する仕様とするプログラミング言語の場合は日本語名と英語名を逆転して出力するのを忘れないでください。.NET言語のコメント仕様の言語の場合は.NET言語のコメント仕様に変換して、日本語名と英語名を逆転して出力してください。クラス名の宣言の拡張は行わないでください。定番アルゴリズム:二分探索法・2025-12-08版・3回目でRe:Mindで記述されているコードフラグメントを各プログラミング言語にトランスコンパイルしてください。ローカル変数の変数名の英語名への置換と各言語の注釈モデルの併記を忘れないでください。
生成レスポンス
変換に必要な元ソースの確認
まず、「定番アルゴリズム:二分探索法・2025-12-08版・3回目」のRe:Mindソースコード断片(関数宣言、ローカル変数、コメント/Javadoc注釈を含む完全なフラグメント)をご提示ください。仕様に沿って正確にトランスコンパイルするため、原文そのものが必要です。
- 必要項目:
関数宣言部: 戻り値、関数名、引数(型・日本語名・英語名のJavadoc併記)
本体: 制御構文(条件分岐・繰り返し)、ローカル変数、コメント/注釈
付随注釈: Re:Mind上のJavadoc(日本語/英語名の併記)
期待動作: 配列の前提(昇順/降順)、探索対象の型、返却仕様(インデックス/見つからない場合の値)
変換ルールの適用方針
- Javadoc名の逆転:
Re:Mind上のJavadocの「日本語名/英語名」併記は、Javadocを採用する言語では日本語名と英語名を逆転して出力します(例:@param 英語名 日本語名)。 - .NET言語のコメント仕様:
C#やVisual Basic .NETでは、.NETのXMLドキュメンテーションコメントに変換し、併記する日本語名と英語名も逆転して出力します。 - クラス宣言拡張なし:
クラス名の宣言拡張は行いません。原文の構造を保持します。 - ローカル変数の英語名置換と併記:
ローカル変数は英語名に置換し、各言語の注釈モデル(コメント)で元の日本語名との対応を併記します。 - 制御構文の写像:
Re:Mindの条件分岐・繰り返し・早期脱出(「やめる」相当)などは各言語の標準構文に忠実に写像します。 - ターゲット言語:
Java / C# / TypeScript / Go / Visual Basic .NET / Visual Basic for Application(Excel)に出力します。
上記は「Re:Mind(リマインド)2023 Lv1.1ドラフト」の仕様に基づきます。
バージョン識別と保持の扱い
- ご指定の識別子で各生成物の先頭に明記します。例:
「定番アルゴリズム:二分探索法・2025-12-08版・3回目からJava・2025-12-12-1回目変換」
同様に各言語分を付します。 - 次回参照のため、この識別子をそのままタイトル/ファイルヘッダコメントに含めて出力します。会話内で継続参照できるように同じ識別子を使います。
出力フォーマットのサンプル(言語別注釈の取り扱いのみ)
以下は、Javadoc逆転と.NET XMLコメント逆転の「形」だけを示すダミー例です(実コードはあなたのRe:Mind原文受領後に生成します)。
Java(Javadoc)
/**
* Binary search
* @param key キー
* @param array 配列
* @return インデックス
*/
public static int binarySearch(int key, int[] array) {
// var: 左端 left (元: 左端)
int left = 0;
// var: 右端 right (元: 右端)
int right = array.length - 1;
// ...
}
C#(.NET XMLコメント)
/// <summary>Binary search</summary>
/// <param name="key">キー</param>
/// <param name="array">配列</param>
/// <returns>インデックス</returns>
public static int BinarySearch(int key, int[] array)
{
// var: 左端 left (元: 左端)
int left = 0;
// var: 右端 right (元: 右端)
int right = array.Length - 1;
// ...
}
TypeScript(JSDoc)
/**
* Binary search
* @param key キー
* @param array 配列
* @returns インデックス
*/
export function binarySearch(key: number, array: number[]): number {
// var: 左端 left (元: 左端)
let left = 0;
// var: 右端 right (元: 右端)
let right = array.length - 1;
// ...
}
Go(標準コメント)
// BinarySearch performs binary search.
// key: キー, array: 配列, returns: インデックス
func BinarySearch(key int, array []int) int {
// var: 左端 left (元: 左端)
left := 0
// var: 右端 right (元: 右端)
right := len(array) - 1
// ...
}
Visual Basic .NET(XMLドキュメント)
''' <summary>Binary search</summary>
''' <param name="key">キー</param>
''' <param name="arr">配列</param>
''' <returns>インデックス</returns>
Public Shared Function BinarySearch(ByVal key As Integer, ByVal arr As Integer()) As Integer
' var: 左端 left (元: 左端)
Dim left As Integer = 0
' var: 右端 right (元: 右端)
Dim right As Integer = arr.Length - 1
' ...
End Function
Visual Basic for Application(標準コメント)
' BinarySearch: 二分探索
' key: キー, arr: 配列, returns: インデックス
Public Function BinarySearch(ByVal key As Long, ByRef arr() As Long) As Long
' var: 左端 left (元: 左端)
Dim left As Long: left = 0
' var: 右端 right (元: 右端)
Dim right As Long: right = UBound(arr)
' ...
End Function
注釈モデルや制御構文の写像はRe:Mindドラフトの方針に準じます。
次のステップ
- Re:Mind原文を貼り付けてください。配列の単調性(昇順/降順)、探索失敗時の戻り値仕様(例:-1)、比較関数の有無(カスタムコンパレータ)も明記いただけると、期待通りに変換できます。
- 受領後、指定の各識別子付きで、6言語の変換後ソースコードを一括生成します。
第13ステップの評価
今回はトランスコンパイルのセカンドトライでしたが、順調に積み上げてきたと思われた生成AIとの対話で重大な齟齬が発生してしまいました。第12ステップで見られたオブジェクト指向言語へ変換する際のクラス定義の宣言を抑制するために、プロンプトに補足した表現があだとなって大きく後退してしまいました。
おわりに
第13ステップは以上です。第14ステップは引き続きRe:Mind側ソースコードは現状を維持してトランスコンパイル結果の改善を試みてみます。
目次
「Microsoft Copilotで日本語トランスコンパイラ言語 Re:Mindをいじりたおす」の目次です。(ステップ降順)
ステップ26 ターゲット言語JavaとVB.NETへの展開
ステップ25 ターゲット言語C#へのASTからの生成処理
ステップ24 ASTを生成するサンプル実装をC#で生成
ステップ23 マッピングルール生成
ステップ22 AST(抽象構文木)風の構造化表示
ステップ21 バブルソート 実行可能形式 ターゲットJava C# VB.NET
ステップ20 二分探索法 実行可能形式 ターゲットJava C# VB.NET
ステップ19 線形探索法 実行可能形式 ターゲットJava C# VB.NET
ステップ18 バブルソート 1案件づつやりなおし
ステップ17 二分探索法 1案件づつやりなおし
ステップ16 線形探索法 1案件づつやりなおし
ステップ15 3つの定番アルゴリズムソースの忘却原因調査
ステップ14 バブルソートソースの忘却発生再確認
ステップ13 二分探索法ソースの忘却発生
ステップ12 線形探索法の6言語変換
ステップ11 バージョン情報付きの3定番アルゴリズムソースのフィードバック修正
ステップ10 バージョン情報付きの3定番アルゴリズムソースのフィードバック修正
ステップ9 バージョン情報付きで3定番アルゴリズムソースの生成
ステップ8 バージョニングが可能か確認
ステップ7 Re:Mindの詳しい言語仕様の学習結果をバブルソートで確認
ステップ6 Re:Mindの詳しい言語仕様の学習結果を二分探索法で確認
ステップ5 Re:Mindの詳しい言語仕様の学習結果を線形探索法で確認
ステップ4 Re:Mindの詳しい言語仕様の学習成果を保持するスコープを確認
ステップ3 Re:Mindの詳しい言語仕様を学習できる方法を確認
ステップ2 Re:Mindの言語仕様の認知度を確認
ステップ1 Re:Mindの認知度を確認