【AI活用】AIに作らせたbatファイルが動かない・文字化けする。犯人は文字コードと改行コードなんだよ

AI活用

おはよう、後輩A君。

AIに「Windowsで動くbatファイルを作って」と頼んで、できたファイルをダブルクリックしたら——日本語がぐちゃぐちゃの記号になったり、途中で謎の止まり方をしたり、そんな経験ないかな。

私はあるんだよ。しかもAIが書いたbatの中身は、どこからどう見ても正しいんだよね。コードは合ってるのに、動かない。今日はこの不思議な事件の犯人と、たった一言で防ぐ方法の話だよ。

1. コードは正しいのに動かない。犯人は「見えない2人組」なんだよ

結論から言うと、犯人はコードの中身じゃなくて、ファイルの保存形式に潜んでいるんだよ。それも2人組なんだよね。

  • 犯人①:文字コード——文字をコンピュータ上の数字に変換するときの「方式」だよ。AIは世界標準のUTF-8で書くけど、日本語版WindowsのbatはShift-JISという昔からの方式を前提にしているんだよ。方式が違うファイルを読むと、日本語が「縺ゅ→縺ァ」みたいな暗号になる。これが文字化けの正体だよ
  • 犯人②:改行コード——「行の終わり」を表す見えない記号だよ。AIはLFという1文字の記号で書くけど、WindowsのbatはCRLFという2文字の記号が前提なんだよ。これが違うと、ifの固まりやgoto(行き先ジャンプ)の解釈が壊れることがあるんだよね

どっちもメモ帳で開いただけでは気づけないんだよ。文字は普通に見えるのに、実行すると壊れる。だから「AIがバグを書いた」と誤解されやすいんだけど、AIのコード自体は正しいことが多いんだよ。

2. しかも「たまに動く」から、タチが悪いんだよ

この事件をややこしくしているのが、改行コード違いのbatは短いと普通に動いてしまうことがあることなんだよ。

技術的な話を思い切り省くと、cmd(batを動かす仕組みだよ)はファイルをある程度の塊ごとに読むんだけど、改行がLFだけだと、塊の境目をまたいだ瞬間にジャンプ先を見失うことがあるんだよね。つまりファイルが育って、ある長さを超えた日に突然壊れる

「この前まで動いてたのに!」——そう、それがこの犯人の手口なんだよ。昨日まで動いていたことは、保存形式が正しいことの証明にならないんだよね。

3. 「Macで作らせたから?Windowsなら大丈夫?」——惜しい、違うんだよ

私も最初、こう思ったんだよ。「MacのAIに作らせたからUTF-8になったんじゃないの?Windows上のAIなら最初からShift-JISで書くんじゃない?」って。いい仮説だよね。でも調べたら、違ったんだよ。

ファイルの保存形式を決めるのは、パソコンのOSじゃなくて、AIがファイルを書くときに使っている「ペン」(開発ツール)なんだよ。そして世界中の開発ツールの標準インクは、OSに関係なく「UTF-8+LF」なんだよね。AIはこの開発ツールの世界の住人だから、Windowsの上で動いていても、何も言わなければUTF-8+LFで書くんだよ。

実際、海外のAIツールでは「Windows上で使っているのに、LF改行のbatファイルが作られて壊れる」という報告がちゃんと上がっているんだよ。つまりこれはMacとWindowsの違いじゃなくて、1990年代生まれのbatファイルと、現代の開発標準との「時代のギャップ」なんだよ。batはShift-JISとCRLFの時代の生き物で、AIは現代の住人。間に立つ私たちが通訳してあげる必要があるんだよね。

4. 防ぎ方は、頼むときの「一言」だけなんだよ

通訳といっても、やることは簡単だよ。AIにbatファイルを頼むとき、こう一言添えるだけなんだよ。

batファイルは「Shift-JIS(CP932)」「改行コードCRLF」で保存して

これだけで、AIはちゃんとその形式で書いてくれるんだよ。AIは知らないんじゃなくて、指定されなかったから標準のインクで書いただけなんだよね。仕様を言葉にして渡せば、一発で伝わるんだよ。

