🧊

vee-validateのalpha_numでハマった話

2022/05/15に公開

alpha_num とは一体

案件で脆弱性対応として npm ライブラリをアップデートするということがありました。
node のバージョンから始まり、Nuxt のバージョン、さまざまなアップデートを行ったのですが、その中の vee-validate の更新で alpha_num の挙動が変わってハマったので、備忘録がてら書いていきたいと思います。

alpha_num なのに、、、

発生したことは、 alpha_num という名前だとアルファベット(=ローマ字)と数字のみが許容されそうなのに、 日本語 が入力できてしまった、ということです、
alpha_num という単語だけをみますと、日本語は入らなそうなのに、入るんです。

alpha_num の修正があった

同僚の方が調査してくださったのですが、 alpha_num の実装に言語対応があるようでした。
vee-validate:alpha_helper
この実装の ja にあたる箇所の正規表現が今まで間違っていたようで、下記の issue 修正前と移行でバリデーションのされ方が変わったようです。
Japanese validations have errors

alpha_num について考える

一旦なぜ問題が発生したかはわかりました。ただわからないのは alpha_num という命名と実装との乖離を何と無く感じるということです。
ので、そもそも alpha という部分が何を意味するかを考えます。
おそらくこの alphaalphabet の略に当たると思うので、 alphabet を検索してみました。参考

a set of letters arranged in a fixed order, used for writing a language:

このような意味を持つようです。簡単にいうと、言語を書くために使用する固定順序の文字のセットというようなニュアンスのようです。
日本人的には alphabet = ローマ字 というイメージしかなかったですが、ちゃんと意味まで調べるとローマ字というキーワードは一切表れていません。
つまりどういう意味ことかというと、 alpha_numalpha は文字のセットを表しており、ローマ字でないので、我々が期待していたものとそもそも異なるのではないかということです。
そのため今回日本語が含まれていたのは挙動的にはただしそう、というのが私個人の意見です。

変更について考える

さて、 alpha_num の意味は一旦置いておいて、今後はこの変更について触れたいと思います。
こちらの alpha_num の修正ですが、タイミングとしては 3.4.10 で修正されています。 vee-validate のバージョン管理がどのようになっているかはちょっとわかりませんが、おそらくビルドバージョンかリビジョン(=つまり修正のバージョン)になりそうです。
今回の修正は日本人にとっては意味を誤解していると大きな修正になりますが、そうではない場合はただのバグフィックスではあります(正規表現の書き方を変えたまでなので)。
元々日本語のヘルパーも存在していて、そちらがうまく動作していなかったから修正した。それだけでしたが、正しく実装を理解していないと思わぬところでつまづかせられるのだなと思いました。
改めてライブラリを使用する時には正しい理解と正しい使い方が必要だなと感じました。

おわりに

vee-validate など様々なライブラリをしっかり中身を見ず、便利便利と言って使っていましたが、これからはちゃんと中身まで考えらるようにしたいなと思いました(全部は無理だけど)。
後々苦しめられるのは自分だし、知らないままのものを使うという怖さを正しく理解すべきだなと反省しました。

Discussion