この記事について
オンラインとオフラインで顧客を紐付けるために、Shopifyの顧客IDをPOSの会員番号として使用するアイデアを採用しました。この設計判断の背景と実装方法を解説します。
課題と解決策
直面した課題
| 課題 | 詳細 |
|---|---|
| 別々のID体系 | ShopifyとPOSはそれぞれ独自のIDを持っている |
| 紐付けの必要性 | 同一顧客を両システムで特定したい |
| 新規システム回避 | ID管理のための新システムを作りたくない |
| 運用負荷の軽減 | 手動でのID対応付けは非現実的 |
解決策: Shopify IDを会員番号に
顧客ID = gid://shopify/Customer/8840734670934
8840734670934(Shopify IDの数字部分)
会員番号(customerNo)= 8840734670934
Shopify ID → 数字抽出 → POS会員番号で検索 → 顧客特定
なぜこのアプローチを選んだのか
他の選択肢との比較
方式3を選んだ理由
- シンプルさ: 追加のシステムやデータベースが不要
- 信頼性: Shopifyが発行するIDは確実にユニーク
- 運用容易性: 対応表のメンテナンスが不要
- 障害耐性: 単純な仕組みなので障害点が少ない
Shopify顧客IDの構造
GraphQL形式のID
Shopifyの顧客IDは、GraphQL APIでは以下の形式で返されます。
| 構成要素 | 値 | 説明 |
|---|---|---|
| プレフィックス | gid:// | Global ID プレフィックス |
| プラットフォーム | shopify | プラットフォーム名 |
| リソース種別 | Customer | リソースの種類 |
| 数字ID | 8840734670934 | これを会員番号として使用 |
形式: gid://shopify/Customer/8840734670934
数字部分の抽出
gid://shopify/Customer/8840734670934
最後の "/" 以降を抽出
8840734670934(17桁程度の数字)
ポイント: この数字がPOSの会員番号になる
POSへの会員番号登録
登録タイミング
顧客がオンラインで会員登録を完了
Shopify Admin APIで顧客を作成、IDが発番される
GraphQL形式のIDから数字部分を抽出
抽出した数字を会員番号としてPOSに登録
POS側のデータ構造
| フィールド | 値 | 備考 |
|---|---|---|
| 会員番号 | 8840734670934 | Shopify顧客IDの数字部分 |
| 氏名 | 山田 太郎 | - |
| メールアドレス | yamada@example.com | - |
| ポイント残高 | 1250 | - |
| 会員ランク | ゴールド | - |
ポイント: 会員番号フィールドを「Shopify IDの格納場所」として活用。POSの標準機能を流用しているので追加開発は最小限
照合時の処理
ポイント取得時の流れ
セッションにShopify顧客IDが保存されている
Shopify ID: gid://shopify/Customer/8840734670934
8840734670934
会員番号 = 8840734670934 で検索
ポイント残高: 1250pt
画面にポイント表示
この設計の利点
開発面
| 利点 | 詳細 |
|---|---|
| 追加DB不要 | 対応表のためのデータベースを作らなくてよい |
| シンプルなロジック | 文字列からの数字抽出のみで照合可能 |
| 障害点が少ない | 仕組みがシンプルなので壊れにくい |
| 保守容易性 | 理解しやすく、引き継ぎも容易 |
運用面
| 利点 | 詳細 |
|---|---|
| 自動紐付け | 登録時に自動で紐付けが完了 |
| 手動作業不要 | ID対応付けの手作業が発生しない |
| 即時利用可能 | 登録完了時点で店舗でも利用可能 |
| データ整合性 | Shopifyがマスターなので一貫性が保たれる |
考慮事項
会員番号の桁数
| 確認項目 | 内容 |
|---|---|
| Shopify顧客ID | 最大18桁程度の数字 |
| POSの会員番号フィールド | 確認が必要 |
事前確認ポイント:
- POSの会員番号は何桁まで対応?
- 数字のみ?英数字も可?
- 先頭ゼロの扱いは?
- POS側のフィールド仕様を確認し、Shopify IDが収まることを確認する
既存POS会員の扱い
既存の会員番号: 00001(連番)
メールで照合 → 既存会員発見 → 会員番号をShopify IDに上書き
新会員番号: 8840734670934、ポイント残高: そのまま維持
補足: 古い会員番号は履歴として別フィールドに保存も検討
この仕組みがもたらす効果
システム設計として
- 追加の複雑性を導入せずに紐付けを実現
- Shopifyをマスターとした一貫性のあるデータ管理
- 将来の拡張(他システム連携)にも対応しやすい
ビジネスとして
- オムニチャネル体験の基盤が確立
- どのチャネルでも同一顧客として認識
- 顧客データの統合分析が可能に