Firebaseのプロジェクト移行完了しました😄🎉

f:id:mizonit:20210208232146p:plain

こんにちは。ソフトウェアエンジニアの @hoshitocat です。

  今回は、前回に引き続きFirebaseのプロジェクトを移行するという話です。

そして、先日ついに移行が完了しました。

実際何からやっていって、これからどうしていくのか?など書いていこうと思います。



弊社のFirebaseを使い始めたきっかけ

もともとはRemote Configを利用したくて使いはじめました。 また、Crashlyticsはもともと Firebase のサービスでしたが、Googleが買収してFirebaseの一部となりました。

そして、僕が入社したときには以下のサービスを利用していました。

  • Remote Config
  • Cloud Messaging
  • Crashlytics

なぜFirebaseのプロジェクトを移行したの?

すでに使っているプロジェクトのリージョンが us-central だったため、

Firestoreのリージョンが us-central だと今後アプリのメインDBにしたときに、 距離がアプリの速度に影響すると考えたからです。

ちなみにプロジェクト自体は僕が入社する前からあったので、理由を聞いたところ、

弊社が最初にFirebaseを使い始めたときには東京リージョンの設定はなかったそうです。

これまで利用範囲だったらまだ良かったのですが、 これからはFirestoreも使っていきたいと思ったことがきっかけでした。

英単語アプリmikanのユーザのほとんどが日本在住の方なので、 Firestoreを使ってこれまで以上に速度の問題が気になりそうということで、 東京に移行することにしました。

実際に速度を計測してみたのですが、以下のような結果となりました。

Goのベンチマークを使って計測しました。1回のオペレーションあたりの時間です。試行回数は1,000,000,000回、単位はnsです。

リージョン 1つのDocument取得 複数のDocument取得 サブコレクション内の複数Document取得
us-central 0.143 0.183 0.152
asia-northeast1 0.0668 0.107 0.0242

なぜFirestoreを使うことにしたの?

弊社では、iOSAndroidのプラットフォームでアプリが使えるのですが、 特徴としてどちらもオフラインで利用できるというところです。

英単語の学習を手軽に、スマートフォンさえあればできるはずなのに、 地下鉄などで電波が無いときに学習できなくなったら、 せっかくの学習の機会に水をさしてしまうことになりますからね 😎

オフラインに対応させるため、ユーザの端末内にデータベースをもっています。 iOSSQLiteを、AndroidではRealm Databaseを、それぞれ使っています。

https://realm.io/jp/realm.io

しかし、このような構成だと、OS間でのデータの引き継ぎが困難であるという問題がありました。

これらの問題を解決するために、Firestoreの使うことにしました! Firestoreを選択した理由としては、

  • オフライン対応している
  • すでにFirebaseを両OSで導入している
  • 割と他の会社でも実装事例がある
  • SDKが充実している

などがあります。

やったこと

  • 認証情報を新しいものに変更する
  • Fabricではなく、FirebaseCrashlyticsへ設定変更する (これは、移行前のプロジェクトがFabricの頃から使っていたCrashlyticsのままだったから発生したもので、マイグレーションを行っている場合不要)
  • Firestoreに入っているデータをAdminSDKを使って移行

の3点を実施しました。

Cloud MessagingとCrashlyticsのデータの移行は実施しませんでした。

過去のクラッシュレポートなどは、引き続き古い方を参照すれば観られますし、Cloud Messagingも同様です。

Firestoreに入っているデータの移行

英単語アプリmikanでは一部のデータのみFirestoreを参照しているものがありました。(教材データや単語データなど) 移行後も参照したいのでそれを移行する必要がありました。

これはユーザ固有のデータではないため、手元の雑スクリプトで移行しました。 移行には、FirebaseAdminSDKを使ったRubyスクリプトを書きました。

これからどうしていくか

Firestoreを使う目的は、OS間でデータの同期を可能にし、ユーザが複数のプラットフォームや機種でアプリを利用できるようにしようというものでした。

そのため、ロジックの書き換えなど、これからFirestoreを使って実装していきます。

まとめ

FirebaseをUSリージョン( nam5 (us-central) )で作られていたものを東京リージョン( asia-northeast1 )へ移行しました。

現在は、SQLiteとRealmからデータを移行するべく、奮闘中です。 次回は、その辺のことが書けると良いなと思っております。

最後に

弊社では、一緒に働く仲間を募集中です!

教育事業へ興味のある方、技術的にもまだまだこれからのところでチャレンジしたい方、ぜひ少しでも興味ある方はご連絡ください!

実はこの前HPが完成したので、合わせてこちらもみてみてください 😸

mikan.link