2026年5月30日土曜日

ローマ字をダダ打ちして、AIに日本語に変換してもらう[その3 進化編]

BLOG 2026.05.30 EXPERIMENT EVOLUTION #IME #AI #秀丸マクロ

ローマ字をダダ打ちして、
AIに日本語に変換してもらう
─ その3 進化編 ─

$ romaji_macro --version 3.0 --mode auto_convert
「もう一手間」が、
どうしても許せない
── ENTER → AUTO CONVERT → 完了 ──
v1.0 → v2.0 → v3.0 → Web → ???

昨日、完成したと思っていたのであります。ローマ字だけをガーッとタイピングして、AIに漢字かな交じり文へ変換してもらうという秀丸マクロ。確かに使い始めた瞬間は「おお、これは便利だ」と思ったのですが、人間の欲望というものは際限がないもので、使い込むうちに「もっと楽にできないのか?」という声が脳の奥底から聞こえてくるわけです。

文字列を選択して、ショートカットキーを押す。たったこれだけの動作なのですが、人間というのはこの「ひと手間」が嫌なのです。どうしてもやりたくない。もう細胞レベルで拒否している。完成したと思った翌日にはもう「これじゃ足りない」と感じている自分がいる。なんとも贅沢な話ですが、しかしこの「怠惰への飽くなき渇望」短く言えば「そのひと手間をどうしてもサボりたい」これこそがイノベーションの母だという気もするのでした。


究極の怠惰、あるいは理想の入力とは

結局のところ、理想は何なのかと突き詰めて考えてみたのであります。答えは実にシンプルでした。

一行ローマ字を打って、
改行したら勝手に日本語になっている
究極的には、これが一番便利である。

──「ひと手間」すら省きたいという、人類の壮大な怠惰──

だってですね、前の文章に何を書いたかということが、ダダ打ちして垂れ流したローマ字文ではパッと見て理解ができないのですから不便なのです。自分が30秒前に何を書いたのかすら分からない。それはもう暗号文を自分で量産しているようなものです。


漢字かな交じり文 vs ローマ字垂れ流し文

そう考えると、日本語の漢字かな交じり文というのは実に偉大な仕組みだと改めて感心させられるのであります。視覚だけで文章の大意が掴める。一方のローマ字垂れ流し文は、ひと通り全部読まないと何が書いてあるのか分からない。この差はいったい何なのか、ちょっと自分なりに実験してみたのです。

─── ◆ 視覚実験 ◆ ───
kanjikanamajiribunnto ro-majitarenagasibunwomikurabete nanika kanjirukotohanai? sou,kanjikanamajiribunnha 3gyougurainobunshouwomiteirukedo, ro-majitarenagasibunnha yomutokino sikakuhanniwosemakusinaitoyomenainda.

漢字かな交じり文とローマ字垂れ流し文を見比べて、何か感じることはない?そう、漢字かな交じり文は3行ぐらいの文章を見ているけど、ローマ字垂れ流し文は読む時の視覚範囲を狭くしないと読めないんだ。

sou,kanjikanamajiribunnha, 2,3gyouwosikainiirete saishoni kanjiwomite taiiwotoraetetoiuyounakouiwositekara tiratiratohiraganabubunwomite yondeiru, jibundekansatusite soukanjita.

そう、漢字かな交じり文は、2、3行を視界に入れて最初に漢字を見て大意を捉えてというような行為をしてから、ちらちらとひらがな部分を見て読んでいる、自分で観察してそう感じた。

つまりこういうことなのであります。漢字かな交じり文は「まず漢字で大意を把握 → ひらがなで補完」という二段階読解を無意識にやっている。漢字が視覚的なランドマークの役割を果たしているわけですね。だからこそ、3行分を一気に視界に入れて読むことができる。

一方のローマ字文は、すべてが同じ粒度のアルファベットの連打ですから、ランドマークが存在しない。だから視覚範囲を狭めて一語一語追いかけるしかない。慣れの問題ではなく、漢字というシステムの構造的な優位性だったというわけです。


マクロ進化:範囲選択が不要になった日

というわけで、本日の目標は明確でした。一行ローマ字をガーッと書いて、改行してショートカットキーをポンと叩いたら、直上の一行が漢字かな交じり文に変換される。そういうマクロをAIに作ってもらったのであります。

ローマ字を
一行打つ
Enter で
改行
Ctrl+Shift+J
直上の行が
日本語に変身

昨日のバージョンだと、自分で範囲選択をしてからショートカットキーでマクロ発動という手順でした。それが今日のバージョンでは範囲選択が不要になった。たった一手間省けただけなのですが、これが使い勝手に雲泥の差を生むのであります。一行ローマ字でぐわーっと打って、改行してショートカットキーで日本語変換。このリズムが身体に馴染んでくると、もう元には戻れないのでした。


秀丸マクロ:ローマ字→日本語変換(進化版)

