MongoDB Realmでモバイルアプリ開発を試してみよう! 2

MongoDB Atlasクラスタの作成とMongoDB Realmアプリのデプロイ

平 昇治

2021年12月7日 6:30

目次

  1. はじめに
  2. 事前に用意するもの
  3. MongoDB Realmの環境を作成する MongoDB Realmアカウントの作成(サインアップ) MongoDB Realmのポータルページにアクセスし、「Try Free」もしくは「無料ではじめましょう」を押下すると以下の画面が表示されます。
    今回はGoogleアカウントを利用してサインアップを行うため「Googleでサインアップする」を押下クリックします。今回利用するGoogleアカウントを選択し、認証を行うとプライバシーポリシーと利用規約に関する同意を求められますので、両方とも目を通したあとに、チェックボックスにチェックを付けて「Submit」を押下します。
    これでMongoDB Realmのアカウントが作成され、MongoDB Atlasのクラスタ作成画面へ遷移します。 MongoDB Atlasクラスタを作成する ここでは、いくつかの質問があるので回答していきます。各質問の説明は以下のとおりです。 ・今日のゴールは?
    今回は学習メインなので「Learn MongoDB(MongoDBを理解する)」を選択します。 ・ビルドするアプリケーションのタイプは?
    モバイルアプリケーションなので、「Mobile」を選択します。 ・優先する言語は?
    本連載ではC#でモバイルアプリケーションを作っていく予定なので、優先する言語は「C# / .NET」を選択します。 回答が完了したら、「Finish」を押下します。
    続けて、MongoDB Atlasをデプロイするためのオプションを選びます。現時点では、以下のデプロイオプションが用意されています。 ・Serverless(Preview)
    利用量に応じて課金額が変動するモデル。常時動作しないサービス/アプリケーションなどの場合に適しています。 ・Dedicated:専有
    時間に応じて課金されるモデル。常時動作するようなサービス/アプリケーションの場合に適しています。 ・Shared:共有
    学習用に用意されているモデルという位置づけ。無料なのでクレジットカード情報なしで開始できます。
    プロダクションで運用する場合は「Dedicated」か「Serverless」を選びます。「Shared」を選択した状態で右下の「Advanced Configuration Options」を押下すると、設定確認/変更を行う画面が表示されます。
    ここでは、MongoDB AtlasクラスタのTierを確認、選択が可能です。今回は無料版で行うため「M0 Sandbox」を利用します。少しスクロールするとクラウドプロバイダとリージョンを確認できます。
    クラウドプロバイダとしてAWS、GCP、Azureが指定可能で、リージョンもいくつかの選択肢から指定可能です。 Cluster Nameのアコーディオンを開くと、クラスタ名を指定できます。本連載では「CreationlineCluster」と設定して進めます。「Create Cluster」を押下するとAtlasクラスタの作成がはじまります。しばらく待つとAtlasクラスタが完成します。完成後には、次のような画面が表示されます。
    左上の「Line’s Org - 2021-11-xxxx」はオーガナイゼーション、「Project 0」はプロジェクトです。1つのオーガナイゼーションの下に複数のプロジェクトが存在し、プロジェクトの中にAtlasクラスタとRealmアプリが存在するという構成になります。 名称変更を含んだ設定変更は、それぞれの項目の右側にあるボタンから行えます。 MongoDB Realmのアプリを作成する データベースの作成が終わったので、引き続きMongoDB Realmアプリ(以下、Realmアプリ)を作成します。 Realmアプリについて Realmアプリはモバイルアプリケーション側からのリクエストを処理するなど、アプリケーションのバックエンドの役割を果たします。 Realmアプリの中身は、MongoDB Realmが提供している機能の設定情報が書かれたjsonファイルとFunction機能を動かすためのjavascriptファイルで構成されます。Function機能については後述します。 RealmアプリはRealmUIのほか、CLIやAPIを利用して作成できますが、今回はRealmUIを利用し、テンプレートアプリで作成します。 なお、CLIを使用する際の手順ではテンプレートアプリをpullするため、中身を確認することもできます。 Realmアプリの作成 前述のAtlasクラスタ完成画面でRealmタブを押下すると、以下の画面が表示されます。
    今回はC#のStarterテンプレートを使用するので「Xamarin + Realm Sync Starter」を選択すると、Realmアプリの設定画面が表示されます。
    ・Link your Data Source
    接続先のAtlasクラスタを設定します。先ほど作成したAtlasクラスタを指定します。 ・Name your Application
    Realmアプリの名前です。好きな名前を入力しましょう。ここでは「SampleApp」としましたが、本連載では今回以降もこのRealmアプリを利用するため、名称を合わせておくと理解しやすいかと思います。 ・App Deployment Model
    Realmアプリのデプロイモデルです。今回はLocalを指定します。Regionは先に作成したAtlasクラスタのリージョンに一番近い場所を指定します。 グローバルデプロイとローカルデプロイの違いは以下のとおりです。 グローバルデプロイ
    ・Realmアプリはサポートするすべてのクラウドリージョンにホストされる。
    ・ユーザ情報の読み取りやFunctionの呼び出しなどのアプリケーションリクエストは、リクエストを発行したユーザに最も近いクラウドリージョンで行われる。
    ・Atlasクラスタへの操作はRealmアプリで指定した単一のリージョン内で処理される。 ローカルデプロイ
    ・Realmアプリは指定した単一のリージョンにのみホストされる。
    ・アプリケーションリクエストおよびAtlasクラスタへの操作ともにRealmアプリで指定した単一のリージョン内で処理される。 「Create Realm Application」を押下すると、テンプレートを元にRealmアプリが作成されます。 作成したRealmアプリの機能を確認する ここで、いくつかRealmアプリの機能をUIを通して確認してみます。Realmタブから作成したアプリケーションをクリックしてみましょう! アプリケーション情報を確認する アプリケーションの情報を確認できます。「App ID」に表示されている文字が一意のアプリケーションを示すIDです。このIDを利用してモバイルアプリケーションからRealmアプリに接続します。また「Guides」から主要な機能のtutorial Guideに進むこともできます。
    スキーマ情報を確認する MongoDB Realmを用いた開発ではデータベーススキーマを利用します。既にtodoデータベース、Taskコレクションが存在していますが、これは先に実施したRealmテンプレートアプリのデプロイの中で作成されます。
    スキーマはjsonオブジェクトで定義します。_id、_partition、isComplete、summaryの4つのプロパティを持ち、すべてRequired属性が指定されているコレクションです。 ここでは詳細な解説は割愛します。詳しく知りたい方はスキーマに関する解説サイトを参照ください。 ユーザ情報を確認する Realmアプリケーションが利用するユーザ情報を確認できます。MongoDB Realmはユーザ情報を管理するための機能を有しています。
    ユーザが存在する場合はここにユーザ一覧が表示されますが、まだユーザーは存在しないため表示されていません。 ユーザ認証プロバイダを確認する 「Authentication」を押下すると、アプリケーションユーザの認証プロバイダを確認できます。Eメール/パスワード認証の他、FaceBook、Google認証などいくつかの認証プロバイダが提供されています。
    SDKに関する情報を確認する Realm SDKsを利用した方法が記載されています。
    MongoDB Realmを用いたモバイルアプリケーション開発では、モバイルアプリケーションからSDKを用いてRealmアプリケーションへ接続します。Language欄から利用したい言語を選ぶと、各言語に応じた接続方法を確認できます。 var myRealmAppId = "<your_app_id>"; var app = App.Create(myRealmAppId); var user = await app.LogInAsync(Credentials.Anonymous()); これは、Anonymous認証でRealmアプリケーションにログインする処理例です。<your_app_id>には接続したいRealmAppのIDを指定します。LogInAsync()はログインを行うメソッドです。 「Working with Realms」には、Realm Syncを行うためのサンプルコードが記載されています。 オブジェクトモデルを確認する 「Realm Object Models」タブでは、開発言語ごとのエンティティを定義するためのコードを確認できます。スキーマ定義を元にして実際に利用する内容が表示されます。モバイルアプリケーション側に本クラスを用意してデータ操作を行います。
    Sync 前回でMongoDB Realmを利用するメリットとして「同期処理を自動で行う」と説明しましたが、それを実現するための機能です。 どのAtlasクラスタとSyncするか、同期の中核となるパーティションキーの選択など、Realm Syncの設定が行えます。テンプレートのRealmアプリをdeployした段階で有効な同期設定が投入されています。
    Syncはモバイルアプリケーション側からSDKを用いて行います。実際の操作については、次回以降で取り上げていく予定です。 Sync機能について 複数人から同一のコレクションに処理リクエストが要求された場合は競合が発生しますが、MongoDB Realmを利用したモバイルアプリケーション開発では競合を自動解決します。モバイルアプリケーション開発者が競合を意識してソースコード上に特別な処理を記述する必要はありません。 競合の解消ルールは、以下のとおりです。 ・削除(DELETE)は常に優先される
    一方のリクエストで更新してもオブジェクトは削除された状態になります。 ・更新(UPDATE)は最後の更新が優先される
    両方が同じプロパティを更新する場合、最新の値を保持します。 ・挿入(INSERT)は時間順に並べられる
    2つのアイテムを同じ位置に挿入した場合は時間順に挿入され、2つのアイテムが挿入された状態になります。 競合の解決ルールの詳細は、こちらのサイトを参照してください。 Function Realmアプリのサーバサイド側で行う処理を定義、実行できます。処理はTriggerから呼び出したり、モバイルアプリケーション(クライアントアプリケーション)から呼び出したりできます。FuctionはJavascriptで記述します。
    Trigger 特定の条件に一致する場合にFunctionを実行するための機能です。以下のトリガが用意されています。
    ・データベーストリガ
    コレクション内へのドキュメント挿入、変更、削除時 ・認証トリガ
    アプリケーションユーザの作成、認証、削除時
    ・スケジュールトリガ
    事前定義されたスケジュール おわりに 今回はMongoDB Atlasクラスタの作成、MongoDB Realmアプリのデプロイについて解説しました。全ての機能ではありませんが、Realmアプリのデプロイと実際のUIを通じてMongoDB Realmの機能をいくつか紹介しました。 Realmアプリ側でAtlas(データベース)との接続に関する情報やモバイルアプリケーション開発に必要な機能が提供されているというイメージを掴めたかと思います。 次回は、実際にクライアントアプリケーションからRealm Syncを実施し、データを操作する内容を解説する予定です。
  4. MongoDB Atlasクラスタを作成する
  5. MongoDB Realmのアプリを作成する
  6. 作成したRealmアプリの機能を確認する
  7. おわりに

