Upgrade to Pro — share decks privately, control downloads, hide ads and more …

オフラインファーストなモバイルアプリ開発プラットフォーム、MongoDB Realm

awk256
May 26, 2021

オフラインファーストなモバイルアプリ開発プラットフォーム、MongoDB Realm

MongoDB Realmとは、MongoDB社発の最も現代的で先進的なモバイルアプリ開発のクラウドプラットフォームです。MongoDB社は2007年設立され、ドキュメントタイプのMongoDBでトップシェアを誇っています。そして、2016年にフールマネジード型のDBaaS(Atlas)を開始。2019年には、当時、モバイルDB No1であったRealm Mobile Platformを買収。2021年4月現在、モバイルアプリ開発のクラウドプラットフォームを公式サポートしております。

Realm Client SDK

クロスプラットフォーム(iOS/Android)
Objective-C,Swift,Java,Kotlin/.NET Xamarin,Win32,UWP/Node.js,React Native
Realm Database
Realm SDK

Mongodb Realm(バックエンド)

ユーザー&認証(User/Authentication)
スキーマ(Schema)
ルール(Rule)
ファンクション(Function)
トリガ(Trigger)
データ同期(Realm Sync)
MongoDB

awk256

May 26, 2021
Tweet

More Decks by awk256

Other Decks in Technology

