> ## 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.

# サンドボックスの永続化

export const SandboxConfigHint = () => {
  if (typeof document === "undefined") {
    return null;
  } else {
    return <Note>Before running the example code in this document, please ensure you have properly configured environment variables. For details, please refer to <a href="/docs/ja/guides/sandbox-your-first-agent-sandbox#configure-environment-variables">Configure Environment Variables</a>.</Note>;
  }
};

サンドボックスの永続化により、サンドボックスを一時停止し、後で同じファイルシステムとメモリ状態で再開できます。これは、長時間実行されるエージェントタスク、インタラクティブアプリ、アイドル期間をまたいで継続する必要があるワークフローにおいて、コンピュートリソースをアクティブなままにせずに状態を保持したい場合に便利です。

サンドボックスが一時停止されると:

* サンドボックス内で作成されたファイルは保持されます。
* 実行中のプロセスや変数を含む、メモリ内の状態が保持されます。
* サンドボックスが再開されるまで、ネットワーク接続は中断されます。
* サンドボックスは、再開して kill するか、一時停止中に kill するまで保存されたままになります。

タイムアウト時の自動一時停止と、アクティビティ発生時の自動再開については、[Auto Pause and Resume](/docs/ja/guides/sandbox-auto-resume) を参照してください。アイドルタイムアウトについては、[Idle timeout](/docs/ja/guides/sandbox-idle-timeout) を参照してください。

<SandboxConfigHint />

<Warning>
  注意:

  * サンドボックスの一時停止には、RAM 1 GB あたり約 4 秒かかります。
  * サンドボックスの再開には、約 1 秒かかります。
  * 一時停止されたサンドボックスのデータは、`kill` メソッドを明示的に呼び出すまで保持されます。
</Warning>

## サンドボックスを一時停止する

現在の状態を保存したい場合は、`pause` メソッドを呼び出すことができます。

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

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

  const sandboxId = sandbox.sandboxId
  await sandbox.pause()

  console.log('Sandbox paused', sandboxId)
  ```

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

  sandbox = Sandbox.create()
  sandbox.commands.run("echo hello > /tmp/message.txt")

  sandbox_id = sandbox.sandbox_id
  sandbox.pause()

  print('Sandbox paused', sandbox_id)
  ```
</CodeGroup>

## サンドボックスを再開する

保存済みのサンドボックス ID を使用して再接続します。サンドボックスが一時停止されている場合は、返す前に `connect` メソッドを使用して再開できます。

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

  const sandbox = await Sandbox.connect(sandboxId)
  const result = await sandbox.commands.run('cat /tmp/message.txt')
  console.log(result.stdout)

  await sandbox.kill()
  ```

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

  sandbox = Sandbox.connect(sandbox_id)
  result = sandbox.commands.run("cat /tmp/message.txt")
  print(result.stdout)

  sandbox.kill()
  ```
</CodeGroup>

再接続時に新しい `timeout` を渡すことができます。

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

  const sandbox = await Sandbox.connect(sandboxId, { timeoutMs: 600_000 })

  await sandbox.kill()
  ```

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

  sandbox = Sandbox.connect(sandbox_id, timeout=600)

  sandbox.kill()
  ```
</CodeGroup>

実行中のサンドボックスでは、新しいタイムアウトが既存のタイムアウトより長い場合にのみ、タイムアウトが更新されます。一時停止中のサンドボックスでは、再開後にタイムアウトが適用されます。

## 一時停止中のサンドボックスを一覧表示する

一時停止中のサンドボックスを見つけるには、状態フィルター付きで `list` メソッドを使用できます。このメソッドの使用方法の詳細については、[List Sandboxes](/docs/ja/guides/sandbox-list) を参照してください。

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

  const paginator = Sandbox.list({
    query: {
      state: ['paused'],
    },
  })

  while (paginator.hasNext) {
    const items = await paginator.nextItems()
    for (const info of items) {
      console.log(info.sandboxId, info.state, info.metadata)
    }
  }
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.code_interpreter import Sandbox
  from novita_sandbox.core import SandboxQuery, SandboxState

  paginator = Sandbox.list(
      query=SandboxQuery(state=[SandboxState.PAUSED])
  )

  while paginator.has_next:
      for info in paginator.next_items():
          print(info.sandbox_id, info.state, info.metadata)
  ```
</CodeGroup>

特定のユーザー、セッション、またはジョブによって作成されたサンドボックスを見つける必要がある場合、メタデータフィルターが便利です。

## 一時停止中のサンドボックスを削除する

一時停止中のサンドボックスは、削除するまで保存されたままになります。不要になった一時停止中のサンドボックスを削除するには、`kill` メソッドを使用できます。

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

  await Sandbox.kill(sandboxId)
  ```

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

  Sandbox.kill(sandbox_id)
  ```
</CodeGroup>

## 永続化とスナップショットの違い

永続化は、同じサンドボックスを後で継続するためのものです。正確なサンドボックス ID と現在の実行状態が重要な場合に使用します。

スナップショットは、再利用可能な保存済み状態を作成するためのものです。同じ取得済みのファイルシステムとメモリ状態から、1 つ以上の新しいサンドボックスを開始したい場合は、スナップショットを使用します。

再利用可能な状態については、[Sandbox Snapshot](/docs/ja/guides/sandbox-snapshot) を参照してください。

## ネットワーク

実行中のサービスがあるサンドボックスを一時停止すると、そのサービスはサンドボックス外部からアクセスできなくなり、接続中のクライアントは切断されます。サンドボックスを再開すると、サービスは再びアクセス可能になりますが、クライアントは再接続する必要があります。