はじめに

前回は第1回ということで、「MongoDB Realm」の概要を解説しました。

今回は、MongoDB Realmを使ったモバイルアプリケーションの環境構築を通して、MongoDB Realmの機能を解説していきます。なお、下図の丸で囲った部分が今回構築していく部分となります。

事前に用意するもの

MongoDB Realmのアカウントを作成するにあたり、GoogleアカウントもしくはEメールアドレスが必要になります。今回はGoogleアカウントを利用してサインアップを行いますので、本記事に沿って環境を作成する場合はGoogleアカウントをご準備いただくとスムーズです。

なお、MongoDB RealmにはFree版(無料版)が用意されており、本記事でもFree版を用いて行います。有料版の場合はクレジットカード情報が必要です。

MongoDB Realmの環境を作成する MongoDB Realmアカウントの作成(サインアップ)

MongoDB Realmのポータルページにアクセスし、「Try Free」もしくは「無料ではじめましょう」を押下すると以下の画面が表示されます。

今回はGoogleアカウントを利用してサインアップを行うため「Googleでサインアップする」を押下クリックします。今回利用するGoogleアカウントを選択し、認証を行うとプライバシーポリシーと利用規約に関する同意を求められますので、両方とも目を通したあとに、チェックボックスにチェックを付けて「Submit」を押下します。

