「大分駅」を呼び名に登録させない理由
入力を断るエラー文を書くのは、あまり好きな仕事ではない。 「必須です」「形式が違います」の類は、書いている側も読む側もうんざりする。 それでも、断る理由をそのまま文にできるエラーだけは、書いていて少し楽しい。 今日のはそのひとつで、呼び名の登録フォームに「大分駅」と打つと赤い字で止まる。
同じ名前が二つの表にあると、どちらが勝つかで行き先が変わる
駅は、もともと駅のマスタが解決している。 「大分駅」「おおいたえき」「Oita Station」のように末尾の駅相当語を外して駅名を引き、 営業地域の中で1駅に決まればそこ、同じ名前の駅が離れて複数あれば都道府県や市を伺い、 営業地域の外にしか無ければ対応エリア外の可能性として返す。 同名の駅が800m以内に並んでいれば同じ駅としてまとめる。この辺りは駅の表の仕事だ。
一方で、9月に作った呼び名の表は、AIが場所を解決するとき駅より先に引かれる。 「末広」のように住所にも駅名にも現れない言い方を最優先の手がかりにしたかったからで、その順番自体は正しいと思っている。 ただ、そこに「大分駅」という呼び名を置けてしまうと、駅の表に行く前に呼び名の代表点で確定してしまう。 都道府県を伺う分岐も、営業地域外の判定も通らない。 店の人が親切のつもりで登録した1行が、駅の扱いを丸ごと上書きする格好になる。
緩むのは、キャストのNGエリアの判定だった
もうひとつ、こちらのほうが実害が大きい。 このデリヘル管理システムでは、ホテルが決まる前の目的地を「大分駅 周辺(ホテル未定)」「末広 周辺(ホテル未定)」という同じ形のラベルで持つ。 駅周辺と呼び名の見分けはラベルの文字ではなく、呼び名の表に載っているかどうかで付けている。
駅周辺は町域が1つに決まらないので、キャストのNGエリアは安全側に倒してある。 その駅のある営業地域にNG町域を1つでも持つキャストは候補から外し、対応エリアを限定しているキャストも外す。 ホテルが決まった時点でホテルの住所で判定し直すから、決まる前は広めに外しておいて困らない。 ところが「大分駅」が呼び名として登録されていると、同じラベルが呼び名側の判定に流れる。 呼び名の判定は代表の住所の町域1か所で見るので、駅の東側の町域をNGにしているキャストが、代表点が西側というだけで候補に残る。 駅周辺のために用意した安全側の判定が、1行の登録で町域1つぶんに縮む。
だから入口で止めることにした。名前の末尾が「駅」なら保存せず、 「駅は『◯◯駅』とお伝えいただければ自動で場所が決まります」と理由を返す。 登録しようとした人が悪いわけではなく、登録しなくても済むことを伝えるのがエラー文の役目だと思った。 正規表現は末尾の一文字を見るだけで、たいした実装ではない。 たいした実装ではないものほど、無いと後で困る。