Realm Cloud ベータ版の発表 – Realm PaaS の提供を開始

Realm Platform の PaaS (Platform as a Service) 版である Realm Cloud が、新たにベータ版として発表されました。Realm Cloud により、オフラインファースト機能やリアルタイムのデータ同期機能をモバイルアプリに簡単に追加できます。Realm 製品は、使いやすさを中心に展開してきました。世界中で何千人もの開発者が iOS と Android アプリのデバイスサイドに Realm を使用しています。Realm Cloud は、それらのアプリを簡単に拡張することを目的としています。

Realm Cloud は現在登録者数に制限を設けたベータ版の初期段階で、公開中のウェイトリストから毎週新しい開発者を招待しています。最初のアクティブな 500 人のベータユーザーは、Realm の “チャーターユーザー” としてディスカウントや Realm のノベルティの対象になります。

今 Realm Cloud が必要な理由

Realm Platform は、オンプレミス製品として今からちょうど 1 年前となる去年の 1 月にリリースされました。昨年は、Realm のようなリアルタイムかつオフラインファーストのデータ プラットフォームに加え、サーバーサイドのチームとオンプレミスの実装を必要とする中規模から大規模の顧客向けに Realm Platform を展開してきました。このような顧客を成功を導く過程でさまざまな需要を理解し、よりスケーラブルで信頼性が高く、開発者に優しいオンプレミス製品のリリースが決定しました。現在の顧客だけでなく、クラウド サービスが適していない顧客の要望に応えるべく、製品の改善が続けられます。

Realm Cloud を開発する際、サーバーサイド実装の手間や商用アプリと大規模企業向けの価格体系が課題となり、Realm Platform に興味を持つたくさんのスタートアップ企業、小規模企業、大規模企業における小さなプロジェクト チームで Realm Platform を採用できずにいました。

Realm Cloud は、それらの課題の突破口となります。Realm Cloud は簡単に使い始めることができ、直感的なユーザー エクスペリエンスと Realm Studio とのシームレスな動作により、たった 10 分程で最初のリアルタイムなアプリを開発、稼働できます。サーバーサイドの実装はなく、サインアップして使用を始めるだけです。現時点ではベータ版のため、価格やパッケージの詳細は未定ですが、使用開始は無償で、月額の価格体系では導入し易い価格設定にし、アプリの必要に応じて拡張できるようにする予定です。(ベータ版は完全に無償です。)

Realm Cloud の仕組みと使用開始の手順

Realm Cloud を計画した当初のゴールは、Realm Platform の操作を自動化する以上の機能を提供することでした。API を含むすべてを簡単に使用できるようにすることが目的でした。そのため、クエリベースの新しい同期メカニズムを追加しました。

Realm Platform の発表以来、API はいたってシンプルでした。URL で同期構成を提供し、User オブジェクトを使用して同期した Realm を開きます。

[code language=”bash”]
// 構成を作成
let syncServerURL = URL(string: "realm://localhost:9080/~/userRealm")!
let config = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: syncServerURL))

// リモートの Realm を開く
let realm = try! Realm(configuration: config)
// この Realm に加えられた変更はすべてのデバイスで同期されます!
[/code]

クライアントのデバイスで Realm に同期されたデータは、Realm Object Server のコピーとともに、常に最新の状態を維持します。データベースを単体で使用した場合の構成を反映することから、この API は Realm 開発者にとって見慣れたものでした。しかし、この単純さには、アプリケーション データを複数のプライベートまたは共有 Realm に分割しなくてはならないという制約がありました。

ほとんどのデータモデルにとってはシンプルでしたが、その他は同じようにマップしませんでした。それもこれで終わりです。

クエリベースの同期により、Realm のクエリ エンジンを使用して、クライアントのデバイスにおいて同期された Realm で、必要なデータのサブセットを定義します。これにより、アプリケーションはユーザーが必要とするデータのみキャッシュし、ユーザー間で共有されたデータをより効率的に処理します。

新しい機能を使用するには、同期構成で有効化するだけです。次に、Realm でクエリを実行し、そのクエリをサブスクライブします。

[code language=”bash”]
// 一部同期された Realm を作成
let config = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: realmURL, partial: true))
let realm = Realm(configuration: config)

// 匿名のサブスクリプションを作成
let adults = realm.objects(Person.self).filter("age >= 18").subscribe()
[/code]

サーバーがクエリを実行し、一致するすべてのオブジェクトを同期します。このクエリは、サブスクリプションの有効期間にわたって維持され、データが変更された場合、サーバーはクエリを再評価し、すべての変更を同期します。Realm はリアクティブなアーキテクチャをもつので、既存の通知 API を使用してアプリを最新の状態に保つことができます。

[code language=”bash”]
// 通常の変更通知
self.notificationToken = adults.observe { (changes: RealmCollectionChange) in
switch changes {
case .initial:
self.tableView.reloadData()
break
case .update(_, let deletions, let insertions, let modifications):
self.tableView.beginUpdates()
self.tableView.insertRows(at: insertions.map { IndexPath(row: $0, section: 0) }, with: .automatic)
self.tableView.deleteRows(at: deletions.map { IndexPath(row: $0, section: 0) }, with: .automatic)
self.tableView.reloadRows(at: modifications.map { IndexPath(row: $0, section: 0) }, with: .automatic)
self.tableView.endUpdates()
break
case .error(let err):
fatalError("\(err)")
break
}
}
[/code]

アプリケーションは、必要な分のクエリを実行できます。同期プロトコルはそれらを正規化し、クライアントを同期するために必要最低限の操作のみ送信します。データがこれ以上必要ない場合、データを取り消し、クエリ用にキャッシュされたデータはデバイスから削除されます。

[code language=”bash”]
// 匿名のサブスクリプションを削除
realm.unsubscribe(adults)

// 名前付きのサブスクリプションを作成
let adults = realm.objects(Person.self).filter("age >= 18").subscribe(named: "Adults")

// 名前付きのサブスクリプションを削除
let didRemove = realm.unsubscribe("Adults")
[/code]

クエリベースの同期を補完するオブジェクトレベルの詳細なサポートを含む情報は、随時更新されます。

Realm Cloud のチャーター開発者になりましょう

Realm Cloud のベータ版は初期段階で登録者数に制限があるため、ウェイトリストにサインアップした順番で開発者を招待しています。Realm Cloud アプリを稼働した最初の 500 ユーザーは、販売開始初年度における 50% 割引の対象になります。さらに、ベータ期間中に実用的なフィードバックをご提供いただいた場合、ステッカー、T シャツ、水筒などのノベルティを差し上げます。

Realm Cloud ベータ版の登録はこちらをご覧ください。

記事参照:
2018 年 1 月 9 日 Realm チーム
© Realm 2014-2018
Announcing Realm Cloud: Realm Platform as a Service Beta

タイトルとURLをコピーしました