お問い合わせ
お問い合わせ 03-5835-2820(平日 9:00〜18:00)
BLOG

実在するのに「不正な入力」と言われる人たち──日本語フォームはなぜ壊れるのか

目次
  1. 「あなたの名前は長すぎます」
  2. 実在するのに、弾かれる人たち
  3. フォームは、何のために入力をチェックするのか
  4. なぜ、開発会社が「フォームの大全」を作ったのか
  5. 機械が直せるものは、機械が直せ

「𠮷野家」と名前を入力したら、フォームに「4文字です。3文字以内で入力してください」と叱られた。……3文字なんですが。この記事は、実在するのにフォームで弾かれる名前・メール・住所・文字の話と、なぜそんなことが起きるのか、そしてシステム開発会社であるアクシアが、日本語フォームの落とし穴を一次資料つきで網羅した「日本語フォームバリデーション大全」を、何のために作ったのかについてです。

「あなたの名前は長すぎます」

もう一度、さっきの話をさせてほしい。「𠮷野家」と入力したら、赤い字で「4文字です。3文字以内で入力してください」と怒られた。指を折って数えても、どう数えても3文字だ。𠮷、野、家。だがフォームは譲らない。何度入れ直しても、同じ赤い字が返ってくる。まるで「お前の名前は長すぎる」と説教されているようで、だんだんこちらが悪いことをしている気分になってくる。

言うまでもなく、悪いのは𠮷野家さんではない。「𠮷」という字を数えられないフォームのほうだ。種を明かすと、この「𠮷」はコンピュータの中で2文字分の席を使う特殊な文字で、プログラムが何も考えずに数えると「𠮷野家」は4文字と判定される(仕組みは大全のこの項でちゃんと説明した)。人間には「3文字」にしか見えないものが、機械には「4文字」に見えている。ただそれだけのことで、実在の名前が門前払いされる。

やっかいなのは、こういう「実在するのに、フォームに存在を否定される人」が、驚くほど大勢いるということだ。

実在するのに、弾かれる人たち

髙橋さんは、名前を入れると「使用できない文字が含まれています」と言われる。戸籍にちゃんと載っている「髙」という字が、フォームには「使えない文字」扱いされるからだ。﨑さん、濵さん、彅さんも同じ目に遭う。本人にはどうしようもない。生まれたときからその字なのだから。

外国人の名前も通らないことが多い。ミドルネームや、名前のあいだの「・」(中黒)、スペースが、「不正な文字」として弾かれる。「日本語しか想定していない欄」に、日本で暮らす外国籍の人が締め出される。

メールアドレスもそうだ。長年ドコモのメールを使ってきた人が、ある日突然「メールアドレスの形式が正しくありません」と、フォームに面と向かって嘘をつかれる。かつてのドコモでは、いまの規格が許さない形式――ドットが連続していたり、@の直前にドットがあったり――のアドレスが取得できた。そのアドレスは今も実際に使われている。ドコモ自身が「RFCに違反するメールアドレスをご利用のお客様へ」という案内を出しているほど、公式に知られた歴史だ。規格の上では「間違ったアドレス」でも、そこにメールはちゃんと届く。届くのに、フォームは受け取りを拒否する。

住所も負けていない。京都市の中心部では「寺町通御池上る」のように、通りとの位置関係で場所を示す表記が正式に使われる。当然、住所は長くなる。「番地欄は20文字もあれば十分だろう」という感覚で文字数を制限すると、京都の正式な住所は入りきらない。省けば、それはもう正しい住所ではない。

そして、目に見えない伏兵もいる。スマホやMacからコピペした文字列に、見えないスペース(ゼロ幅スペース)がこっそり紛れ込む。画面上は普通の「アクシア」に見えるのに、機械には別物に見えて、「不正な入力」と判定される。書いた本人には、何がいけなかったのか永遠にわからない。

全員、実在する。全員、悪意はない。そして全員、自分ではどうにもできない。

フォームは、何のために入力をチェックするのか

なぜ、こんなことが起きるのか。フォームを作る側が、どこかで入力チェックの目的を取り違えているからだ。

入力チェックは、気に入らない客を追い返すための関門ではない。正しいデータを受け取るための仕組みだ。ユーザーが「𠮷」と打ってきたのなら、正しいのはユーザーのほうで、数え方を知らないプログラムが間違っている。全角で「090」と入れてきたなら、それは「エラー」ではなく「半角に直せばいいだけの、正しい電話番号」だ。人間はふつう、自分の名前や住所を正確に知っている。フォームより、入力する本人のほうが正しいことのほうが多い。

だから、私たちが行き着いた結論は、ほとんど一つの原則に集約される。

機械が直せるものは、機械が直せ。人間の実在を「不正な入力」と呼ぶな。

全角を半角に直す。前後の空白を取り除く。ドット連続のアドレスも受け取って、あとは確認メールが届くかどうかで判断する。どれも、プログラムなら一瞬でできることばかりだ。それを人間に「あなたの入力が間違っています」と押しつけて、実在する顧客を入口で追い返している。技術的にできないのではない。やっていないだけだ。

なぜ、開発会社が「フォームの大全」を作ったのか

ここまで読んで、「あるある」と笑ってくれた人も多いと思う。だが私たちにとって、これは笑い話では終わらない。

フォームは、多くの事業にとって「お客さんと最初に出会う場所」だ。問い合わせも、申し込みも、会員登録も、入口はたいていフォームである。その入口で実在の人間を「不正」と呼んで追い返しているとしたら、それは機能の不具合である前に、作り手の姿勢の問題だと私たちは考えている。目の前の相手より、自分たちの都合のいいデータ形式を優先している、ということだからだ。

そういう思いから、アクシアは日本語フォームバリデーション大全というページを作った。日本語のフォームで起きる落とし穴――名前、メール、電話番号、住所、文字コード、そして設計の作法まで――を、その場で壊れる様子を試せる体験デモつきで、一つずつ並べたリファレンスだ。「なぜ起きるのか」には、ドコモの公式案内やUnicodeの仕様といった一次資料へのリンクを添えた。「正しい実装」には、コピペして使えるコードを載せた。「珍しいバグ集」ではなく、「実在する人を弾かないための実装の教科書」を目指している。

正直に白状すると、この大全を作りながら自社のフォームも点検したら、直すべき箇所がいくつも見つかった。「全角で入れたメールを弾いていた」「エラーのときに、どの欄がダメなのか言っていなかった」――偉そうに書いている当の自分たちが、できていなかった。だからこそ、これは他人事の指摘ではなく、自分たちも使う実務のチェックリストとして育てていくつもりだ。

機械が直せるものは、機械が直せ

「入力が不正です」――この一言で片づけられてきたものの多くは、実は入力した人ではなく、受け取る側のフォームの都合だった。𠮷野家さんの名前も、髙橋さんの漢字も、ドコモの古いメールも、京都の長い住所も、すべて「実在するのに弾かれてきた正しいもの」だ。

そのすべてを、逃げずに、試せる形で並べたのが大全だ。フォームを作る人にも、いま自分のフォームに弾かれて困っている人にも、届けばうれしい。

日本語フォームバリデーション大全を見る(壊れる様子をその場で試せます。コピペで使えるテストデータつき)

そのWebサイト、つくり直しませんか?

速く・安全で・運用しやすいサイトへ。WordPressからの移行もお任せください。

サイトの相談をするサイトリニューアルについて詳しく見る

ブログ一覧へ戻る

そのWebサイト、つくり直しませんか?

速く・安全で・運用しやすいサイトへ。WordPressからの移行もお任せください。