重要事項の開示:執筆者はニフクラ mobile backendのエバンジェリストを務めています
多くのスマートフォンアプリではフロントエンドだけでなく、バックエンドの開発も必要となります。自分たちでサーバをセットアップして、サーバサイドプログラムを開発しても良いのですが、大抵のアプリにおいて必要となる機能は似通っています。一番よく使うのがプッシュ通知、その他にはデータベースやファイルストレージ、認証の仕組み等が必要になるでしょう。
そうした汎用的な機能を提供するのがmBaaS(mobile Backend as a Service)です。mBaaSを使うことで、サーバサイドの開発工数を大幅に削減できるようになります。
Monacaユーザー向けに行った Monacaをご利用のアプリ開発者の皆様の利用技術・ツールに関するアンケートレポート でも、各種mBaaSが使われている現状が分かります。有名なところでは以下のようなサービスがあります。
- ニフクラ mobile backend
- AWS
- Azure
- Firebase
- Monaca Backend
今回はこの中からアンケートで上位3社であったAWS、Firebase、ニフクラ mobile backendの機能や料金面での比較を行います。
AWS(AWS Mobile Hub)
AWSを利用されている方は、EC2やS3を使って自分でインスタンスを構築しているケースもあるかと思います。しかし、AWSは「AWS Mobile Hub」というmBaaSを提供していますので、今回はこちらを紹介します。といってもAWS Mobile Hubは特別な機能を提供する訳ではなく、ほとんどの機能はAWSで元々提供しているものを使っています。つまり既存の機能を設定しやすくしたり、まとめて設定できるポータルとしてAWS Mobile Hubが存在します。
AWS Mobile Hubで提供されている機能と、それぞれのAWSサービスに対する割り当ては次のようになります。
- 認証
Amazon Cognito Identityを利用 - データベース
DynamoDBを利用 - ストレージ
S3を利用 - クラウドロジック
AWS LambdaとAmazon API Gatewayを利用 - プッシュ通知
Amazon SNSを利用 - 分析
Amazon Pinpointを利用
この通り、既存のサービスを組み合わせてAWS Mobile Hubは構成されています。そのため、既存のAWS上にあるリソース(EC2やMachine Learningなど)と組み合わせることも容易です。
使ってみた感想
認証、データベース、ストレージ、クラウドロジック、利用解析などの機能を使ってみた感想です。
認証に関しては、SMS認証、多要素認証、ソーシャルサービスによる認証といったさまざまな認証方式が使えます。
データベースについてはDynamoDBというNoSQL型データベースになるので、使い方に慣れる必要があります。SQLによるデータベース操作に慣れている方にとっては、データのCRUD操作で手間取るかもしれません。
クラウドロジック(サーバサイドでのコード実行)はAWS Lambdaを使っているのでNode.js、Python、Java、.NET、Goといった幅広いプログラミング言語が使えます。これは今回の比較対象としているサービスの中で一番多いです。
AWS Mobile Hub全般に言えることですが、AWSに慣れている方でないと各機能を使いこなすのは難しいかもしれません。最初の設定はAWS Mobile Hub上からできますが、細かな設定は各AWSサービス上で行わないといけません。クラウドロジックのように裏側で複数のサービスが組み合わさっている機能を使いこなすには、データがどういったフローで登録されているのかを把握しなければなりません。また、うまく動かない時に問題がどこにあるのか(権限なのか、サービス側で制限してしまっているのかなど)を見つけるのに苦労するかもしれません。
アプリを運用していく中で、日々増えていくニーズに素早く対応していくにはAWSの拡張性、柔軟性は魅力的です。また、ホスティング機能(S3利用)もあり、Webサイトとモバイルアプリを同時に展開する案件にも対応しやすいはずです。
なお、残念なことにAWS Mobile Hubではプッシュ通知のCordovaプラグインは提供されていません。公式サポートされているのはiOS/AndroidそしてReact Nativeのみとなっています。サードパーティーでもプラグインは作られていないようです(執筆時点:2018年06月現在)。
料金について
料金は他のAWSのサービスと同じく従量課金制になります。AWS Mobile Hubに含まれる各サービスごとに費用が発生します。無料枠も用意されていて、例えば認証であれば50,000/月まで無料です。データベースも25GB/月間2億リクエストまで無料であるなど、十分な無料枠が用意されています。
Firebase
Googleが買収し、リブランディングして提供しているmBaaSです。元々リアルタイムDBとして有名でしたが、それ以外の機能も多数実装されています。買収後は元々存在していたGoogleのサービスの中でモバイル向きのものをFirebaseに取り込んでいます。
主な機能は次の通りです。
- データベース
WebSocketを使って更新や削除が通知されるリアルタイムDB - 認証
SMS認証に対応し、ソーシャルログインも利用可能 - クラウドファンクション
サーバにコードをホスティングしてアプリから実行する - ストレージ
Cloud Storage - ホスティング
Webアプリとしてのホスティング - 実機テスト
Androidの実機テスト - 分析
Crashlytics、Googleアナリティクス、Performance Monitoringなど - 広告
AdMob、AdWordsなど - アプリ内
アプリインデックス、Invites、Dynamic Linksなど - プッシュ通知
Cloud Messaging、Predictionsなど
Android向けにプッシュ通知を行う場合、FirebaseのCloud Messaging(FCM)を必ず使わなければなりません。AWSやニフクラ mobile backendを使っている場合でも、FCMを経由してプッシュ通知を送信します。つまりAndroid向けにアプリを提供する際には必ずFirebaseを利用する必要があります(少なくともプロジェクトを登録する必要があります)。
使ってみた感想
まず、Firebaseの中で一番有名なリアルタイムDBは、JSONをそのまま登録できるNoSQLです。チャットやゲームなど、多人数で一緒に作業するアプリのデータを送受信する用途に適しています。なお、DBとは言いつつもデータ構造はKVSであり、検索条件も同じ値/以上/以下くらいしか用意されていません。そのため、複雑な構造のデータを格納するのにはあまり向かない印象です。通常のデータベース風に使うのであればCloud FirestoreがNoSQL型DBとして使えます。
認証機能は、Googleアカウントによる認証、その他のソーシャルサービスによる認証、SMS認証、匿名認証が提供されています。データ対してのアクセス権限も設定可能です。
クラウドファンクション(サーバサイドでのコード実行)はNode.jsのみがサポートされています。他の言語を使いたい場合にはGoogle App EngineやGoogle Cloudを使うことになるでしょう。
広告のサポートを提供しているのはGoogleならではと言えそうです。AdMobはアプリ広告の最大手で、導入も容易です。また、分析や利用解析機能も充実しています。
Googleの提供するその他の機能(Big Queryや機械学習など)との連携も考えられますので、アプリ利用者の規模が拡大するにつれ発生するニーズに素早く対応できそうです。
料金について
プッシュ通知を送信するためのFCMは無料で利用できます。また、リアルタイムDBの容量1GBまで、同時接続数が100までは無料で利用できます。ストレージも5GB、クラウドファンクションは12.5万回呼び出しまで無料です。ストレージの容量やAPIの呼び出し回数がそれらを超える場合は、月額25ドル~の費用が発生します。料金は各機能をどれだけ利用するかによって変わってきます。使い方によってはコストが大きくなる可能性もあります。
ニフクラ mobile backend
ニフクラ mobile backendはニフクラ(旧ニフティクラウド)上で提供されるmBaaSです。元々旧ニフティ社の自社サービスで使われていた機能を汎用化したものがベースになっています。そのため、実用性の高い機能に特化しています。
主な機能は下記になります。
- 会員管理
メールアドレス、ユーザIDによる認証。ソーシャルサービスによる認証もあり。 - データストア
MongoDBをバックエンドにしたNoSQLデータベース。 - ファイルストア
画像やバイナリファイルを保存。 - プッシュ通知
iOS/Android両方に対応したプッシュ通知。 - スクリプト
サーバサイドでのコード実行が可能。Node.js、Rubyに対応。
他のサービスに比べると機能が見劣りしますが、アプリ解析やテストなどはパートナー企業と連携して提供しています。すべての機能を自社で提供するのではなく、各機能に特化したサービスと組んでいく方針をとっています。
使ってみた感想
データベース相当のデータストアは他のサービスと同じくNoSQL型ですが、MongoDBベースなのでより一般的なデータベースのように扱うことができます。検索条件も他のサービスに比べると数多く指定できます。ただし、FirebaseやDynamoDBがサポートしているトランザクションは利用できません。その代わり、ではないのですがNoSQL型ながらポインターとリレーションという機能で1対多、または多対多のデータの関係性を表現できます。
ファイルストアは各ファイルに対してアクセス権限が指定できます。また、HTTPSでダイレクトにファイルへアクセスできる機能もあるので、アプリやWebサイトで利用するリソースを保存しておくのに適しています。
スクリプト(サーバサイドでのコード実行)はNode.jsとRubyに対応しています。実行時間やファイルサイズには制限があるので注意して下さい。実行可能回数は料金プランによって決まっており、それを超過すると従量課金になります。
他のmBaaSが多数のサービスを寄せ集めた形になっているのに対して、ニフクラ mobile backendははじめから一つのサービスとして設計されています。そのため管理画面に統一感があり、認証の設定やデータの管理、プッシュ通知の作成などすべての機能を一箇所で行えます。
SDKはiOS、Android、Monaca、Node.js、Unity向けに提供されています。非公式ではありますが、PHP/Ruby/React Native向けにもSDKが開発されています。
料金について
ニフクラ mobile backendの料金体系はシンプルです。スクリプト機能は従量課金ですが、それ以外は無料または月額3万円の2パターンとなっています。さらに上位のカスタマイズプランも用意されています。他のサービスのように帯域やコール数による従量課金制ではありません。特に力を入れているのがサポートで、有料契約すると日本語でのテクニカルサポートが受けられます。このテクニカルサポート目当てで有料プランを契約されるケースも多いようです。
mBaaSでサーバー開発不要! | ニフクラ mobile backend
それぞれのサービスの違い
プッシュ通知に関して
ニフクラ mobile backendはMonacaと連携しているので、MonacaのCordovaプラグイン管理画面から簡単にプッシュ通知用のプラグインをインストールすることができます。手軽に使えるので、とりあえず試してみるのに向いています。
AWS Mobile Hubの場合はプラグインが提供されていませんので、デバイストークンを取得した後、APIを使ってデータを登録する必要があります。このAPIを使う部分は実装のハードルが高そうです。
Firebaseの場合はcordova-plugin-firebaseプラグインを使ってデバイストークンの取得と登録が行えます。後は管理画面上でプッシュ通知を作成します。
データベースに関して
一般的なデータベースに近いのはニフクラ mobile backendでしょう。
AWS Mobile HubのDynamoDB、FirebaseのリアルタイムDBはJSONを保存する場所といったイメージになります。どちらも検索条件はあまり設定できません。
FirebaseであればCloud Firestoreがより本格的に使えるNoSQLになります。AWSの場合は別途インスタンスを立てたり、別のサービスと組み合わせるのが良さそうです。
サーバサイドスクリプトに関して
サーバサイドでコードを実行する機能はすべてのmBaaSに備わっていますが、一番使い勝手が良いのはAWS Mobile HubのLambdaでしょう。言語も多数使えますし、実行料金も格安です。
次はNode.jsとRubyがサポートされているニフクラ mobile backendになるでしょう。ただし、他のmBaaSに比べて実行時の料金は高い印象です。
Firebaseはサポートされている言語がNode.jsだけですが、トリガーの指定ができるのが強みです。リアルタイムDBへの書き込みがあったタイミングで何らかの処理を実行することができます(これはAWS Lambdaも可能です)。ニフクラ mobile backendはトリガーに対応していません。
アクセス解析に関して
アクセス解析はAWS Mobile Hub、Firebaseどちらにも備わっています。ただしAWS Mobile Hubで提供されている機能は簡易的です。FirebaseはGoogleアナリティクスと統合されているので、強力な解析機能が提供されています。どちらのサービスもモバイルアプリ開発や運用に関係するプロセスをすべて取り込んでいこうとしているようです。
一口にmBaaSと言っても、三者三様の特性があることが理解いただけたでしょうか。いずれのサービスも、すべての機能が優れている訳ではないので、開発者としてはアプリの特性に合わせて使いたい機能だけを選んでいく形になるでしょう。機能ごとに異なるmBaaSを組み合わせて利用しても良いかもしれません。
mBaaSを使うことでアプリ開発からリリースまでの速度は大幅に高速化します。ぜひ本記事を参考にmBaaSを使ってみてください!