Shopifyストアをネイティブアプリ化サービスでスマホアプリにラップし、アプリ側の会員とShopifyの顧客アカウントを連携させる構成は珍しくありません。この構成でほぼ必ず火種になるのが、未ログインのお客様が購入に進もうとしてログインした「そのあとにどこへ戻すか」です。当社もこの遷移先をめぐる不具合対応を経験しました。この記事は、ネイティブアプリとShopifyの会員連携を設計・保守する技術者に向けて、なぜログイン後の遷移先がこじれるのか、そしてどこで妥協点を作るのかを整理します。
何が起きるか ― 購入導線がログイン後に横取りされる
典型的な事象はこうです。未ログインのままカートから購入ボタンを押すとログイン画面に進み、本来ならそのままチェックアウトに戻ってほしい。ところが実際には、アプリ側で設定された「ログイン後の遷移先」(多くはアプリのネイティブ画面)に飛んでしまい、購入手続きが途切れる。アプリ提供側は「購入導線が阻害される挙動は許容できない」と当然の要求をしてきます。
背景には、会員連携の仕組みがあります。ログイン後にマイページへ遷移した時点で連携処理(SDKの発火とリダイレクト)が走り、はじめて「アプリ会員とShopify顧客が結びついた」状態になる設計だと、連携を成立させるためにマイページを経由させたい力学と、購入を進めるためにチェックアウトへ戻したい力学がぶつかります。チェックアウトへ直行させると、Shopifyにはログインできていても、アプリ側は未ログイン・顧客アカウントも未連携のまま、という食い違いが残ります。
「仕様を変えたのか、変わってしまったのか」を先に整理する
この種の障害で対応をこじらせるのは、技術そのものより認識のずれです。アプリ提供側は「リリース当時の動画では購入画面に遷移していた。ログイン保持の仕様変更は頼んでいない」と認識し、開発側は「途中のバージョンで内部処理を同期から非同期に変えており、その意味では挙動の前提は変わっている」と認識している。事象だけが先行して、「仕様変更をしたのか、させられたのか」の位置づけが未整理のまま議論が進むと、対応がまとまりません。
ここで重要なのは、内部実装の変更が意図せず既存の見え方を壊すことがある、という事実です。ログイン保持のルール自体は変えていなくても、同期処理を非同期に切り替える過程で、以前は維持できていた遷移が維持できなくなる、ということは起こります。だから障害対応の初動では、まず「この挙動変化の直接原因が、その内部変更なのかどうか」を切り分けて共有することが、合意形成の前提になります。原因の切り分けと、責任の位置づけと、事象の解消は、混ぜずに順番に片づけます。
SNSログインには処理を挟めない、という制約
解決策を検討すると、いくつかの案が「技術的には可能でも、やるべきでない」という壁に当たります。チェックアウトへ直行させてShopifyログインだけ成立させる案は、会員連携が起きないため「Shopifyログイン=連携済み」という前提が崩れ、連携が必要な運用ではインシデントの温床になります。ログイン後にいったんマイページで連携を成立させてからチェックアウトへ戻す案は、連携自体は成立しますが、SNSログインには原則として処理を介入できないという制約が立ちはだかります。ログインの間に会員連携処理を無理に挟もうとすると、SNS経由の経路でインシデントを起こしやすくなる。「SNSログインのときだけ連携処理をしない」といった例外も、運用上の穴として許容されないことがあります。
こうした制約があるため、現実的な落としどころは「特定の状況では会員連携をあえて実施しない」という割り切りになりがちです。たとえばチェックアウトを起点にログインした場合には連携処理を走らせず、購入導線を優先する。連携は、お客様が改めてアプリからマイページへ遷移したときに成立させる。インシデントの発生点を減らすという観点では、チェックアウト時に連携しない方がリスクが低い、という判断です。
妥協するなら「その挙動を仕様として明記する」
割り切る場合に欠かせないのが、その挙動を仕様として文書に明記し、関係者に許容してもらう手続きです。「ログイン保持の仕様として、この状況ではこう動く」と書き切って合意する。曖昧なまま実装で吸収しようとすると、次の担当者や次の改修で同じ議論が再発します。あわせて、チェックアウト時に連携しない設計を採るなら、未連携のまま購入を完了したお客様をどう扱うか(後追いで連携させるのか、次回のマイページ遷移に任せるのか)、SNSログイン経路でチェックアウト起点かどうかの判定が効くのか、といった細部を詰めておきます。マニュアルや案内文の記載も、実挙動に合わせて誰がいつまでに直すかまで決めておくべきです。
合意できる部分から固めるのも有効です。たとえば「お客様は自分でログインボタンを押してログインする必要がある」「チェックアウト画面以外からマイページへ遷移した場合は連携が走る」といった点で認識が一致すれば、そこを土台に残りの例外を詰められます。
まとめ
ネイティブアプリとShopifyの会員連携は、ログイン後の遷移先という一点で必ず摩擦を生みます。会員連携をマイページ経由で成立させる設計と、購入をチェックアウトへ直行させたい要求がぶつかり、SNSログインには処理を挟めないという制約も重なるからです。当社では、まず「内部実装の変更が挙動を変えたのか」を切り分けて共有し、そのうえで「特定の状況では連携しない」という割り切りを仕様として明記して合意する、という順序で収束させています。同期を非同期に変えるような内部変更が、外から見える挙動を静かに壊し得ることを、設計と保守の両方で意識しておくことが肝心です。

