はじめに
近年、スマホアプリの重要性はますます高まり、新しいサービスのローンチ時にネイティブアプリが提供されるのも普通のことになりました。
このような時代のアプリ開発者には、
- サービスをいち早くユーザに届ける機動力
- 既存のソーシャルメディアとのシームレスな連携
- よりリアルタイムで双方向に情報をやりとりできること
などが強く求められるようになります。
そんなときに心強い味方となってくれるのがMobile Backend as a Service(MBaas)と呼ばれるクラウドサービスです。
本連載では、最近にわかに注目が集まっているMBaasのひとつであるFirebaseについて、その特徴やメリットを紹介し、実際に動かすことのできるコードを順を追って解説しながら、最終的に実践的なアプリをひとつ開発できるようになることを目指したいと思います。
Firebaseとは
Firebaseは2011年にアメリカで始まったMBaasですが、2014年にGoogleに買収されたことで一気に知名度が上がりました。
Firebaseも他のMBaas同様、オンラインでサインアップするだけでサーバのセットアップやメンテナンスに煩わされることなく使い始めることができ、オンラインデータベースにデータを格納したり引き出したりすることができますが、他のMBaasにはない強力な機能も数多く有しています。
Firebaseの特徴
リアルタイム同期型データベース
個人的にFirebaseの最大の特徴だと考えているのが、このリアルタイムデータベースです。
一般的なオンラインデータベースが、クラウド上にあるいわば中央データベースに対し直接データを書き込んだりデータを取得したりするのに対し、Firebaseの場合は個々のクライアントが「データベースのローカルコピー」を持ち、通常の読み書きはこのローカルコピーに対して行います。ローカルコピーに対する変更は即座に中央のデータベースと同期され、同じデータベースを参照しているクライアントのローカルコピーはすみやかに中央データベースと整合性が取られるようになっています。
データに変更があると、即座に各クライアントに通知される(Push型)ので、各クライアントではそれらのイベントを適切に処理することで、リッチでリアルタイムな体験をユーザに提供することができます。
これは、通常のオンラインデータベースではデータが欲しいタイミングでクライアントが能動的に取得しなければならない(Pull型)のとは対照的です。
また、ローカルコピーを持つことのもうひとつのメリットとして、オフライン時の制御が容易になります。
各クライアントは基本的にローカルコピーに対する読み書きにしか関与しないので、仮に突如ネットワークが不安定になりオンラインとオフラインの状態移行を繰り返す、あるいは全くインターネットに接続できない状態でFirebaseを利用したとしても、データベースに対するすべての読み書き処理は成功したように見えます。これは基本的にすべてのデータの読み書きがローカルコピー経由で行われるからこそなせるわざです。
オフライン時に書き込まれたデータは一時的に中央サーバとは異なった状態となりますが、再びオンラインに復旧した時にFirebaseが自動的にバックエンドで同期を取ってくれるので、最終的には同じデータベースを参照している各クライアント間では不整合が修正されます。
結果的に、複雑な処理をすべてFirebaseに任せて、プログラマは成功する読み書きに対するコードだけに集中すればよく、開発スピードを飛躍的に高めることができます。
ユーザ認証とデータアクセス管理
たとえばFirebaseでリアルタイムチャットサービスを開発することを考えてみましょう。
当然、発言者の名前とアイコンを表示したいところですし、自分とそれ以外の発言は色を変えたりしたいところです。また、自分の発言は編集/削除できれば便利ですし、反対に自分以外の発言を消すことができると問題です。同様に、ユーザ間のダイレクトメッセージは当事者以外が閲覧できたら問題となるでしょう。
このように、込み入ったアプリやサービスを構築する場合に「そのユーザが誰なのか認証する」という機能はもはや必須であると言えます。Firebaseでは、この認証を簡単に実装するための機能も提供されています。
Firebaseでは、
- Firebase自体にアカウントとパスワードを登録し、それを使ってログイン
- 一時的な匿名ログイン
- Facebook,Twitter,GitHub,GoogleアカウントなどのOAuth機能を利用したログイン
- 完全に自前の認証基盤との連携
などがサポートされており、有名なソーシャルサービスのアカウントとの連携がいとも簡単にできる他、すでに自社で運用しているサービスのユーザアカウントを利用したログインもサポートされているなど、柔軟なログイン基盤が用意されています。
また、特定のデータには特定のアカウントしかアクセスできないといったアクセス制御も柔軟かつ簡単に実現できるので、前述したリアルタイムチャットサービスのデータをセキュアに取り扱うことができます。
静的Webサイトホスティング
その他にも、本連載では詳しくは触れませんが、HTMLとJavaScriptのみから成るWebアプリケーションはFirebaseクラウド上にホスティングすることができるので、自前でサーバを一切用意することなくリアルタイムなWebアプリケーションを提供することが可能です。アプリケーションのデプロイもFirebaseのコマンドラインツールを使っていとも簡単に行うことができます。
Firebaseを使ったアプリを体験してみよう
百聞は一見にしかずという言葉もある通り、実際にFirebaseを使って作られたアプリを使ってみることがFirebaseで何ができるかを知る最も良い手段なのではないでしょうか。
ここでは「わいわいチャット」というリアルタイムチャットアプリケーションを用意しました。Androidをお持ちの方はGoogle Playからアプリをダウンロードしてみてください。Android 4.4以降の端末でご確認いただけます。
このアプリではまずお持ちのTwitterアカウントでログインし、ログインが完了したらそのアカウントとサムネイル画像を使ってリアルタイムなチャットができるようになっています。
リアルタイムにお互いの発言が更新されることと、オフライン時に書き込んだものがオンライン復帰時に自動的に同期されることなどを確認してみてください。
Firebaseではこのようなアプリを簡単に開発することができます。コードの紹介は後の連載を楽しみにしていてください。
おわりに
いかがだったでしょうか。本記事ではFirebaseの概要と何ができるかをご紹介し、実際にFirebaseを使ったアプリでどんなことができるのかを見ていきました。
次回の連載では実際にFirebaseにサインアップし、データを書き込んだり読み出したりする小さなアプリケーション開発を始めていきたいと思います。お楽しみに。