Transcript

  1. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved 設立 • 2006年1月

    BP含めて130人ぐらい 事業概要 • クラウドインテグレーション事業 • データモダナイゼーション事業 • DevOps関連サービス事業 • サブスクリプション販売&サポート クリエーションラインのホームページ • https://www.creationline.com クリエーションライン株式会社 2
  2. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved アジェンダ― • モバイルとは

    • オフラインファースト • MongoDB Realm SDK(フロントエンド) • MongoDB Realm(バックエンド) • MongoDB Realmでモバイルアプリの無料体験 3 MongoDB社がMongoDB Realmという「最も現代的な(モバイルアプリ開発のクラウドプラットフォーム」を提供して いることをご存知でしょうか。
  3. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved モバイルとは 4 モバイルは、鉄道や空港のようにわれわれの生活を支えるインプラとなっています。

    2019年における世代の「スマートフォン保有」は84.4%で8割を超えています(総務省)。 • モバイル通信 • モバイルデバイス • モバイルインターネット • モバイルブロードバンド(LTE/4G/5G) • スマートフォン/タブレット/WiFi • 通信システムが無線である • 移動しながら利用できる
  4. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved モバイルアプリ開発・運用の課題 6 モバイルアプリ開発・運用では、とても複雑な技術要素を扱っており、数多くの課題を解決する必要があります。

    • マルチプラットフォーム間の互換(iOS&Android) • デバイス側のストレージ、メモリ、バッテリー • データ同期、競合の解決 • パフォーマンス • スケーラビリティ • セキュリティ
  5. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved オンラインでしか使えないモバイルアプリでは不十分 7 モバイルアプリの接続が失われてデータをシームレスに同期できなくなったとき、ユーザーはそのアプリを放棄してしまうと言

    われています。 • わずか1~3秒の速度低下で32%のユーザーが失われる(Google) • 100ミリ秒のレイテンシーが発生するごとに売上の1%のコストが発生する(Amazon) リモートでモバイルアプリを使っている時に突然、接続が途切れた — そんな経験があるのではありませんか。
  6. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved オフラインファーストの思想 8 オフラインファーストとは、当初から「インターネットに接続せずに動作するようにアプリを設計すること」に重点を置いた

    開発原則です。オフラインファーストでは、接続状況や接続速度に関係なく、データは複数のデバイス間で同期し、ア プリを使い続けることができます。 接続が失われたりするような状況のなかでも、データの同期を行い、競合を解決し、パフォーマンスを維持しつつ、セキ ュリティを保ち、アプリが機能し続けるようにするには、どうすればよいのでしょうか。 オフラインファウスト
  7. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved オフラインファーストのメリット 9 •

    アプリのパフォーマンス向上 ローカルデータベースを利用し、サーバとのラウンドトリップを必要としない • バッテリー寿命の延長 アプリが使用するCPU、画面操作、帯域幅が少ないほどバッテリーの使用量は少なくなります • ユーザーによる採用と定着化 パフォーマンスがよく、 バッテリ消費量が少ないためにユーザーに選ばれる傾向があります ユーザーエクスペリエンスが向上し、ユーザーに選ばれるアプリになります。 遅延によるストレス、バッテリの使用が効率的であるほど、ユーザーがアプリを長期間使用し続ける可能性が高くなりま す。
  8. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved オフラインファーストな設計の考慮事項 10 オフラインファーストな設計の基本的な概念は難しくありませんが、これらの概念の実装はとても複雑であり、コストと時

    間がかかります。 • ユーザーはオフラインであると想定する。 • アプリがオフラインになったときにシームレスなUXをユーザーに提供し、重要な機能を引き続き使用できるようにする。 • データをローカルにキャッシュし、アプリの接続が再開した時にそのデータを同期する。
  9. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved 4つのキーワード 11 機能性:アプリの接続が切断されたときに、ユーザーの作業の中断を最小限に抑え、データが失われないようにするために、ワークフローの

    継続性をどのように確保しますか︖ユーザーがオフラインでどのようなことを続けられるようにしますか︖また、検索や大量データのアップロード など、意識的に制限する機能はどれですか︖。オフラインファーストへの転換を始める前に検討すべきの4つのキーワード UI/UX:アプリがオフラインのときに何が機能し、何が機能しないをユーザーにどのように知らせますか︖ユーザーが接続を再開した時 にデータの競合があった場合、それらの競合を解決するためのオプションをユーザーに提供しますか︖その場合はどのように提供しますか︖ コード:アプリを安全に更新できるのはいつですか︖ユーザー認証をどのように処理しますか︖ユーザーを認証したままにしておき、接続再 開時に再認証しますか︖アプリからログアウトさせますか︖ データとデータ同期:これはオフラインファーストで最も難しい問題です。データ同期をどのように処理して重要なビジネスデータまたはユー ザーデータが失われないようにしますか︖接続が安定しない場合に複数のプラットフォーム、ユーザー、およびデバイス間でデータビューの一 貫性をどのように保証しますか︖デバイスがオンラインに戻った時に、競合の解決をどのように処理しますか︖アプリでリアルタイムのコラボレ ーション機能を構築する場合は、データ同期を考慮する必要もあります。 オフラインファーストへの転換を始める前に、4つのキーワードを検討すべきです。
  10. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved データとデータ同期の設計方法 12 データとデータ同期は、オフラインファーストなソフトウェア設計で最も重要です。

    • ユーザーがオフラインの時に、どのようにして変更点をローカルに保持させますか? • ユーザーはどのようにそのデータにアクセスしますか︖ • データのセキュリティをどのように保障しますか︖ • ユーザーがオンラインに戻った時に、データ変更をどのように同期を取りますか? • データに競合が発生した場合、どのように解決しますか︖ ソリューション全体を自前で構築する フレームワークを使用する
  11. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved ソリューション全体を自前で構築する場合 13 これは一般的ではありません。モバイルアプリは想像以上に複雑な仕組みを必要とします。クライアントはデータをキャッ

    シュし、サーバーと頻繁に通信を行い、ネットワーク切断でもデータの一貫性を維持するための方法やトランザクション処 理を組み込み、レイテンシを考慮し、ホスティングするサーバーを用意し、データベースを運用する必要があります。この ようなアプローチは結局、生産性及び致命的な品質の問題に繋がる可能性が高いです。
  12. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved デバイス側のデータストアの問題 14 デバイス上のローカルデータストア作成はバッテリの消費を抑えるためにとても重要です。JSON形式は更新など円滑な

    運用が難しくバッテリの過剰消費を引き起こしやすいです。SQLiteは一般的な選択筋ですがパフォーマンスが問題に なる可能性があります。Core Dataは、SQLiteよりもメモリを消費する一方でパフォーマンスは向上しますが、使用で きるのはiOSのみです。つまり、ローカルキャッシュも既存のRDBのようなローカルデータベースも理想的な解決策で はありません。
  13. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved フレームワークを利用する場合 16 開発者はインフラ的なことを気にせず、ユーザーエクスペリエンスの実現に集中できます。

    Realm Mobile DatabaseとMongoDB Atlasは、モバイルアプリ開発に伴うデータ同期など重要な懸案事項に対 応し、パフォーマンス、スケーラビリティ、セキュリティを確保します。これはクロスプラットフォームソリューショ ン(iOS/Android)であり、同期プロトコルは、iOS、Android、Reactive NativeとNode.jsの使用において同じです。 MongoDB Cloud MongoDB Atlas
  14. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved Realmとは MongoDB社発の最も現代的なモバイルアプリ開発のクラウドプラットフォームです。 17

    接続が途切れたりしても安定的に使えるモバイルアプリが開発・運用できるプラットフォーム がほしいです。 うん、、でも、、MongoDBってデータベースの会社ですよね。 オフラインファーストの開発プラットフォームが必要ですね。それならMongoDB Realmが お薦めです。開発に必要なSDKやサーバー、データベースがすべてセットで使えます。 2016年からAtlasというDBaaSを提供しており、その上でモバイルアプリのクラウドプラット フォームを提供しています。
  15. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved MongoDB Realmの生い立ち •

    2007年、MongoDB設立(ドキュメントDBでNo1) • 2014年、Realm Databaseがリリース(モバイルDB No1) • 2016年、MongoDB社がフールマネジード型のDBaaS(Atlas)を開始 • 2019年、MongoDB社がRealm Mobile Platformを買収、MongoDB Atlasと連携し、モブライルアプ リ開発のクラウドフラットフォーム事業に乗り出す • 2021年4月、Realm Mobile Platformのサーポートを停止し、MongoDB Realmの公式スタート 18 ドキュメントDB No1がモバイルDB No1を買収し、世界最強のモバイルアプリ開発のプラットフォームが誕生しました。
  16. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved MongoDB Realm アーキテクチャ

    19 Realm Client Application Realm Database Object Query Rule Filter Sync Rule Schema Atlas Data Lake(s3) MongoDB Cluster(Atlas) Function/Trigger User/Authentification Realm Sync Wired Protocol Realm Client API MongoDB Chart MongoDB Cloud GraphQL API • GCP • AWS • Azure
  17. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved モバイルアプリ開発の環境 • Realm

    Client SDK – クロスプラットフォーム(iOS/Android) – Objective-C,Swift,Java,Kotlin/.NET Xamarin,Win32,UWP/Node.js,React Native – Realm Database – Realm SDK • Mongodb Realm(バックエンド) – ユーザー&認証(User/Authentication) – スキーマ(Schema) – ルール(Rule) – ファンクション(Function) – トリガ(Trigger) – データ同期(Realm Sync) – MongoDB 20 開発者はPC(Windows or Mas OS)を用意するだけでいいです。
  18. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved Realm DataBase •

    2016初版リリース、さまざまなプロダクトで利用されており、10万人以上の開発者が使用し、 20億回以上ダウンロード実績 • ライセンスは「Apache License 2.0」 • 特徴 – オブジェクトストア – ライブオブジェクト(ゼロコピーアーキテクチャ) – クロスプラットフォームアプリ開発(iOS/Android) • 言語サポート – Objective-C,Swift,Java,Kotlin – C#---Xamarin,Win32,UWP – JavaScript---Node.js、React Native 21 「スマートフォン」「タブレット」「ウェアラブルデバイス」などでの動作に向いているDBMSです。
  19. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved Realm Client SDK

    22 https://docs.mongodb.com/realm/sdk/ クロスプラットフォーム対応、多様な言語のSDKをサポートしています。
  20. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved Realm Studio 23

    • Query objects in the database • View live objects in realtime while running an app • Create, modify, and delete objects • Add classes and properties to the schema • Export the schema as class definitions in C#, Java, JavaScript, Kotlin, Swift, and TypeScript • Save and import changes into a client app or production database 専用のGUIの開発ツール
  21. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved MongoDB Realm •

    User & Authentication • MongoDB Data Access • Realm Sync • GraphQL API • Function • Tirggers • Static Hosting • Application Develoment • Logs 24 モバイルサプリの開発・運用に必要なバックエンドのフレームワークが揃っています。
  22. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved スケール(Scale) 25 MongoDB

    Realmによる開発では、適切なキャパシティ計画が必要です。 • 書き込み:1ドキュメント(レコード格)への同時書き込みは30ユーザーまでサポート ⇒同時書き込みが多いケースでは、複数のドキュメントに書き込む • 読み込み:Realmクライアントからの読み込みはGlobal Realmを通して数万まで拡張 • Realmは、MongoDBクラスターのサイズによってReamアプリで開く変更ストリーム総数を制限 ⇒規模に応じてインスタンスサイズを選定 https://docs.mongodb.com/realm/reference/service-limitations/#change-streams
  23. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved ユーザーと認証(User&Authentication) 26 MongoDB

    Realmは、認証フレームワークが利用できます。 認証ユーザは、メールアドレス又はサードパーティの認証プロバイダーが利用できます
  24. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved MongoDB Cluster(Atlas) 27

    MongoDB Realmは、ドキュメントDB No1のMongoDBクラスター(Atals)と統合されています。
  25. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved データモデル構成(Data Modeling) 28

    JSON形式のスキーマを定義し、モバイ ルアプリとクラウドのRealmとの間で スキーマの整合性を保つことにより、 データの正確性を確保します。 MongoDB Realmは、モバイル用の 「Realmオブジェクトモデル」とAtlas 用の「Realmスキーマ」の2つのデータ モデルを使用します。 既にAtlasにデータが存在する場合は、 それをモバイル用のRealmオブジェク トモデルに変換できます。 Atlasにデータが存在しない場合、又は モバイルファーストのアプローチで開 発している場合は、Realmモバイルク ライアントからデータモデルを作るこ とができます。
  26. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved クエリルール(Query Rule) 29

    クエリを発行したユーザーが特定のドキュメントに対して「実行できること」を定義します。 これには、読み取りと書き込みが可能なフィールドや、ドキュメント全体を挿入または削除できるかどうかが含まれます。 { "name": "default", "apply_when": {}, "insert": true, "delete": true, "search": true, "fields": {}, "additional_fields": {} }
  27. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved Realm Sync 30

    クライアントのRealm Mobile DatabaseとバックエンドのMongoDB Atlas間で双方向にデータを同期します。 • 接続が切れているときは変更点をローカルのRealm Databaseに書き込みます。 • 接続が回復するとバックエンドのMongoDBと同期を取ります(競合を解決し、トランザクションを保障)。 Sync Rule ユーザに基づく、パーティション内のデータ に対するRead/Writeのパーミッション
  28. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved 同期ルール(Sync Rule) 32

    MongoDB Realmは、同期されたクラスターへのすべてのリクエストにデータアクセスルールを適用します。同期ル ールは、JSON形式で同期されたパーティション内のデータを表示および変更する特定のユーザーの機能を指定します。 • 同期ルールは、ユーザーに基づいて動的に適用されます。 • 同期ルールは、パーティション内のすべてのオブジェクトに等しく適用されます。
  29. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved 競合解決のルール 33 2人以上のユーザーが同時に同じデータに変更を加えると競合が発生しますが、MongoDB

    Realmは競合解決の ルールに従って、すべてのクライアントがデータの一貫性を保つことを保証します。 Delete always win 一方がオブジェクトを削除すると、もう一方が後でオブジェクトに変更を加えた場合でも、オブジェクトは常に削除され たままになります。 Last Update Wins 両側が同じプロパティを更新する場合、レルムは最新の更新値を保持します。 Insert in lists are ordered by time 2つのアイテムを同じ位置に挿入すると、最初に挿入されたアイテムが他のアイテムよりも先に挿入されます。これは、 両側がリストの最後にアイテムを追加する場合、挿入時間の順に両方のアイテムが含まれることを意味します。 Primary keys designate object indetity 両側が同じ主キーを持つ同じクラスのオブジェクトを作成する場合、それらは同じオブジェクトのインスタンスとして扱わ れます。
  30. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved 同期プロトコール(Sync Protocol) 34

    MongoDB Realmは同期プロトコルを使用して、それぞれが独自のローカルRealmファイルを維持している複数の クライアント間でデータ変更をリアルタイムで効率的に同期します。 クライアントA クライアントB Realmサーバー 変更 変更 変更共有 変更共有
  31. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved MongoDB Realmが選ばれる理由 •

    GCP Firebase • Amazon AWS Front-End Web & Mobile services • Azure Azure Mobile Apps 37 MongoDB Realmが選ばれる理由は、ドキュメントDB No1(MongoDB)とモバイルDB No1(Realm Database)のコラボが生む最も現代的で先進的なMobileアプリ開発のプラットフォームだからです。
  32. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved セキュリティ • SOC-2認定取得済(米国公認会計士協会の認証基準)

    • HIPAA準拠(The Health Insurance Portability and Accountability Act:米国における医療保険の相互 運用性と説明責任に関する法令) • プロジェクトロール • ネットワークセキュリティ(TLS1.2) • ファイアウォール(IP Address制限) https://docs.mongodb.com/realm-sdks/mongodb/RealmPublicIPs.json • メールアドレス又はサードパーティの認証プロバイダー • ルール(クエリルール、シンクルール) • データ暗号化(Realm Database) 38 MongoDB Cloudのセキュリティをベースに、さらに拡張しています。
  33. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved 導入実績 39 obileデータベースのデータとバックエンド側は、

    MongoDB Realm Syncによって自動的に同期を取る。 もはや、アプリケーションでバックエンドエンド側 のデータベースに書き組むようなコーディングなど 要らない。 フォーチュン500社を含む35,000以上のアプリが利用しています。
  34. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved 価格 40 MongoDB

    Atlas インスタンス+ストレージ+バックアップ+データ転送+サポート https://www.mongodb.com/pricing Realm Compute(Request) Price: $10.00 / 500 runtime hours (~$0.000000005 / ms) Realm Sync Price: $0.08 / 1,000,000 runtime minutes ($0.00000008 / min) Realm Data Transfer Price: $0.12 per GB https://docs.mongodb.com/realm/billing/ 基本的に使用量に基いた従量課金(月間)です。
  35. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved モバイルアプリ開発の無料体験① 41 Atlasアカウント

    作成 MongoDB クラスター作成 Realm プロジェクト作成 APIキー取得 Realm CLI インストール バックエンドアプリ のインストール (Realm CLI) Visual Studio インストール Xamarinアプリ のセットアップ デバック& 実行 https://docs.mongodb.com/realm/tutorial/realm-app/ https://docs.mongodb.com/realm/tutorial/dotnet/ 初心者でも簡単にモバイルアプリ開発の体験が可能です。
  36. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved モバイルアプリ開発の無料体験② ①MongoDB Cloudのアカウントを取得する。

    • クレジットカードは必要ありません 42 MongoDB Cloud(Atlas)のアカウントを取得してします。 https://www.mongodb.com/cloud/atlas/register
  37. Copyright ⓒ2021 CREATIONLINE, INC. All Rights Reserved モバイルアプリ開発の無料体験⑤ 45 チュートリアルを見ながら試行錯誤、、

    MongoDB Cloud フロントエンドの開発経験が殆どない「筆者」がRealmのチュート リアルでモバイルアプリを作りました。 Windows10でVisual Stuidoのエミュレーターで仮想の Android端末が浮かび上がっています。 今回の言語は.NET Xamarinです。