もし既にUTF-8で作ってしまったファイルがあるなら、「このbatをShift-JISとCRLFに変換して」と頼めば直してくれるよ。自分で直すなら、メモ帳で開いて「名前を付けて保存」で文字コードにANSIを選ぶ方法もあるよ(改行はメモ帳が勝手にCRLFにはしてくれないから、AIに頼む方が確実だよ)。

5. 納品や配布の前の「確認の型」も作っておこうか

私はこの事件のあと、batファイルを人に渡す前のチェックをルール化したんだよ。

  • 作るとき:「Shift-JIS・CRLFで」を頼み文に入れる(そもそも事故らせない)
  • 渡す前:AIに「このファイルの文字コードと改行コードを確認して」と検査させる(数秒で終わるよ)
  • できれば:実際にWindowsで1回動かす(日本語表示とifの分岐まで通す)

Gmail掃除のルール化(→削除0件だった話)と同じで、一度ルールにしてしまえば、次からは何も考えなくても事故らないんだよね。

結論:AIへの注文には「時代の通訳」が要ることがあるんだよ

今日の話をまとめるよ。

AIは現代の標準(UTF-8・LF)で書く。batは昔の標準(Shift-JIS・CRLF)で動く。この時代のギャップは、頼むときの一言で埋まる。

先日、AIの「できません」はファイナルアンサーじゃないという話をしたけど(→その話はこちらだよ)、今日のは兄弟みたいな話で、AIの「できました」も、無条件のファイナルアンサーじゃないんだよ。コードが正しくても、保存形式で転ぶことがある。

でも怖がる話じゃないんだよ。原因は毎回同じ2人組で、対策は一言で済む。後輩A君も、AIに「Windowsで動くもの」を頼むときは、この一言を思い出してみようか。

よくある質問

Q1. batファイルの文字化けは、どう直せばいいの?

一番確実なのは、AIに「このファイルをShift-JIS(CP932)・改行CRLFに変換して」と頼むことだよ。手作業なら、メモ帳で開いて「名前を付けて保存」→文字コードで「ANSI」を選ぶと文字化けは直るよ。改行コードの変換まで考えると、AI(またはVS Codeなどのエディタ)に任せる方が安心だよ。

Q2. UTF-8のままでbatを動かす方法はないの?

あるにはあるんだよ。batの先頭で「chcp 65001」という命令を入れて、読み方をUTF-8に切り替える技だよ。ただ、配る相手の環境によって表示が崩れることがあるから、日本語版Windowsで人に配るものは、昔ながらのShift-JIS・CRLFに合わせておくのが一番トラブルが少ないんだよ。

Q3. そもそもbatじゃなくてPowerShellを使えばいいんじゃない?

新しく作るならPowerShell(.ps1)も良い選択肢だよ。ただ、会社のパソコンでは.ps1の実行が制限されていることも多くて、「ダブルクリックで誰でも動く」手軽さではbatがまだ現役なんだよね。配る相手に合わせて選ぼうか。

Q4. Macで作ってWindowsに渡すのは、やめた方がいい?

やめなくて大丈夫だよ。本文で話した通り、問題はOSじゃなくて保存形式だから、「Shift-JIS・CRLFで」と指定すればMacで作っても正しく動くものができるんだよ。心配なら、渡す前にWindowsで1回実行して確認しようか。

【本日のミッション:「渡す先の常識」を一言にしてみようか】

  • ☐ AIに何かファイルを作ってもらうとき、「誰が・どの環境で使うか」を頼み文に入れてみようか
  • ☐ 過去にAIに作ってもらったbatがあるなら、「文字コードと改行コードを確認して」と検査させてみようか
  • ☐ (後輩A君へ)「昨日まで動いていた」は正しさの証明にならないんだよ。渡す前の1回の実行確認が、信頼を守るんだよ

📚 AI活用シリーズ 一覧

コメント

タイトルとURLをコピーしました