> ## Documentation Index
> Fetch the complete documentation index at: https://novita.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# サンドボックススナップショット

スナップショットは、サンドボックスの再利用可能な保存済み状態です。サンドボックスのファイルシステムとメモリ状態をキャプチャするため、後でその時点から新しいサンドボックスを開始できます。

Novita では、この概念をサンドボックスをスナップショットにコミットすることとも説明しています。次のような場合にスナップショットを使用します。

* 依存関係を一度準備し、後続のサンドボックスで再利用する。
* リスクの高い作業やコストの高い作業を実行する前に、正常であることが分かっている状態を保存する。
* 同じキャプチャ済み環境から複数のサンドボックスを開始する。
* 元のサンドボックスが不要になった後も、再利用可能な状態を保持する。

後で同じサンドボックスを継続するには、[Sandbox Persistence](/docs/ja/guides/sandbox-persistence) を使用します。保存済みの時点から新しいサンドボックスを作成するには、スナップショットを使用します。

## 用語

* **元のサンドボックス**: スナップショットの作成に使用されるサンドボックスインスタンス。
* **スナップショット**: 新しいサンドボックスの作成に使用できる保存済み状態。
* **新しいサンドボックス**: スナップショットから作成されたサンドボックス。

## スナップショットを作成する

実行中のサンドボックスからスナップショットを作成するには、JavaScript では `createSnapshot` メソッド、Python では `create_snapshot` メソッドを使用できます。スナップショットの作成中はサンドボックスが一時停止され、操作が完了すると実行を継続できます。

<CodeGroup>
  ```python Python icon="python" theme={"system"}
  from novita_sandbox.code_interpreter import Sandbox

  sandbox = Sandbox.create()
  sandbox.commands.run("echo ready > /tmp/status.txt")

  snapshot = sandbox.create_snapshot()
  print(snapshot.snapshot_id)
  ```

  ```js JavaScript & TypeScript icon="js" theme={"system"}
  import { Sandbox } from 'novita-sandbox/code-interpreter'

  const sandbox = await Sandbox.create()
  await sandbox.commands.run('echo ready > /tmp/status.txt')

  const snapshot = await sandbox.createSnapshot()
  console.log(snapshot.snapshotId)
  ```
</CodeGroup>

サンドボックス ID を使用してスナップショットを作成することもできます。

<CodeGroup>
  ```python Python icon="python" theme={"system"}
  snapshot = Sandbox.create_snapshot(sandbox_id)
  ```

  ```js JavaScript & TypeScript icon="js" theme={"system"}
  const snapshot = await Sandbox.createSnapshot(sandboxId)
  ```
</CodeGroup>

返されたスナップショット ID を保存してください。その後、新しいサンドボックスを作成するときにテンプレートとして使用できます。

## スナップショットからサンドボックスを作成する

キャプチャ済み状態から新しいサンドボックスを開始するには、スナップショット ID を `create` に渡します。

<CodeGroup>
  ```python Python icon="python" theme={"system"}
  snapshot_id = snapshot.snapshot_id

  new_sandbox = Sandbox.create(template=snapshot_id)
  result = new_sandbox.commands.run("cat /tmp/status.txt")
  print(result.stdout)
  ```

  ```js JavaScript & TypeScript icon="js" theme={"system"}
  const snapshotId = snapshot.snapshotId

  const newSandbox = await Sandbox.create(snapshotId)
  const result = await newSandbox.commands.run('cat /tmp/status.txt')
  console.log(result.stdout)
  ```
</CodeGroup>

新しいサンドボックスには、独自のサンドボックス ID とライフサイクルがあります。元のサンドボックスを kill しても、スナップショットは削除されません。

## スナップショットを一覧表示する

サンドボックスまたはアカウントの保存済み状態を見つける必要がある場合は、JavaScript では `listSnapshots` メソッド、Python では `list_snapshots` メソッドを使用できます。

<CodeGroup>
  ```python Python icon="python" theme={"system"}
  # List snapshots created from one sandbox.
  paginator = sandbox.list_snapshots(limit=20)

  while paginator.has_next:
      for snapshot in paginator.next_items():
          print(snapshot.snapshot_id)

  # Or list all snapshots.
  paginator = Sandbox.list_snapshots(limit=20)
  ```

  ```js JavaScript & TypeScript icon="js" theme={"system"}
  // List snapshots created from one sandbox.
  const paginator = sandbox.listSnapshots({ limit: 20 })

  while (paginator.hasNext) {
    const snapshots = await paginator.nextItems()
    for (const snapshot of snapshots) {
      console.log(snapshot.snapshotId)
    }
  }

  // Or list all snapshots.
  const allSnapshots = Sandbox.listSnapshots({ limit: 20 })
  ```
</CodeGroup>

すべてのスナップショットを一覧表示するときに、ソースサンドボックス ID でフィルタリングできます。

<CodeGroup>
  ```python Python icon="python" theme={"system"}
  paginator = Sandbox.list_snapshots(sandbox_id=sandbox_id, limit=20)
  ```

  ```js JavaScript & TypeScript icon="js" theme={"system"}
  const paginator = Sandbox.listSnapshots({ sandboxId, limit: 20 })
  ```
</CodeGroup>

## スナップショットを削除する

不要になったスナップショットを削除するには、JavaScript では `deleteSnapshot` メソッド、Python では `delete_snapshot` メソッドを使用できます。実行中のサンドボックスがそのスナップショットをソースとして使用している間は、スナップショットを削除できない場合があるため、スナップショットを削除する前にそれらのサンドボックスを kill してください。

<CodeGroup>
  ```python Python icon="python" theme={"system"}
  new_sandbox.kill()
  Sandbox.delete_snapshot(snapshot_id)
  ```

  ```js JavaScript & TypeScript icon="js" theme={"system"}
  await newSandbox.kill()
  await Sandbox.deleteSnapshot(snapshotId)
  ```
</CodeGroup>

## スナップショットの推奨事項

* セットアップ手順が正常に完了した後にスナップショットを作成する。
* ジョブで後から再利用する必要がある場合は、スナップショット ID を自分のデータベースに保持する。
* サンドボックスの metadata を使用して、保存済み状態の由来を追跡する。
* 古い保存済み状態を保持し続けないように、未使用のスナップショットを削除する。
* 同じサンドボックスを一時停止して再開するだけでよい場合は、代わりに [Sandbox Persistence](/docs/ja/guides/sandbox-persistence) を使用する。
