モバイルアプリケーション開発の基礎と「MongoDB Realm」の概要
はじめに
「MongoDB Realm」というサービスをご存じでしょうか。Webアプリやモバイルアプリの開発向けプラットフォームとして注目されています。最近はこれに限らず、特にモバイルアプリを開発する際は開発プラットフォームを利用することが増えています。本連載ではMongoDB Realmを用いたモバイルアプリ開発について解説していきます。
レベル感としては、Webアプリの開発経験はあるがモバイルアプリは未経験の方が理解できるような連載にしていきたいと思っています。そこで第1回となる今回は、モバイルアプリ開発の基礎知識とMongoDB Realmの概要について解説します。
モバイルアプリの定義と課題
モバイルアプリとはモバイルアプリケーションの略で、スマートフォンやタブレットといったモバイル機器上で動くアプリのことを指します。つまり一般的なスマホアプリもモバイルアプリなので、ほとんどの方が使用されたことがあると思います。そのような事情から、本連載はスマートフォン向けのモバイルアプリ開発に特化しています。
モバイルアプリはスマートフォン等のデバイスで動作することから、Webアプリではほとんど存在しない独特の課題もあります。インターネットへの接続が不安定なことによるアプリの動作への影響です。Wi-FiからLTEへ切り替わったり、通信が不安定な場所にいる際にアプリが止まってしまったり、動作が重くなるといった経験があるのではないでしょうか。
その問題の解決策として「オフラインファースト」で設計するということがあります。オフラインファーストとはインターネットへの接続がない状態でもコア機能が動作することを意味します。設計自体は非常に単純で、次の3点を満たしていることが重要です。
- ユーザーがオフラインであると想定
- アプリがオフラインになってもシームレスにコア機能が使用可能
- データはローカルにキャッシュされ、オンラインになったタイミングで同期
このように基本的な設計はシンプルですが、これを1から実装しようとするのは大変です。デバイス側のデータストアをどうするか、データ同期のためにコンフリクトをどのように解消するか、ネットワーク切断時の処理をどうするか等、簡単に考慮事項を挙げるだけでも多くあり、その後のテストも複雑なプロセスが必要になってきます。このことからも分かるように、オフラインファーストに基づいた機能を独自実装しようとすると、それだけで非常に多くの手間がかかります。
それでは、どのようにするのが良いでしょうか。このような課題は多くの開発者に共通することなので、それを解決するプラットフォームが提供されています。MongoDB Realmはその中の1つです。
モバイルアプリの開発プラットフォーム
早速MongoDB Realmの紹介に入りたいところですが、他にも類似のプラットフォームがあるため、まず、それらを紹介します。
モバイルアプリ開発では、例えばユーザー管理機能のように、多くのアプリに共通する機能があります。その際に毎度実装するのは大変なので、各社がモバイルアプリで頻繁に利用される機能をサービスとして提供しています。これは「mBaaS(mobile backend as a service)」と呼ばれ、次のような機能を備えているものが多いです。
- ユーザー管理
- プッシュ通知
- データ管理
具体的に各社が提供するものとしては、AWSでは「AWS Mobile Hub」、GCPでは「Firebase」、Azureでは「Mobile Apps」、国内では「ニフクラ mobile backend」が有名です。MongoDB Realmについても、公式にmBaaSと称している訳ではありませんが、提供している機能面だけ見ればmBaaS相当であると捉えていただいて問題ありません。
MongoDB Realmの特徴
ここで、MongoDB Realmの概要について見ていきます。始めに全体像を解説した後、それを構成する3つの要素を解説していきます。
まず、MongoDB Realmの全体像ですが、全体像と言っても実はMongoDB Realmを単体で使うことはできません。MongoDB社は「MongoDB Cloud」として「Atlas」と「Realm」を提供しています。MongoDB Atlasは一言で言えばMongoDBのDBaaSです。また、モバイルデバイス上で動作するデータベースとして「Realm Database」を提供しています。MongoDB AtlasとRealm Database、およびRealm Databaseの間のデータの同期や、ユーザー管理等のモダンアプリ開発向け機能を提供するクラウドサービスとしてMongoDB Realmがあります。少し複雑な説明になりましたが、これらの3つの要素の関係は下図のようになります。
全体像を把握したところで、構成要素のRealm Database、MongoDB Atlas、MongoDB Realmについて、それぞれ詳しく見ていきます。
Realm Databaseは、上図のようにモバイルデバイス上で動作します。データの保存・検索・更新を簡単かつ軽量に行うことができます。また「Realm SDK」を利用することでiOSとAndroidのどちらも対応可能で、言語としてはJava、Kotlin、Swift、Objective-C、C#、Node.js等で開発が可能です。
次に、MongoDB Atlasです。MongoDBのDBaaSであり、アプリで生成された様々なデータを保存しておくことが可能です。後述するRealm Syncの際にはこれを経由して他端末をデータ同期します。また、保存されたデータは「MongoDB Driver」で分析したり、「MongoDB Charts」というツールで可視化できます。
最後に、MongoDB Realmです。サーバーとクライアント間、そしてクライアント間のデータ同期とバックエンドの処理を実行します。「Realm Sync」と呼ばれる機能があり、これによりデータ同期がバックグラウンドで自動的に行われます。バックエンド処理については、次のような非常に有用な機能があります。
- ユーザー認証
- サーバーサイドでの処理
- イベントトリガーの処理
- その他権限管理やシークレット機能等
以上、3つの要素が連携しあうことにより、端末間でのデータ同期とネットワーク断時の対応を開発者が意識することなく実現します。
MongoDB Realmの歴史
Realm Database、データ同期エンジン「Realm Platform」、そのPaaSである「Realm Cloud」は、元々MongoDB社ではなくRealm社が運営していました。Realm Databaseの特徴は、NoSQLのモバイルデータベースとして軽量かつ高速であり、高い評価を受けていました。また、MongoDBはドキュメント型としてはデータベースエンジンランキングでNo1の人気があります。
そのような状況下で、MongoDB社が2019年にRealmを買収し、2020年6月にはMongoDB Realmを正式にリリースしました。モバイルデータベースとして非常に優れたRealm Databaseと、ドキュメント型DBとして人気のMongoDBのコラボレーションにより作られた、オフラインファーストのプラットフォームがMongoDB Realmです。
モバイルアプリ開発に使用するツール
最後に、モバイルアプリ開発で使用するツールについて簡単に記載します。個々の詳細については、必要に応じて本連載中で補足しますので、ここでは概要だけつかんでいただければと思います。
モバイルアプリ本体の開発にはIDEを使用するのが一般的です。Androidでは「Android Studio」、iOSでは「Xcode」等が有名です。さらにRealm Databaseを利用したい場合には、Realm用のSDKから簡単に行えます。
バックエンドで実現したい処理によっては、mBaaSの提供する機能以外が必要になることもあります。そのようなときは独自に実装します。例えばMongoDB Realmでは「Functions」と呼ばれる機能を使い、Javascriptで記述された処理をバックエンドで実行できます。
おわりに
ここまで、モバイルアプリケーション開発の基礎とMongoDB Realmの概要までを解説しました。
主にMongoDB Realmの概要に加え、メリットとしては、同期処理を自動で行う、オフラインファースト、各種モバイルアプリ開発に役立つ機能の3つがあることを押さえていただけると、次回以降の内容の理解につながるかと思います。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- MongoDB Atlasクラスタの作成とMongoDB Realmアプリのデプロイ
- サンプルプログラムで MongoDB Realm のデータ同期を確認する
- MongoDB Realmのパーティションへの理解を深めよう
- Visual StudioでXamarin+Realmアプリの開発環境をセットアップ
- 「Flexible Sync」でデータを同期してみよう
- Custom User Dataを利用してユーザーに管理者属性を追加しよう
- Realmアプリの機能を利用して認証機能を作ろう(後編)
- MongoDB Realmを利用したCRUD機能を実装しよう
- Realmアプリの機能を利用して認証機能を作ろう
- ニフティ、スマートフォンアプリ開発に特化したクラウドサービス「ニフティクラウド mobile backend」を提供開始