これでMongoDB Realmのアカウントが作成され、MongoDB Atlasのクラスタ作成画面へ遷移します。

MongoDB Atlasクラスタを作成する

ここでは、いくつかの質問があるので回答していきます。各質問の説明は以下のとおりです。

・今日のゴールは?
今回は学習メインなので「Learn MongoDB(MongoDBを理解する)」を選択します。

・ビルドするアプリケーションのタイプは?
モバイルアプリケーションなので、「Mobile」を選択します。

・優先する言語は?
本連載ではC#でモバイルアプリケーションを作っていく予定なので、優先する言語は「C# / .NET」を選択します。

回答が完了したら、「Finish」を押下します。

続けて、MongoDB Atlasをデプロイするためのオプションを選びます。現時点では、以下のデプロイオプションが用意されています。

・Serverless(Preview)
利用量に応じて課金額が変動するモデル。常時動作しないサービス/アプリケーションなどの場合に適しています。

・Dedicated:専有
時間に応じて課金されるモデル。常時動作するようなサービス/アプリケーションの場合に適しています。

・Shared:共有
学習用に用意されているモデルという位置づけ。無料なのでクレジットカード情報なしで開始できます。

プロダクションで運用する場合は「Dedicated」か「Serverless」を選びます。「Shared」を選択した状態で右下の「Advanced Configuration Options」を押下すると、設定確認/変更を行う画面が表示されます。

