四百件の出荷データを、一括で別の形式に変換する。そういう処理を動かした朝だった。件数も多いし、手作業では追いつかない。だから自動でやる。動かして、出てきたファイルを開いて、血の気が引いた。
個数の欄が、そろっていない。ある行は正しく、ある行はゼロ。金額の合計も、明らかに合わない。ロジックは何度も見た。おかしいところはない。なのに、数が壊れていた。
見た目は同じ、中身が違う
原因は、数字そのものにあった。
元のデータに並んでいた数字は、全角だった。「4」や「12」。人の目には、半角の「4」や「12」と区別がつかない。同じ数に見える。けれど、コンピュータにとっては、まったくの別物だった。
「数」ではなく「文字」だった
全角の「4」は、数字の顔をした文字だ。
プログラムがそれを数として読もうとすると、うまく読めない。ゼロになったり、計算から抜け落ちたりする。並べ替えれば、想定と違う順に並ぶ。エラーで止まってくれればまだいい。多くの場合、止まらずに、静かに間違った結果を出す。
四百件の中に、全角と半角が混ざっていた。人が手で打った行、別のシステムから来た行。出どころが違えば、数字の種類も違っていた。
入口で、形をそろえる
直し方は、読み込む入口に一つ処理を足すことだった。
外から来た文字を、まず半角にそろえる。全角の数字を半角へ、ついでに全角の空白や記号も、扱いやすい形に直す。そのうえで、はじめて数として読む。この一段を入口に置いてから、四百件が正しく通るようになった。
人が打った文字は、揺れる
この件で、改めて思い知ったことがある。
人が入力した文字は、見た目が同じでも中身が揺れる。全角と半角、余分な空白、似て非なる記号。打った本人に悪気はない。ただ、入力という行為には、必ず揺れがついてくる。
だから、外から来た文字はそのまま信じない。数として使う前に、いちど自分の形にそろえる。境目で整えておけば、その先の処理は、きれいな数字だけを相手にできる。
「見えないほうが怖い」を、覚えておく
全角数字のこわいところは、目で見て気づけないことだ。
エラーは出ない。画面上は、正しい数字がちゃんと並んでいるように見える。なのに、裏では計算が狂っている。「動いているのに、間違っている」。この種のバグは、探そうとしても目に映らない。
だから今は、数字を受け取る場所を作るたび、一度手を止める。この数字は、どこから来たのか。人が打ったのか、機械が吐いたのか。出どころを思い出すことが、揺れに備える第一歩になっている。