Amazon, Google, Microsoft の mBaaS の比較と Xamarin の対応状況

モバイルバックエンドサービス(mBaaS)は、もはやクラウドプロバイダーが提供するものを使用するのが鉄板になってきました。

大きなクラウドプロバイダーといえば、 Amazon-AWS, Google-GCP, Microsoft-Azure ですね。

　私が推している Xamarin は、Microsoft 製品である以上、 Azure とセットで PR される事が多いですが、 Xamarin 的には他の mBaaS にも対応しているので、ちょいと調べてみました。

　※筆者は、日頃 AWS はよく使っているけど EC2/S3 が主、Google Cloud Platform と Azure は HelloWorld 程度という知識です。

まずは、各 mBaaS が提供する機能を比較し、その後、 Xamarin への対応状況を述べます。

## ｍBaaS の機能比較表

とりあえず表。

|機能＼プロバイダー|AWS Mobile Hub|Google Firebase|Microsoft Azure Mobile Apps|
|:--|:--|:--|:--|
|認証|[Cognito](https://aws.amazon.com/jp/cognito/)|[Authentication](https://firebase.google.com/docs/auth/)|[ユーザー認証](https://azure.microsoft.com/ja-jp/documentation/articles/app-service-authentication-overview/)|
|データストレージ|[S3](https://aws.amazon.com/jp/s3/), Cognito|[Storage](https://firebase.google.com/docs/storage/)|[Azure Object Storage](https://azure.microsoft.com/ja-jp/services/storage/blobs/)|
|クラウドロジック|[Lambda](https://aws.amazon.com/jp/lambda/)|[Cloud Functions for Firebase](https://firebase.google.com/features/functions/)||
|データベース(NoSQL)|[DynamoDB](https://aws.amazon.com/dynamodb/)|[Realtime Database](https://firebase.google.com/docs/database/)|[Table Storage](https://azure.microsoft.com/ja-jp/documentation/articles/storage-table-design-guide/)|
|アプリケーション分析|[Mobile Analytics](https://aws.amazon.com/jp/mobileanalytics/)|[Firebase Analytics](https://firebase.google.com/docs/analytics/)||
|コンテンツ配信(CDN)|S3, [CloudFront](https://aws.amazon.com/jp/cloudfront/)|[Hosting](https://firebase.google.com/docs/hosting/)||
|プッシュ通知|[SNS](https://aws.amazon.com/sns/)|[Cloud Messaging](https://firebase.google.com/docs/cloud-messaging/)|[Notification Hubs](https://azure.microsoft.com/ja-jp/services/notification-hubs/)|
|アプリケーションのテスト|[Device Farm](https://aws.amazon.com/jp/device-farm/)|[Test Lab](https://firebase.google.com/docs/test-lab/)||

それぞれ、

* Amazon - [AWS Mobile Hub](https://aws.amazon.com/jp/mobile/)
* Google - [Firebase](https://firebase.google.com/)
* Microsoft - [Mobile App Service](https://azure.microsoft.com/ja-jp/services/app-service/mobile/)

とその関連ページからの抜粋です。

AWS Mobile Hub や Azure Mobile Apps という名称は、それぞれのクラウドプロバイダーが提供する機能の集合体として名付けられたに過ぎません(たぶん)。
あと Firebase はその企業自体を Google が買収したものです。

なので、上表の空欄の箇所も、 **mBaaS という括りで紹介されてないけど、該当する機能はあります。**

* クラウドロジック
	* [Cloud Functions](https://cloud.google.com/functions/)(Google),	[Azure Functions](https://azure.microsoft.com/ja-jp/services/functions/)(Microsoft)
* アプリケーション分析
	* [HockeyApp](https://hockeyapp.net/)(Microsoft)
* コンテンツ配信(CDN)
	* [Azure CDN](https://azure.microsoft.com/ja-jp/services/cdn/)(Microsoft)
* アプリケーションのテスト
	* [Test Cloud](https://www.xamarin.com/test-cloud)(Microsoft)


## モバイルSDKの Xamarin への対応状況

mBaaS を謳うからには、スマホアプリ開発が容易に行えるよう、モバイル向けSDK が準備されていることが望ましいです。

各社 Android, iOS 用の SDK は当然用意されていますが、 Xamarin 用の SDK はあるでしょうか？次のような結果になりました。

|機能＼プロバイダー|AWS Mobile Hub|Google Firebase|Microsoft Azure Mobile Apps|
|:--|:--:|:--:|:--:|
|認証|✔||✔|
|データストレージ|✔||✔|
|クラウドロジック|--|--|--|
|データベース(NoSQL)|✔||✔|
|アプリケーション分析|✔|||
|コンテンツ配信(CDN)|--|--|--|
|プッシュ通知|✔||✔|
|アプリケーションのテスト|--|--|--|


Xamarin 向けは、Azure の SDK が用意されているのは当然として、 Amazon AWS も一通りの SDK が用意されています。しかも Java や Objective-C のラッパーではなく C# で書かれたもの(なので .NET プラットフォーム全般で使えます)。

Google Firebase は、現在 Xamarin 向けの公式 SDK はありませんが、

* [NuGet Gallery | Xamarin Firebase - Common 32.940.0-beta3](https://www.nuget.org/packages/Xamarin.Firebase.Common/)
* [Firebase support — Xamarin Forums](https://forums.xamarin.com/discussion/15383/firebase-support)

によると、 Xamarin が何かを提供してくれるつもりなのでしょうか？、期待です。
あるいは、有志の方が作られた、

* [rlamasb/Firebase.Xamarin: Light weight wrapper for Firebase Realtime Database REST API.](https://github.com/rlamasb/Firebase.Xamarin)

というライブラリを使う手がありますが、説明を読む限りこれは「データベースのみ」の対応のようです。

## まとめと次回

　Amazon, Google, MS 各社の ｍBaaS は、その括りの違いこそあれ、概ね同じ機能を提供しています。
　
　Xamarin から使う場合、AWS と Azure は SDK が用意されているのでアプリ開発が楽です。Firebase はもうしばらく待つしかなさそうです。

　さて次回は、実際に各社（といっても AWS と Azure）の mBaaS を使って、Xamarin でサンプルアプリケーションを作ってみたいと思います。