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

# 概念

## 仕組み

大まかに言うと、テンプレートのビルドは次のように動作します。

1. 標準ベースイメージ、既存のイメージ、Dockerfile、または別のテンプレートなどのテンプレートソースを解決します。
2. `runCmd`、`copy`、`makeDir`、`setEnvs`、およびパッケージインストール用ヘルパーなどのテンプレート命令を適用します。
3. 設定されている場合は、テンプレートの開始コマンドを起動します。
4. [準備完了コマンド](/docs/ja/guides/sandbox-template-authoring#start--ready-commands)が成功するまで待ちます。
5. 準備済みの環境を再利用可能なテンプレートとして保存します。

ビルドにより、`templateId` / `template_id` と `buildId` / `build_id` が生成されます。後で `Sandbox.create(...)` でテンプレート ID を使用します。

## ユーザーと作業ディレクトリ

テンプレートでは、後続のビルドステップおよび最終環境で使用されるデフォルトの Linux ユーザーと作業ディレクトリを設定できます。

ビルドコマンドを特定のユーザーとして実行する必要がある場合は、`setUser(...)` / `set_user(...)` を使用します。後続のコマンドやコピーされたファイルを特定のディレクトリからの相対パスとして解決したい場合は、`setWorkdir(...)` / `set_workdir(...)` を使用します。

<CodeGroup>
  ```ts JavaScript & TypeScript icon="js" theme={"system"}
  import { Template } from "novita-sandbox"

  const template = Template()
    .fromUbuntuImage("24.04")
    .setUser("root")
    .setWorkdir("/app")
    .runCmd("apt-get update && apt-get install -y curl")
    .copy("package.json", "/app/package.json")
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.core import Template

  template = (
      Template()
      .from_ubuntu_image("24.04")
      .set_user("root")
      .set_workdir("/app")
      .run_cmd("apt-get update && apt-get install -y curl")
      .copy("package.json", "/app/package.json")
  )
  ```
</CodeGroup>

これらの値を設定しない場合、sandbox は選択されたベースイメージのデフォルトを使用します。

## キャッシュ

テンプレートのビルドでは、以前に完了したレイヤーがキャッシュされるため、繰り返しビルドする際にすべての命令を再実行する必要はありません。

通常、これは高速な反復作業に適しています。完全に新しいビルドが必要な場合は、`skipCache: true` / `skip_cache=True` でビルド全体のキャッシュを無効にするか、`skipCache()` / `skip_cache()` でテンプレートチェーンにマークを付けます。

<CodeGroup>
  ```ts JavaScript & TypeScript icon="js" theme={"system"}
  import { Template } from "novita-sandbox"

  const template = Template()
    .fromPythonImage("3.12")
    .skipCache()
    .runCmd("pip install -U pip")

  const build = await Template.build(template, "my-template-no-cache", {
    skipCache: true,
  })
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.core import Template

  template = (
      Template()
      .from_python_image("3.12")
      .skip_cache()
      .run_cmd("pip install -U pip")
  )

  build = Template.build(
      template,
      "my-template-no-cache",
      skip_cache=True,
  )
  ```
</CodeGroup>

キャッシュバスティングは意図的に使用してください。ビルドが遅くなるため、通常は依存関係の更新、デバッグ、またはテンプレート定義だけからは見えない入力の変更に限定して使用するべきです。
