Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Realm の構成、オープン、クローズド - Node.js SDK

項目一覧

  • Realm を開く
  • スキーマを提供せずに Realm を開く
  • インメモリ Realm のオープン
  • データのコピーと新しい Realm のオープン
  • Realm を閉じる
  • HTTP proxyの使用
  • 要件
  • 制限
  • fetch-with-proxy のインストール
  • HTTPS_PROXY を設定し、スクリプトを実行

ローカル(同期されていない)Realm を開くには、 Realm.Configurationオブジェクトを非同期メソッドRealm.open() に渡します。

注意

デフォルトの Realm パスへのアクセス

Configurationオブジェクトで pathプロパティを指定しない場合、SDK はデフォルト パスに Realm を作成します。 Realm.defaultPathグローバル プロパティを使用して、デフォルトの Realm パスにアクセスして変更できます。

// Open a local realm file with a predefined Car object model
const realm = await Realm.open({
schema: [Car],
});

デバイスに Realm を作成した後、同じ Realm にアクセスするときにnew Realm()を呼び出してスキーマを省略できます。 SDK は、 Realm.defaultPathにある既存の Realm ファイルから Realm のスキーマを派生します。

スキーマを提供せずに Realm にアクセスする方法は、ローカル Realm でのみ機能します。 同期された Realm を使用する場合は、常にスキーマを渡す必要があります。

// Open the Realm with a schema
const realm = new Realm({ schema: [Car] });
realm.close();
// Reopen it without a schema
const reopenedRealm = new Realm();

ファイルに書き込まれずにメモリ内で完全に実行される Realm を作成するには、 Realm.ConfigurationオブジェクトにinMemory: trueを追加します。

const realm = await Realm.open({
inMemory: true,
schema: [Car],
});

注意

メモリが不足している場合、インメモリ Realm はディスク領域を使用することがありますが、Realm を閉じると、インメモリ Realm によって作成されたファイルが削除されます。

バージョン 10.14.0 の新機能

既存の Realm から異なる構成オプションを持つ新しい Realm にデータをコピーするには、新しい構成をRealm.writeCopyTo() 使用して複数のドキュメントを挿入できます。

新しいRealmの構成で、 pathを指定する必要があります。

コピーした Realm をすでに存在する Realm ファイルに書込むと、データはオブジェクトごとに書込まれます。 特定のプライマリキーのオブジェクトがすでに存在する場合は、コピー操作により、 オブジェクトが置き換えられます。 コピー操作を成功させるには、コピーする Realm と書き込み先の Realm のスキーマと互換性がある必要があります。 両方の構成のスキーマ内のオブジェクトのみがコピーされます。

構成の変更には、 SyncConfigurationの変更を含めることができます。

  • ローカルRealm から同期されたRealm

  • 同期された Realm からローカル Realm への同期

  • 同期された Realm から別のユーザーの同期された Realm

注意

パーティションベースの同期のみ

このメソッドは、非同期 Realm と パーティションベースの同期 との間の変換のみをサポートします。 アプリで Flexible Sync を使用する場合は、一方の Realm 内のオブジェクトを手動で反復処理し、もう一方の Realm にコピーする必要があります。

注意

同じタイプの同期のみ

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

構成の変更には、 ConfigurationencryptionKeyプロパティに対する変更も含めることができます。

  • 暗号化されたRealmから暗号化されていないRealmへ

  • 暗号化されていない Realm から暗号化された Realm へ

ローカル Realm の同期された Realm への変換

const localConfig = {
schema: [Car],
path: "localOnly.realm",
};
const localRealm = await Realm.open(localConfig);
const syncedConfig = {
schema: [Car],
path: "copyLocalToSynced.realm",
sync: {
user: app.currentUser,
partitionValue: "myPartition",
},
};
localRealm.writeCopyTo(syncedConfig);
const syncedRealm = await Realm.open(syncedConfig);
const localConfig: Realm.Configuration = {
schema: [Car],
path: "localOnly.realm",
};
const localRealm = await Realm.open(localConfig);
const syncedConfig: Realm.Configuration = {
schema: [Car],
path: "copyLocalToSynced.realm",
sync: {
user: app.currentUser!,
partitionValue: "myPartition",
},
};
localRealm.writeCopyTo(syncedConfig);
const syncedRealm = await Realm.open(syncedConfig);

構成の変更を組み合わせることもできます。 たとえば、ローカル暗号化された Realm を同期された暗号化されていない Realm として開くことも、暗号化されていない同期された Realm を暗号化された同期 Realm として開くこともできます。

同期された暗号化のローカルの暗号化されていない Realm への変換

// Create a secure key.
const encryptionKey = new Int8Array(64);
// ... store key
const syncedEncryptedConfig = {
schema: [Car],
path: "syncedEncrypted.realm",
sync: {
user: app.currentUser,
partitionValue: "myPartition",
},
encryptionKey,
};
const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig);
const localUnencryptedConfig = {
schema: [Car],
path: "copyLocalUnencrypted.realm",
};
syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig);
const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);
// Create a secure key.
const encryptionKey = new Int8Array(64);
// ... store key
const syncedEncryptedConfig: Realm.Configuration = {
schema: [Car],
path: "syncedEncrypted.realm",
sync: {
user: app.currentUser!,
partitionValue: "myPartition",
},
encryptionKey,
};
const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig);
const localUnencryptedConfig: Realm.Configuration = {
schema: [Car],
path: "copyLocalUnencrypted.realm",
};
syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig);
const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);

Tip

以下も参照してください。

メモリリークを避けるために、Realm インスタンスで実行する場合は、 close()メソッドを忘れずに呼び出すことが重要です。

realm.close();

Realm Node.js SDKは、 HTTP proxyの背後で実行される のサポートを制限しています。

  • Realm Node.js SDK v10.3.0以降。

  • npm CLI v6.9.0 以降が必要です。

ネットワーク トランスポート層で使用されるnode-fetchパッケージを切り替えるには、手動の手順が必要です。

Realm Node.js SDKをインストールした後、次のコマンドを実行してネットワーク トランスポート パッケージに別のパッケージをインストールします。

npm install node-fetch@npm:fetch-with-proxy --prefix node_modules/realm-network-transport

Realm JavaScriptのリクエストをすべてHTTP proxy経由でルーティングしながら、任意のスクリプト ファイルを実行できます。

Unix システムでは、 コマンドの前に環境変数の割り当てを先頭に付けることができます。

HTTPS_PROXY=http://127.0.0.1:3128 node index.js

戻る

Realm ファイル