この記事について
ShopifyとPOSで住所の形式が異なるため、そのまま保存すると検索や表示に問題が生じます。特に日本の住所は都道府県の表記が英語・日本語で異なります。住所データの正規化について解説します。
なぜ正規化が必要なのか
ShopifyとPOSの住所形式の違い
問題: そのまま保存すると「Tokyo」と「東京都」が混在してしまう
正規化しないと起きる問題
正規化の方針
都道府県の変換
(全47都道府県を定義)
変換ルール:
- 完全一致で変換
- 大文字小文字は区別しない
- 見つからない場合は元の値を維持
変換処理の流れ
Shopify住所取得
Shopifyから顧客の住所情報を取得
都道府県変換
英語表記を日本語表記に変換
住所結合
都道府県、市区町村、番地を結合
POS保存
正規化した住所をPOSに保存
変換の詳細
住所全体の正規化
住所正規化の例
入力(Shopify形式)
Province: Tokyo, City: Shibuya, Address1: 1-2-3 Dogenzaka, Address2: ABC Building 5F
変換処理
Province: Tokyo → 東京都、City: そのまま、Address: 元の値を維持
出力(POS形式)
住所: 東京都 Shibuya 1-2-3 Dogenzaka ABC Building 5F
補足: 完璧な日本語化は困難なため、都道府県の変換を優先し、それ以外は入力値を維持
変換テーブルの例
実装上の考慮点
変換できない場合の対応
双方向の考慮
考慮点:
- 変換は可逆ではない(「渋谷区」→「Shibuya」の変換は複雑)
- 元データを別フィールドに保存(original_address メタフィールドなど)
- 基本的にはShopify → POS の一方向
データ品質の維持
バリデーションルール
ログと監視
監視アラート: 変換失敗率が閾値を超えたら通知
運用上の注意点
顧客による住所変更
住所変更時の対応
顧客が住所変更
ShopifyのマイページでS顧客が住所変更
変更イベントをキャッチ
Webhookで変更を検知
新しい住所を正規化
英語→日本語変換を適用
POSの住所を更新
正規化した住所をPOSに保存
考慮点:
- 変更のタイミング(リアルタイムか、バッチか)
- 競合の可能性(同時に店舗でも変更された場合)
- 履歴の保持(古い住所は配送履歴用に残す)
手動修正の許容
自動変換で不完全な住所の例: 「東京都 Shibuya 1-2-3」
運用ルール:
- 明らかな誤りは手動修正OK
- 修正したら記録を残す
- 同期設定で「手動修正値を保護」をON
この正規化がもたらす効果
データ品質
- 都道府県が統一された形式で保存
- 検索や集計が正確に動作
- 帳票出力の品質向上
運用効率
- 住所に関する問い合わせが減少
- 配送トラブルの予防
- 地域別分析が可能に