既存のFirestoreを東京リージョンに移行したときの知見(iOS編)

こんにちは!アルiOSアプリを開発している koogawa です。

さて皆さま、先日 Cloud Firestore からベータが外れ、利用できるリージョンが増えたのを覚えているでしょうか?

新規に追加されたリージョンの中にはなんと Asia、つまり東京リージョンも含まれていたことで話題になりましたね。

アルも DB に Firestore を採用しており、今まではデフォルトの us-central リージョンを利用していました。そして、本日リリースした Ver. 1.9.1 からは asia-northeast1(東京リージョン)に移行しました!🎉

その結果、データの取得にかかる時間が大幅に改善されました。 

以下、この記事では、既存のFirestoreプロジェクトを東京リージョンに移行する上で私達が得た知見などをまとめていきたいと思います。

前提

- Firestoreのリージョンは 「Firebaseプロジェクト」の作成時のみ変更できます
- よって、Firestoreのリージョンを変更するためには Firebaseプロジェクトを作り直す必要があります
- 今回のケースも新規にFirebaseプロジェクトを作成し、データ移行を実施した上でプロジェクトを移行しました

1. FCMの登録トークンは変化する

アルはプッシュ通知に FCM(Firebase Cloud Messaging) を採用しています。
FCMの送信には登録トークンが必要になります。この登録トークンが変更されるタイミングとして、公式ドキュメントには次の記載があります。

登録トークンは次のような場合に変更されることがあります。
* アプリが新しい端末で復元された場合
* ユーザーがアプリをアンインストール / 再インストールする場合
* ユーザーがアプリのデータを消去する場合

では、Firebaseプロジェクトを移行した場合はどうなるのか?というと、やはり登録トークンは変化しました。

当然といえば当然なのですが、もし仮にアプリ側が上記の3ケースしか想定しない設計になっている場合は、最悪プロジェクト移行後にプッシュ通知が届かなくなるので注意が必要です。

アルの場合は、アプリ起動時に毎回 登録トークン を取得し、そのトークンをアプリケーション サーバーに登録しています。これにより、想定していないタイミングで登録トークンが変更になった場合にも対応できるようになっています。

2. Firebase Authentication からはログアウトされる

Firebase Authentication は Import/Export ができるので、ユーザー情報などを新しいプロジェクトにそのまま移行することができます。

ただし、ログイン状態までは引き継げないため、移行後はすべてのユーザーがログアウトされた状態になります。アカウントをTwitterなどのソーシャルアカウントに連携している場合は同じユーザーで再ログインが可能ですが、匿名(Anonymous)ログインしていた場合は、同じユーザーで再ログインができなくなってしまいます。

この対応策としては

* 匿名ユーザーにはソーシャルアカウント連携を勧める
* 匿名ユーザー用にデータ移行機能を用意する

などが必要になると思います。ちなみにアルではこの両方を実施しました。

参考:サーバ移行のメンテナンスとそれに伴うお願い

3. リリースのタイミングやアプリ審査期間にも注意する

プロジェクト移行で問題となるのは、旧プロジェクトと新プロジェクトが共存する期間がどうしても発生してしまうということです。

ユーザー投稿型アプリの場合、プロジェクト移行後も旧プロジェクトにユーザーが投稿できる状態のままだと、データの整合性を保つのが難しくなります。場合によっては強制アップデートの実施も考えると良いでしょう。

また、当たり前ではありますが、アプリ審査期間中もアプリが正常に動くようにしておきましょう。まだ移行先のプロジェクトを誰も使っていないからといって buggy な状態にしておくと、当然アプリはリジェクトされてしまいます。

まとめ

以上のように、割とやることは盛り沢山です。しかし、それらを踏まえた上でも やる価値は十分にある、と我々は判断しました。

もしこの記事が、東京リージョン移行に迷っている誰かの役に立てたら幸いです。

あわせて読みたい

この記事では主にiOSアプリにフォーカスを置きましたが、全体的なプロジェクト移行のポイントについては弊社 VP of Product の遠山による下記スライド資料をご覧ください。

Firestore東京リージョン利用に伴う Firebaseプロジェクト移行手順

この記事が気に入ったらサポートをしてみませんか?