クックパッドマートアプリにおけるログイン体験の実現

こんにちは。買物プロダクト開発部の大川(@aomathwift)です。クックパッドマートのiOSアプリ(以下マートアプリ)の開発に携わっています。

マートアプリ

この記事は、「クックパッドマートを支えるアカウントたち」連載2本目の記事で、マートアプリでの認証にフォーカスを当てたものです。 シリーズの全貌については以下の記事を御覧ください。

クックパッドマートを支えるアカウントたち - クックパッド開発者ブログ

本稿では、2022年4月に完全導入されたマートアプリでのログイン体験の実現について紹介します。

クックパッドマートにおけるユーザー登録

多くのECサービスでは、最初にユーザー登録をして決済情報や配送先情報等を登録した上で利用開始するものが多いと思います。 しかし、マートアプリでは利用開始時にユーザー登録のフローはありません。アプリインストール後に気軽に買い物を始めてもらうため、クレジットカード情報と商品を配送するマートステーションという名の冷蔵庫の場所(以下受け取り場所)、受け取り名*1のみを入力するだけで商品を購入できる体験設計をしていました。

「ユーザー登録無し」の課題

しかし、この「ユーザー登録無し」という方針には課題があります。 まず、機種変更の際のデータ引き継ぎができないという点です。マートアプリでは、明示的なユーザー登録を行わないため、購入履歴や注文状況といったユーザーデータは端末に紐付いて保存されます。そのため、アプリがインストールされている端末が変わった場合、必然的にデータを参照できなくなり、強制的に新規ユーザーとしてやり直すことになります。すなわち、機種変更の際のデータ引き継ぎができません。

また、明示的なユーザー登録をしない場合、電話番号やメールアドレスといったユーザーの連絡先情報を取得できず、ユーザーへのコミュニケーション手段としてメールやSMSを選択できません。プッシュ通知は利用できますが、これはユーザー側でオフにすることができるため、連絡手段として堅牢なものとは言えないでしょう。

これらの課題が、ユーザー数の増加・アプリの機能拡大とともに顕在化してきました。そのため、「ユーザー登録無し」という方針を見直し、マートアプリにログイン機能を導入することにしました。

ログイン時のユーザーデータの統合

さて、ログインを導入してアプリを利用してもらう際に課題となるのが、登録無しの状態で利用していた際のデータを登録後のユーザー(以下登録ユーザー)に持ち越せるのか、という点です。これに関しては、ユーザー登録無しの状態で作成された購入履歴やお気に入り商品といったユーザーデータを、新規に作成した登録ユーザーに統合する、ということを実現しています。詳しくは「クックパッドマートにおけるアカウントの統合」という記事で詳しく解説されていますので、そちらをご覧ください。

マートアプリにおけるログインの見せ方

データ統合の際に生じるマートアプリ特有の課題

前節で述べたユーザーデータの統合は非同期に実行され、一定の実行時間(数十秒から数分)がかかります。レシピアプリでは、登録ユーザーとして新しくログイン後、ユーザーデータの統合を待たずしてアプリ内コンテンツが表示されることに大きな違和感はありません。生じるタイムラグの間も、アプリのコアであるレシピの閲覧機能を利用することができるからです。

ところが、これがマートアプリではそうはいきません。 マートアプリでは、アプリを初めて起動したタイミングで受け取り場所の設定を行います。受け取り場所が設定されていることで、どの商品をどの配送に乗せるかが確定し、選択された日付にその商品を受け取ることができるかどうかが決まるようになっています。 そのため、登録ユーザーでログイン後、ユーザーデータの統合が未完了の状態でアプリを起動すると、ユーザー目線では設定済みの受け取り場所が突然未設定の状態に戻ったように見えてしまいます。その結果、ユーザーがログイン前に設定していた受け取り場所が突然消えたように見えてしまう上、受け取り場所未設定の状態ではアプリの主要な機能をほとんど利用することができません。これは、アプリの体験として非常に悪いものです。 したがって、マートアプリ上でこの課題を解決する見せ方をする必要がありました。

画面遷移での工夫

上記課題の解決策として、画面遷移での工夫を施しました。 具体的には、マートアプリのログインフローを、以下の図のように構成しています。

画面遷移

ポイントは、ユーザーデータの統合完了までの間、ユーザーのアプリ上での行動をブロックするためのポーリング画面を設置した点です。この画面で、裏で何が起きているのかをユーザーに端的に伝えつつ、完了までの時間アプリ内の購入・商品検索といった行動をできないようにしました。

ポーリング画面

数十秒から数分の時間、ユーザーの行動をブロックするという決断をするまでに、

  • 一時的に仮の受け取り場所が設定されている状態にする
  • エラー画面を出すのをやめて商品検索だけをできるようにする

といった案も出ましたが、受け取り場所を選択してそこに届くものを買い物するというサービスのコアとなる体験を損ねるよりも、主要機能が使えるようになるまでユーザーに待ってもらった方が良いという判断から、ユーザーデータの統合をポーリング画面で待ち合わせるという手段をとりました。

この実装をするにあたり、エラーケースとして以下のような場合を考慮する必要があります。

  • ユーザーデータの統合中にアプリがバックグラウンドに移行した場合
  • データ統合そのものに失敗した場合

たとえば前者の場合、フォアグラウンド状態に戻ったときにユーザーデータの統合処理が継続中なのか、無事完了済みなのか等、どのようなステータスにあるかを適切に確認して、ユーザーにその現状が改めて伝わるようにしなければなりません。

このような場合をカバーするには、アプリ側での状態管理とエラーハンドリングが非常に難しくなります。実際にどうやってこれを実現したかという実装に関する話は後続の記事「クックパッドマートアプリのログインの裏側」にて詳細に記述されていますので、そちらも是非併せてご覧ください。

また、現在は、この非同期に行われるユーザーデータの統合の処理自体にも改善が入り、この待ち合わせ時間はほぼ一瞬でおわるように修正されています。いずれにしても統合の時間を待つという設計である点に変わりはないのですが、このような継続的なユーザー体験の改善が行われています。

おわりに

マートアプリにおけるログイン機能の実現について紹介しました。ECプラットフォームを運用するにあたって、やはりユーザー登録というのはあって然るべきで、これをアプリの機能が増えてきた途中の段階で入れるというのはなかなか難しいことだったと感じます。それでも、既存の体験を極力壊さず、今世の中のECサービスにおいて当たり前の機能の一つである「ログイン」を導入できたことで、試せる施策の幅を広げることにも繋がりました。

今後もクックパッドマートでは、今回紹介したようなユーザー基盤の整備をはじめ、機能追加や体験改善まで様々な開発を行っていきます。興味をお持ちの方は是非以下キャリアサイトから採用情報にアクセスしていただけると幸いです。

info.cookpad.com

アカウント連載の記事一覧

*1:受け取りの際に商品に印字される、受け取るユーザーを識別する名前