住所データの正規化

ShopifyとPOSで異なる住所形式を統一し、データ品質を維持する方法

住所正規化都道府県変換データ品質
読了時間: 9分

この記事について

ShopifyとPOSで住所の形式が異なるため、そのまま保存すると検索や表示に問題が生じます。特に日本の住所は都道府県の表記が英語・日本語で異なります。住所データの正規化について解説します。

なぜ正規化が必要なのか

ShopifyとPOSの住所形式の違い

Shopify(国際形式)Japan
POS(日本形式)-
都道府県
Shopify(国際形式)Tokyo(英語表記)
POS(日本形式)東京都(日本語表記)
市区町村
Shopify(国際形式)Shibuya
POS(日本形式)渋谷区
住所
Shopify(国際形式)1-2-3 Dogenzaka
POS(日本形式)道玄坂1-2-3
郵便番号
Shopify(国際形式)150-0001
POS(日本形式)150-0001

問題: そのまま保存すると「Tokyo」と「東京都」が混在してしまう

正規化しないと起きる問題

検索の不一致
具体例「東京都」で検索しても「Tokyo」がヒットしない
影響顧客検索に支障
帳票の不統一
具体例DM宛先が英語と日本語で混在
影響ブランドイメージ低下
分析の困難
具体例地域別集計で同じ地域が別カウント
影響経営判断に支障
配送ミス
具体例住所形式の不整合で配送トラブル
影響顧客満足度低下

正規化の方針

都道府県の変換

Tokyo
日本語東京都
Osaka
日本語大阪府
Hokkaido
日本語北海道
Kyoto
日本語京都府
Aichi
日本語愛知県
Kanagawa
日本語神奈川県
Saitama
日本語埼玉県
Chiba
日本語千葉県
Hyogo
日本語兵庫県
Fukuoka
日本語福岡県

(全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

補足: 完璧な日本語化は困難なため、都道府県の変換を優先し、それ以外は入力値を維持

変換テーブルの例

Tokyo
日本語東京都
備考
Osaka
日本語大阪府
備考
Kyoto
日本語京都府
備考
Hokkaido
日本語北海道
備考
Aichi
日本語愛知県
備考
Fukuoka
日本語福岡県
備考
Okinawa
日本語沖縄県
備考

実装上の考慮点

変換できない場合の対応

Provinceが空
入力例Province = ""
対応そのまま空で保存
理由必須でないフィールドの場合がある
変換テーブルにない
入力例Province = "Toky"(タイポ)
対応元の値をそのまま保存
理由下手に変換するより元データを維持
日本以外の住所
入力例Country = "United States"
対応変換せずそのまま保存
理由日本の住所形式に変換する必要がない

双方向の考慮

Shopify → POS
変換内容英語 → 日本語 に変換
POS → Shopify
変換内容日本語 → 英語 に変換(必要な場合)

考慮点:

  • 変換は可逆ではない(「渋谷区」→「Shibuya」の変換は複雑)
  • 元データを別フィールドに保存(original_address メタフィールドなど)
  • 基本的にはShopify → POS の一方向

データ品質の維持

バリデーションルール

郵便番号
ルール7桁の数字(ハイフンは除去)
エラー時の対応警告ログ、値は保存
都道府県
ルール変換テーブルに存在
エラー時の対応変換失敗なら元の値を保存
住所全体
ルール空でないこと
エラー時の対応空なら警告ログ

ログと監視

type
正常ケースaddress_normalization
変換失敗ケースaddress_normalization
status
正常ケースsuccess
変換失敗ケースpartial_failure
input.province
正常ケースTokyo
変換失敗ケースToky
output.prefecture
正常ケース東京都
変換失敗ケースToky
warning
正常ケース-
変換失敗ケースProvince not found in conversion table

監視アラート: 変換失敗率が閾値を超えたら通知

運用上の注意点

顧客による住所変更

住所変更時の対応
顧客が住所変更

ShopifyのマイページでS顧客が住所変更

変更イベントをキャッチ

Webhookで変更を検知

新しい住所を正規化

英語→日本語変換を適用

POSの住所を更新

正規化した住所をPOSに保存

考慮点:

  • 変更のタイミング(リアルタイムか、バッチか)
  • 競合の可能性(同時に店舗でも変更された場合)
  • 履歴の保持(古い住所は配送履歴用に残す)

手動修正の許容

自動変換で不完全な住所の例: 「東京都 Shibuya 1-2-3」

POS管理画面で手動修正
詳細管理者が正しい住所に修正
修正後は手動値を優先
詳細自動同期より手動修正を優先
上書き防止
詳細次回同期で上書きしない設定も検討

運用ルール:

  • 明らかな誤りは手動修正OK
  • 修正したら記録を残す
  • 同期設定で「手動修正値を保護」をON

この正規化がもたらす効果

データ品質

  • 都道府県が統一された形式で保存
  • 検索や集計が正確に動作
  • 帳票出力の品質向上

運用効率

  • 住所に関する問い合わせが減少
  • 配送トラブルの予防
  • 地域別分析が可能に

関連記事