読者です 読者をやめる 読者になる 読者になる

ボクココ

サービス開発を成功させるまでの歩み

Firebase はアプリ開発者のヒーローとなるか

Android Firebase iOS

ども、@kimihom です。

f:id:cevid_cpp:20160713231835p:plain

今日 Firebase の勉強会に行った。あらかじめ動画とかで Firebase の予習はしてたんだけど、今回の勉強会で実際のユースケースとか具体的な使い方を知ったことでよりイメージが湧いた。そこで感じた Firebase について今回はちょろっと語ろうと思う。

アプリ開発におけるサーバー/サービス選択の歴史

基本的にネットワークを使わずにアプリだけで完結するアプリってのは単純なものが多く、ユーザーを獲得することは困難になりつつある。より良いアプリにするには、クラウドと連携して"つながる"とか"最新情報がある"アプリにすることが大事であることは自明なことかと思う。

そんな中でエンジニアがアプリ開発している時に大抵決まって同じような悩みを抱く。その典型が"サーバーどうするの"っていう話。サーバーがなければ画像を置くこともできないし、ユーザーを管理することもできず、情報を取得/更新することもできない。要するに何もできないってわけだ。

今までは自前で API サーバーを持つことが一般的だった。これは今までの Web 知識を用いれば多少時間がかかっても実装が可能だし、Webアプリとの連携もデータベースを共有することで可能になる。 だから大手とか小さいところでも自前で API サーバーを持つことが多かった。というよりそれくらいしか選択肢がなかった。

でもみんなやるよねって機能はやはり楽をしたいもの。 AWS をはじめとしたモバイルのプラットフォームがどんどん出てきて、アプリ開発者が自前でサーバー実装しなければならないことを極端に少なくしてくれた。アプリエンジニアはそれらを活用することでより早くより高品質なアプリを作り出すことができる。

しかし、次に問題になってくるのは色々なアプリ開発のモバイルプラットフォームを使うと、アカウント登録がその都度必要で、クレジットカードとか登録情報とかいちいち管理しなければならない問題が出てくる。またそれらの情報を統合的に管理することができず、それぞれがそれぞれのデータを持って分断された分析や機能の追加しかできなかったわけだ。AWS のモバイル系のサービスは各種機能を統合することを実現してはいるが、"アプリ開発に特化した"って意味では弱い部分があると個人的に思う。AWSをはじめとした総合的な開発プラットフォームでは、各種サービスが Webでもモバイルでも使える汎用的な部分が多く、アプリだけで欲しい特化したサービスが弱いと感じている。

そこでつい最近に進化した Firebase である。進化した Firebase は"モバイル開発において必要だよねー"ってところを基本的にすべて統括的に提供している。Firebase にまとめて情報を管理するようにすれば、断片的だったデータを一元管理できるようになり、使う SDK も最低限のものだけにすることができる。いろんなSDKを詰め込むようなことはしなくて良いし、余計なコードを書く必要もない。(Firebase の各機能は Gradle 経由で簡単にインストールできる)。 確かに機能的には他の専門ツール(例えば分析系)に劣る部分はあるかもしれない。ただそれも時間の問題で、ゆくゆくは Firebase だけですべてがまかなえるような、そんなプラットフォームになっていくだろう。

特に Firebase では Web とアプリの垣根をなくしていくという点で、Deep Link や App Indexing などの Google 検索などに親和性の高い機能も提供しており、これらは Firebase ならではという感じがしている。今までのFirebaseであるリアルタイムデータベースもそうだし、 Remote Config もまさにアプリだからこそ欲しい機能であり、AWS など汎用的なクラウドプラットフォームでは提供できていない部分である。

開発プラットフォームの選択

私はこのような思いからアプリ開発に特化した開発プロジェクトを始めるなら Firebase を使う。というか使い始める予定である。

しかしアプリに特化というよりも、 CGM(ユーザーがログインして投稿しあうようなサービス) のような従来の Web サービスをそのままアプリにするっていうのであれば、 Rails の Turbolinks などを活用したアプリ作成の方がいい選択になる場合もあると思っている。最近のHTML5の技術と、それ+@ 程度の機能の要件のサービスであれば、Webベースのアプリを検討すべきである。この場合は Firebase を使う必要はほとんどないだろう。詳細は以下の記事に書いた。

www.bokukoko.info

当たり前の話ではあるが大事なのは適材適所である。

私の Firebase に対しての唯一の要望

そんな私が絶賛する Firebase だが、あと一つ欲しいものがある。それがサーバーサイドでロジックを実行できる、 Cloud Functions と Firebase の連携だ。やはりどうしてもサーバーサイドで実行したいようなロジックがあるときに、Firebase で Cloud Functions と同等の機能があれば、もう他のアプリ開発サービスを使う必要はなくなってくると思う。わざわざちょっとしたロジックだけのために Google App Engine や Google Cloud Platform などは使いたくないってケースは大いにあるだろう。

この願いを持っている人は他にもいるみたいで、今 Google では検討中? な感じのようである。

Google グループ

終わりに

この記事を書いた背景としては、まず進化した Firebase がすごいと感動したからであり、その凄さをまだほとんどの人は知らないんじゃないかという思いで書いたというのがある。

一部の熱狂的なアプリ開発者だけが使われて、それらのアプリだけが差別化してどんどん成長していくってのはもったいない気がしたので、ぜひ経験の浅いアプリ開発エンジニアでも Firebase にチャレンジしてみて欲しいと思う。

ドキュメントはやはり英語だから辛い部分もあるかと思う。でも英語を読むだけで実装のほとんどをやらなくて済むようになるので、頑張ってみて欲しい。

私もこれからどんどん Firebase を使っていくが、そこで得た知見は適宜このブログで書いていきたいと思う。