ここでは、MongoDB AtlasクラスタのTierを確認、選択が可能です。今回は無料版で行うため「M0 Sandbox」を利用します。少しスクロールするとクラウドプロバイダとリージョンを確認できます。

クラウドプロバイダとしてAWS、GCP、Azureが指定可能で、リージョンもいくつかの選択肢から指定可能です。

Cluster Nameのアコーディオンを開くと、クラスタ名を指定できます。本連載では「CreationlineCluster」と設定して進めます。「Create Cluster」を押下するとAtlasクラスタの作成がはじまります。しばらく待つとAtlasクラスタが完成します。完成後には、次のような画面が表示されます。

左上の「Line’s Org - 2021-11-xxxx」はオーガナイゼーション、「Project 0」はプロジェクトです。1つのオーガナイゼーションの下に複数のプロジェクトが存在し、プロジェクトの中にAtlasクラスタとRealmアプリが存在するという構成になります。

名称変更を含んだ設定変更は、それぞれの項目の右側にあるボタンから行えます。

MongoDB Realmのアプリを作成する

データベースの作成が終わったので、引き続きMongoDB Realmアプリ(以下、Realmアプリ)を作成します。

Realmアプリについて

Realmアプリはモバイルアプリケーション側からのリクエストを処理するなど、アプリケーションのバックエンドの役割を果たします。

Realmアプリの中身は、MongoDB Realmが提供している機能の設定情報が書かれたjsonファイルとFunction機能を動かすためのjavascriptファイルで構成されます。Function機能については後述します。

RealmアプリはRealmUIのほか、CLIやAPIを利用して作成できますが、今回はRealmUIを利用し、テンプレートアプリで作成します。

なお、CLIを使用する際の手順ではテンプレートアプリをpullするため、中身を確認することもできます。

Realmアプリの作成

前述のAtlasクラスタ完成画面でRealmタブを押下すると、以下の画面が表示されます。

今回はC#のStarterテンプレートを使用するので「Xamarin + Realm Sync Starter」を選択すると、Realmアプリの設定画面が表示されます。

・Link your Data Source
接続先のAtlasクラスタを設定します。先ほど作成したAtlasクラスタを指定します。

・Name your Application
Realmアプリの名前です。好きな名前を入力しましょう。ここでは「SampleApp」としましたが、本連載では今回以降もこのRealmアプリを利用するため、名称を合わせておくと理解しやすいかと思います。

・App Deployment Model
Realmアプリのデプロイモデルです。今回はLocalを指定します。Regionは先に作成したAtlasクラスタのリージョンに一番近い場所を指定します。

グローバルデプロイとローカルデプロイの違いは以下のとおりです。

グローバルデプロイ
・Realmアプリはサポートするすべてのクラウドリージョンにホストされる。
・ユーザ情報の読み取りやFunctionの呼び出しなどのアプリケーションリクエストは、リクエストを発行したユーザに最も近いクラウドリージョンで行われる。
・Atlasクラスタへの操作はRealmアプリで指定した単一のリージョン内で処理される。

ローカルデプロイ
・Realmアプリは指定した単一のリージョンにのみホストされる。
・アプリケーションリクエストおよびAtlasクラスタへの操作ともにRealmアプリで指定した単一のリージョン内で処理される。

「Create Realm Application」を押下すると、テンプレートを元にRealmアプリが作成されます。

この記事のキーワード

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る