Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Realm ファイルのバンドル - Node SDK

項目一覧

  • Overview
  • バンドル用の Realm ファイルの作成
  • 本番アプリケーションでの Realm ファイルのバンドル
  • バンドルされた Realm ファイルから Realm を開く
  • 同期された Realm のバンドル

Realm は Realm ファイルのバンドルをサポートしています。 Realm ファイルをバンドルする場合、データベースとそのすべてのデータをアプリケーションのダウンロードに含めます。

これにより、ユーザーは初期データセットを使用して初めてアプリケーションを起動できます。 同期済み Realm の場合、バンドルにより、ユーザーが初めてアプリケーションを開くときに長時間かかる初期ダウンロードを回避できます。 代わりに、ユーザーは、バンドル ファイルの生成以降に発生した同期された変更のみをダウンロードする必要があります。

Realm ファイルを作成してアプリケーションにバンドルするには、次の手順に従います。

  1. バンドルするデータを含むRealm ファイルを作成します

  2. バンドルされている Realm ファイルを本番アプリケーションに追加します。

  3. 本番アプリケーションで、バンドルされた アセット ファイル から Realm を開きます。 同期された Realm の場合は、パーティション キーを含める必要があります。

注意

同期された Realm のバンドル

SDK バージョン10.12.0 同期された Realm をバンドルする機能を導入しました。 バージョン10.12.0より前は、 バンドルできるのはローカル Realm のみです。 同期された Realm をバンドルする際の考慮事項と制限事項の詳細については、「同期された Realm のバンドル」セクションを参照してください。

  1. アプリケーションのデータモデルを共有する一時的な Realm アプリを構築します。

  2. Realm を開き、バンドルするデータを追加します。 同期された Realm を使用する場合は、Realm が完全に同期するまで時間を待ちます。

  3. writeCopyTo()メソッドを使用して、Realm を新しいファイルにコピーします。

    const originalPath = path.join(__dirname, "original.realm");
    const originalConfig = {
    schema: [Car],
    path: originalPath,
    };
    const originalRealm = await Realm.open(originalConfig);
    const copyPath = path.join(__dirname, "copy.realm");
    originalRealm.writeCopyTo(copyPath);

    writeCopyTo() は、コピーする前に Realm を可能な限り最小のサイズに自動的に圧縮します。

    注意

    同期された Realm とローカル専用 Realm の違い

    上記の例では、 SyncConfigurationを使用して、 構成 のsyncフィールドに同期された Realm を構成します。 ローカル Realm のコピーを作成するには、構成オブジェクトにsyncフィールドを含めないでください。

  4. バンドルされた Realm ファイルのファイルパスに注目してください。このファイルは、前のステップでwriteCopyTo()に渡された 引数で指定された場所にあります。 次のセクションで説明されているように、本番アプリケーションでバンドルされた Realm を使用するにはこのファイルが必要になります。

    temp_realm_app
    .
    ├── copyOfDefault.realm
    ... rest of files in _temp_ application

初期データを含む Realm のコピーが用意できたら、それを本番アプリケーションにバンドルします。

前のセクションで作成されたバンドルされた Realm ファイルを本番アプリケーションに追加します。

prod_realm_app
.
├── copyOfDefault.realm
... rest of files in _prod_ application

本番アプリケーションに含まれる Realm のコピーが作成できたら、それを使用するためのコードを追加する必要があります。

バンドルされた Realm へのパスをpathフィールドの値として持つ構成を作成します。 その構成をRealm.open() 使用して複数のドキュメントを挿入できます。 これで、作成したRealmでバンドルされたRealmのデータを操作できるようになります。

const copyConfig = {
schema: [Car],
path: "path/to/bundled/file.realm"
};
const copyRealm = await Realm.open(copyConfig);

注意

同じタイプの同期のみ

このメソッドは、別のパーティションベースの同期ユーザーのパーティションベースの同期構成、または別の Flexible Sync ユーザーの Flexible Sync 構成のコピーのみをサポートします。 このメソッドを使用して、 パーティションベースの同期 Realm と Flexible Sync レルムの間で、またはその逆に変換することはできません。

一般的に、同期された Realm のバンドルは、ローカル専用 Realm のバンドルと同じように機能します。 ただし、バンドルできる Realm は完全に同期されたもののみです。 バンドルする前に、Realm がサーバーと完全に同期していることを確認してください。

const config = {
sync: {
user: app.currentUser,
partitionValue: app.currentUser.id,
},
schema: [Car],
};
const realm = await Realm.open(config);
// create many changes
realm.write(() => {
for (let i = 0; i < 25; i++) {
realm.create("Car", {
make: "Toyota",
model: "Prius",
miles: i,
owner: app.currentUser.id,
});
}
});
// ensure synchronize all changes before copy
await realm.syncSession.uploadAllLocalChanges();
await realm.syncSession.downloadAllServerChanges();
// changes are synchronized -- we can copy the realm
realm.writeCopyTo(__dirname + "syncedCopy.realm");

重要

同期された Realm のバンドル

バックエンド アプリケーションでFlexible Syncが使用されている場合、バンドルされている Realm ファイルを初めて開くときにクライアントがリセットされる可能性があります。 これは、クライアント最大オフライン時間が有効になっている場合に発生する可能性があります(クライアントの最大オフライン時間はデフォルトで有効になっています)。 ユーザーが最初に同期する前に、バンドルされた Realm ファイルがクライアントの最大オフライン時間設定で指定された日数を超えて生成された場合、ユーザーはクライアントをリセットします。

クライアントリセットを実行するアプリケーションは、アプリケーション バックエンドから Realm の完全な状態をダウンロードします。 これにより、Realm ファイルをバンドルする利点が得られません。 クライアントのリセットを防ぎ、Realm ファイルのバンドルの利点を維持するには、次の手順に従います。

  • 同期された Realm をバンドルするアプリケーションでは、クライアントの最大オフライン時間を使用しないでください。

  • アプリケーションがクライアントの最大オフライン時間を使用する場合は、アプリケーションのダウンロードに最近同期された Realm ファイルが常に含まれていることを確認してください。 アプリケーション バージョンごとに新しい ファイルを生成し、クライアントの最大オフライン時間数を超えてどのバージョンも最新の状態に維持します。

古いパーティションベースの同期を使用するバンドルされた同期 Realm を開くには、さらに制限があります。 パーティションベースの同期 で構成された Realm の使用の詳細については、「パーティションベースの同期 - Node.js SDK 」を参照してください。

戻る

Realm ファイル サイズの縮小