HIDEMARU MACRO romaji_to_japanese_v3.mac
// ------------------------------------------------------------- // ローマ字→日本語変換(ショートカット版 / 使い方 A) // 対象: 秀丸エディタ Ver 9.40 以上 / Windows 10 以上 // // 【使い方 A】 // 1. ローマ字を入力 // 2. Enter で次の行へ // 3. Ctrl+Shift+J(キー割り当て後)で変換 // → 直上の行が日本語になり、カーソルは下の空行に戻る // // 【使い方 B】ローマ字の行上でショートカット → その行を変換 // 【使い方 C】範囲選択してショートカット → 選択部分を変換 // // 【初期設定】(初回のみ) // 1. [マクロ]→[マクロ登録] で本ファイルを登録 // 2. [その他]→[キー割り当て] で Ctrl+Shift+J に本マクロを割り当て // ------------------------------------------------------------- $api_key = getenv("Gemini_API_KEY"); $model = "gemini-3.1-flash-lite"; $romaji = ""; $answer = ""; ##prevLineMode = 0; if ($api_key == "") { message "環境変数 Gemini_API_KEY が設定されていません。"; endmacro; } // 範囲選択がある場合 if (selecting) { $romaji = getselectedtext(); if ($romaji == "") { message "変換対象が選択されていません。"; endmacro; } $saved = $romaji; delete; call CallGeminiApi; if ($answer == "") { insert $saved; endmacro; } insert $answer; endmacro; } // 改行直後: 現在行が空(空白のみ含む)なら直上の行を変換 $curline = getlinetext(0); jsmode "WebView2"; js { let line = hidemaru.getVar("$curline"); hidemaru.setVar("$lineIsBlank", line.trim() === "" ? "1" : "0"); } if ($lineIsBlank == "1") { if (lineno <= 1) { message "変換対象の行がありません。"; endmacro; } ##prevLineMode = 1; up; } selectline; $romaji = getselectedtext(); if ($romaji == "") { message "変換対象が選択されていません。"; endmacro; } $saved = $romaji; delete; call CallGeminiApi; if ($answer == "") { insert $saved; if (##prevLineMode) { insertreturn; } endmacro; } insert $answer; if (##prevLineMode) { insertreturn; } endmacro; // ------------------------------------------------------------- // Gemini API 呼び出し($romaji → $answer) // ------------------------------------------------------------- CallGeminiApi: $answer = ""; #http = createobject("Msxml2.XMLHTTP"); if (#http == 0) { #http = createobject("Microsoft.XMLHTTP"); if (#http == 0) { message "XMLHTTPオブジェクトの生成に失敗しました。"; return; } } $url = "https://generativelanguage.googleapis.com/v1beta/models/" + $model + ":generateContent?key=" + $api_key; callmethod #http, "open", "POST", $url, false; callmethod #http, "setRequestHeader", "Content-Type", "application/json"; jsmode "WebView2"; js { try { let romaji = hidemaru.getVar("$romaji"); let obj = { system_instruction: { parts: [{ text: "あなたはローマ字を日本語に変換する専用ツールです。" + "入力されたローマ字を、音に忠実に自然な漢字かな交じり文に" + "変換してください。変換後のテキストのみ出力し、" + "説明・挨拶・補足は一切出力しないこと。" }] }, contents: [{ parts: [{ text: romaji.trim() }] }], generationConfig: { temperature: 0.1, maxOutputTokens: 1024 } }; hidemaru.setVar("$post", JSON.stringify(obj)); } catch (e) { message("JSON生成エラー:\n" + e.message); hidemaru.setVar("$post", ""); } } if ($post == "") { return; } callmethod #http, "send", $post; if (!getresultex(10)) { message "API送信に失敗しました。"; return; } $resp = getpropstr(#http, "responseText"); #code = getpropnum(#http, "status"); if (#code != 200) { message "APIエラー (code=" + str(#code) + ")\n" + $resp; return; } jsmode "WebView2"; js { try { let obj = JSON.parse(hidemaru.getVar("$resp")); let answer = obj.candidates[0].content.parts[0].text.trim(); hidemaru.setVar("$answer", answer); } catch (e) { message("JSON解析エラー:\n" + e.message); hidemaru.setVar("$answer", ""); } } return;

秀丸の外へ:Web版の誕生

ここまで来たら次は何をしたくなるか。言うまでもありません。秀丸エディタがなくても使えるようにしたいのであります。

そこでAIエディタにPHPコードを書いてもらって、Webサーバーで動かしてみた。するとこれがあっさり動いてしまった(実はバグ潰しに10回ぐらいは書き直してもらった)。URLを知っていれば、秀丸エディタがインストールされていない環境からでもブラウザひとつでローマ字→日本語変換ができるようになったのであります。秀丸マクロという城壁の中に閉じ込められていた魔法が、ついにインターネットの大海原に漕ぎ出したという次第です(危ないから一般公開しないよ)。

v1.0
範囲選択
+ ショートカット
v2.0
改行
+ ショートカット
v3.0
Web版
ブラウザで動作
v4.0???
常駐プログラム
ホットキー一発

次なる野望:日本語入力の歴史を変える(ホントかな?)

さて、もう次の目標は見えているのであります。

Windowsに常駐プログラムを作って、
どんな入力欄でもホットキー一発で呼び出し、
ローマ字ダダ打ちした文字列を
日本語の漢字仮名交じり文に変換する。

夢の日本語入力

これができれば、Google日本語入力もATOKもさようなら。
日本語入力の歴史が変わる。

……と大見得を切ってみたものの、本当にそんなことが出来るのかどうか。まあ、出来るか出来ないかは別として、思いついたら試さずにはいられないという、この性分だけは30年間まったく変わっていないのでした。結局のところ、人間を動かすのは「便利にしたい」という怠惰と、「面白そうだ」という好奇心の二本立てであるという話です。


昨日完成したはずのものが、
今日にはもう古くなっている。
技術とは、そういうものなのかもしれません。

さあ、次の一手間を省きに行こう。

……ホントかな?

AIが、過去に例を見ないものだから魚拓を取っておけと言うので、魚拓を取っておきました。

https://megalodon.jp/2026-0530-2110-33/https://aki-asahi.blogspot.com:443/2026/05/ai3.html