Web サービスを海外向けに展開すると、住所フォームは想像以上に壊れやすい部分になります。米国向けに作った City / State / ZIP Code の組み合わせを、そのまま日本、香港、ドイツへ適用すると、入力できない住所や誤ったバリデーションが発生します。
この記事では、登録画面や Checkout の QA で使える住所テストデータの設計方法を整理します。例に含まれる氏名と住所は架空のテストデータです。
住所を一つの文字列だけで保存しない
表示用の住所だけを保存すると、配送 API、税計算、CRM、CSV エクスポートへ渡す段階で再解析が必要になります。少なくとも次のフィールドを分けて保持します。
{
"countryCode": "US",
"locale": "en-US",
"street": "123 Example Street",
"city": "Seattle",
"region": "Washington",
"regionCode": "WA",
"postalCode": "98101",
"phone": "+1 206 555 0142",
"fullAddress": "123 Example Street, Seattle, WA 98101, USA"
}
region は汎用的な内部名として使えます。画面では国に応じて State、Province、Prefecture、County、District など適切なラベルを表示します。
国ごとに確認したい違い
| 国・地域 | 主な違い | テスト観点 |
|---|---|---|
| 米国 | 2 文字の州コードと 5 桁の ZIP Code | City、State、ZIP の組み合わせを保存できるか |
| 日本 | 都道府県と市区町村の階層、123-4567 形式の郵便番号 |
日本語文字と住所順序を失わないか |
| 香港 | すべての住所で使う共通郵便番号がない | 郵便番号を空欄にして送信できるか |
| ドイツ | 郵便番号が市名より前、ß などの文字を使う |
Unicode と表示順序を維持できるか |
| インドネシア | Province と City/Regency を分ける | 5 桁郵便番号と +62 電話番号を扱えるか |
フロントエンドのバリデーションは国切り替え後に更新する
国を変更したのに、以前の国の正規表現や必須設定が残るバグはよくあります。次の順序でテストすると見つけやすくなります。
- 米国を選び、州と ZIP Code が必須になることを確認する。
- 香港へ変更し、郵便番号を空欄にできることを確認する。
- 日本へ変更し、日本語とハイフン付き郵便番号を入力する。
- ページを再読み込みし、保存した国とフィールド値が復元されることを確認する。
- API、CSV、管理画面にも同じ値が残っていることを確認する。
入力制限は必要ですが、国ごとのルールを一つの巨大な正規表現へ詰め込むと保守が難しくなります。国コードごとの設定として、ラベル、必須条件、郵便番号パターン、電話番号のヒントを分離した方が安全です。
空の郵便番号は欠損データとは限らない
香港のようなケースでは、空の postalCode が正しいテスト結果になることがあります。データベースで NOT NULL を設定している場合でも、空文字を許可するか、国別ルールに従って項目自体を省略できる設計を検討します。
function requiresPostalCode(countryCode) {
return countryCode !== "HK";
}
このルールは配送会社や連携先によって変わるため、実運用では接続先の仕様も確認してください。
テストデータに現地言語を含める
ASCII 文字だけのテストでは、文字コード、CSV、PDF、メールテンプレートの問題を見逃します。日本語、繁体字、ドイツ語の特殊文字などを少数でも含めると、保存から表示までの経路を確認できます。
また、住所テストデータには実在する個人情報を使わず、用途を QA と開発に限定します。本人確認や郵便物の受け取りには使用しません。
テストデータを増やす場合
US Address Online のワークスペースでは、50 か国の構造化されたテスト用住所を生成できます。米国のフィールド構成は英語の US address generator ガイドでも確認できます。
自動テストへ組み込む場合は、生成結果を固定 fixture として保存し、国別バリデーションの境界値だけを別ケースとして追加すると、テストが不安定になりません。
まとめ
多国籍住所フォームでは、国コードを最初に決め、その国に合わせてフィールド名と必須条件を切り替えます。構造化された値と表示用住所を両方保存し、現地言語、郵便番号なしのケース、国際電話番号をテスト対象に含めると、多くの不具合をリリース前に発見できます。