メインコンテンツへスキップ

フォルダーの同期

ローカルディレクトリと DID Space 内のリモートディレクトリを同期させることは、静的ウェブサイトのホスティング、データバックアップ、共同アセット管理などのアプリケーションで一般的な要件です。DID Space Client SDK は、SyncFolderPushCommand と Sync

ローカルディレクトリと DID Space 内のリモートディレクトリを同期させることは、静的ウェブサイトのホスティング、データバックアップ、共同アセット管理などのアプリケーションで一般的な要件です。DID Space Client SDK は、SyncFolderPushCommandSyncFolderPullCommand という2つの強力な高レベルコマンドでこのプロセスを簡素化します。

このガイドでは、これらのコマンドの使用方法について、実践的な例を交えて説明します。利用可能なすべてのパラメーターとオプションの詳細については、SyncFolderPushCommand および SyncFolderPullCommand API リファレンスを参照してください。

同期の仕組み

同期プロセスの核心は、どのファイルを転送する必要があるかをインテリジェントに判断することです。同期コマンドが実行されると、ソースディレクトリとターゲットディレクトリの比較が行われます。以下のいずれかの条件が満たされた場合、ファイルは同期対象としてマークされます:

  • ファイルがソースに存在するが、ターゲットに存在しない。
  • ファイルが両方に存在するが、サイズが異なる。
  • ファイルが両方に同じサイズで存在するが、ソースファイルの変更時刻の方が新しい。

デフォルトでは、同期コマンドはファイルの追加または更新のみを行います。strictSync モードを有効にすると、ソースに存在しないターゲットディレクトリ内のファイルも削除し、完全なミラーリングを保証します。

ローカルフォルダーを DID Space にプッシュする

ローカルディレクトリのコンテンツを DID Space 内のリモートディレクトリにアップロードまたは更新したい場合は、SyncFolderPushCommand を使用します。これは、静的ウェブサイトのデプロイやローカルファイルのバックアップに最適です。

ステップ1:クライアントとコマンドの初期化

まず、SpaceClient をセットアップし、SyncFolderPushCommand をインポートします。

クライアントの初期化

typescript
import { SpaceClient, SyncFolderPushCommand } from '@blocklet/did-space-js';
import getWallet from '@blocklet/sdk/lib/wallet';

// ウォレットとクライアントを初期化します
const wallet = getWallet();
const client = new SpaceClient({
  endpoint: 'https://www.didspaces.com/app/api/space/...', // あなたの Space エンドポイントを使用してください
  wallet,
});

ステップ2:コマンドの入力を定義する

フォルダーをプッシュするには、ローカルの source パスとリモートの target パスを指定する必要があります。

  • source string (required) — アップロードしたいローカルディレクトリへのパス。パスの末尾に「/」を付けることをお勧めします。
  • target string (required) — DID Space 内の宛先パス。これも末尾に「/」を付ける必要があります。
  • strictSync boolean (default: false) — true の場合、ローカルソースに存在しないリモート上のファイルは削除されます。
  • onProgress function — アップロードの進捗状況を監視するためのオプションのコールバック関数。

ステップ3:プッシュコマンドの実行

次に、入力を使用してコマンドのインスタンスを作成し、クライアントを使って送信します。

フォルダーをプッシュする

typescript
async function pushMyWebsite() {
  const command = new SyncFolderPushCommand({
    source: './build/', // ローカルのビルドフォルダーへのパス
    target: '/public/my-website/', // DID Space 内の宛先
    strictSync: true, // ローカルフォルダーを完全にミラーリングします
    onProgress: ({ completed, total }) => {
      const percentage = total > 0 ? (completed / total) * 100 : 0;
      console.log(`アップロード進捗: ${percentage.toFixed(2)}%`);
    },
  });

  const output = await client.send(command);

  if (output.statusCode === 200) {
    console.log('プッシュに成功しました!');
    console.log(`同期された合計ファイル数: ${output.data.count}`);
    console.log(`合計サイズ: ${output.data.size} バイト`);
    console.log(`所要時間: ${output.data.duration} 秒`);
  } else {
    console.error('プッシュに失敗しました:', output.statusMessage);
  }
}

pushMyWebsite();

この例では、ローカルの ./build/ ディレクトリのコンテンツを Space 内の /public/my-website/ にアップロードします。strictSynctrue であるため、リモートディレクトリにあって ./build/ にないファイルはすべて削除されます。

DID Space からリモートフォルダーをプルする

DID Space のリモートディレクトリのコンテンツをローカルファイルシステムにダウンロードするには、SyncFolderPullCommand を使用します。これは、バックアップの復元や共有プロジェクトの取得に便利です。

ステップ1:コマンドの入力を定義する

プルの入力はプッシュと似ていますが、sourcetarget の役割が逆になります。

  • source string (required) — ダウンロードしたい DID Space 内のリモートディレクトリへのパス。
  • target string (required) — ファイルが保存されるローカルの宛先パス。
  • strictSync boolean (default: false) — true の場合、コマンドはリモートに存在しないローカルファイルを識別します。ただし、安全のため、プルコマンドは現在、削除を実行しません。

ステップ2:プルコマンドの実行

SyncFolderPullCommand インスタンスを作成して送信します。

フォルダーをプルする

typescript
import { SpaceClient, SyncFolderPullCommand } from '@blocklet/did-space-js';
import getWallet from '@blocklet/sdk/lib/wallet';

const wallet = getWallet();
const client = new SpaceClient({
  endpoint: 'https://www.didspaces.com/app/api/space/...',
  wallet,
});

async function pullMyBackup() {
  const command = new SyncFolderPullCommand({
    source: '/backups/latest/', // DID Space 内のパス
    target: './restored-backup/', // ローカルの宛先フォルダー
    onProgress: ({ completed, total }) => {
      const percentage = total > 0 ? (completed / total) * 100 : 0;
      console.log(`ダウンロード進捗: ${percentage.toFixed(2)}%`);
    },
  });

  const output = await client.send(command);

  if (output.statusCode === 200) {
    console.log('プルに成功しました!');
    console.log(`同期された合計ファイル数: ${output.data.count}`);
    console.log(`合計サイズ: ${output.data.size} バイト`);
  } else {
    console.error('プルに失敗しました:', output.statusMessage);
  }
}

pullMyBackup();

このスクリプトは、Space 内の /backups/latest/ からローカルの ./restored-backup/ ディレクトリにファイルをダウンロードします。strictSync を有効にしても、このコマンドはローカルディレクトリに存在する可能性のある余分なファイルを削除しないことに注意してください。

ベストプラクティス

  • ファイルの整合性: push 操作中、ファイルはアップロード前にまず一時ディレクトリにコピーされます。これにより、同期プロセス中にファイルがローカルで変更された場合でも、一貫性のあるバージョンがアップロードされ、データ破損が防止されます。
  • パフォーマンス: いずれのコマンドでも concurrency パラメーターを調整して、同時に転送されるファイル数を制御できます。デフォルトは 4 です。この値を増やすと高速なネットワークでの速度が向上する可能性があり、減らすと低速な接続での負荷を軽減できます。
  • フィルタリング: 両方のコマンドは、入力で filter 関数を受け入れます。これを使用して、名前やパスなどのプロパティに基づいて、同期プロセスからファイルを選択的に含めたり除外したりできます。

次のステップ

これで、ローカルマシンと DID Space の間でフォルダーを同期する方法について、確かな理解が得られました。アプリケーションをさらに強化するために、フォルダーの外観を管理する方法を調べてみるとよいでしょう。