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

# 環境変数

> CoreWeave がすべてのサンドボックス内に設定する環境変数と、その上書き方法。

<Note>
  `auth` を省略している例では、`CWSANDBOX_API_KEY` に設定された CoreWeave API アクセストークンを使用します。Forge APIキーで認証するには、[はじめに](/ja/products/sandboxes/get-started#forge-api-key)の手順に従い、取得した `AuthHeaders` を操作に渡してください。
</Note>

このページでは、CoreWeave が各サンドボックス内に設定する環境変数と、サンドボックス内で実行されるコードからそれらを読み取る方法を説明します。プラットフォームは、ユーザーが指定する変数に加えて、これらの変数を作成時に設定し、コードが自身の実行環境を識別できるようにします。

独自の変数を設定するには、[独自の環境変数を設定する](/ja/products/sandboxes/client/guides/environment-variables)を参照してください。

<h2 id="variables">
  変数
</h2>

プラットフォームは、すべてのサンドボックスで次の変数を設定します。

| 変数 | 値 | 説明 |
| - | - | - |
| `CW_SANDBOX_ID` | UUID | サンドボックス自身の ID です。サンドボックスの作成時に返される ID、およびサンドボックスを操作する API や SDK の呼び出しで使用する ID と同一です。 |

プラットフォームは、使用する SDK や API のバージョンに関係なく、これらの変数を設定します。

<Note>
  サンドボックス ID を取得するためにホスト名を解析しないでください。サンドボックスのホスト名はサンドボックス ID で始まりますが、基盤となる Pod が再起動すると変わる、自動生成された接尾辞が含まれています。代わりに `CW_SANDBOX_ID` を使用してください。
</Note>

<h2 id="read-a-variable">
  変数を読み取る
</h2>

プラットフォーム変数は、各コンテナーのメインプロセス、そのプロセスが起動するすべてのプロセス、および `exec` やストリーミング実行で起動されるプロセスで使用できます。ただし、子プロセスを起動する前に環境をクリアするプログラムは例外です。

<Tabs>
  <Tab title="Python">
    ```python theme={"system"}
    import os

    sandbox_id = os.environ["CW_SANDBOX_ID"]
    print(f"running in sandbox {sandbox_id}")
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={"system"}
    const sandboxId = process.env.CW_SANDBOX_ID;

    console.log(`running in sandbox ${sandboxId}`);
    ```
  </Tab>

  <Tab title="Shell">
    ```bash theme={"system"}
    echo "$CW_SANDBOX_ID"
    ```
  </Tab>
</Tabs>

一般的な用途は、サンドボックス内から出力されるログやメトリクスにタグを付け、後から記録をその生成元のサンドボックスと関連付けられるようにすることです。

<h2 id="override-a-variable">
  変数を上書きする
</h2>

プラットフォーム変数はデフォルトであり、予約名ではありません。サンドボックスに同じ名の変数を設定すると、サンドボックスはその値を使用し、プラットフォームはデフォルトを適用しません。

`[YOUR-VALUE]` を、サンドボックスから返したい値に置き換えてください。

<Tabs>
  <Tab title="Python">
    ```python theme={"system"}
    from cwsandbox import Sandbox

    sandbox = Sandbox.run(
        container_image="ubuntu:22.04",
        environment_variables={"CW_SANDBOX_ID": "[YOUR-VALUE]"},
    )
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={"system"}
    import { createSandboxClientFromEnv } from "@coreweave/cwsandbox/node";

    const client = createSandboxClientFromEnv();

    const sandbox = await client.create({
      containerImage: "ubuntu:22.04",
      environmentVariables: { CW_SANDBOX_ID: "[YOUR-VALUE]" },
    });
    ```
  </Tab>
</Tabs>

上書きには次のルールが適用されます。

* **空文字列を含む、すべての値が有効です。** `CW_SANDBOX_ID` を `""` に設定すると、変数は存在しますが、値は空になります。プラットフォームは空の値を未設定とは見なさず、置き換えません。

* **ポリシーはプラットフォーム変数を上書きできません。** この名はオペレーターの設定では予約されているため、クラスターの[ポリシー](/ja/products/sandboxes/profiles/configure)が、設定した値を暗黙的に置き換えることはできません。

* **シークレットも上書きとして扱われます。** 同じ変数名に割り当てられた[シークレット](/ja/products/sandboxes/secrets)は、直接指定した値と同様に、プラットフォームのデフォルトの適用を抑制します。

<h2 id="metadata-only-not-identity">
  メタデータであり、アイデンティティではありません
</h2>

`CW_SANDBOX_ID` は参考情報としてのメタデータです。上書きできるため、サンドボックス内のコードは任意の値を報告できます。

<Warning>
  `CW_SANDBOX_ID` を認証、認可、または監査での帰属先の特定に使用しないでください。サンドボックスを作成した際に、ご自身のシステムがサンドボックス ID を記録しています。サンドボックス内から報告された値ではなく、その ID を信頼できるソースとして扱ってください。
</Warning>

<h2 id="sandboxes-with-more-than-one-container">
  複数のコンテナーを使用するサンドボックス
</h2>

各コンテナーは、サンドボックスの最初のコンテナーに設定された値を受け取ります。ただし、そのコンテナーが `CW_SANDBOX_ID` を自身で設定する場合を除きます。明示的な値は、それを設定したコンテナーに対して優先されます。

これには 2 つの結果があります：

* 最初のコンテナーで変数を上書きする場合、何も設定していない他のすべてのコンテナーはその上書きを受け取ります。
* 最初のコンテナーでそれを空文字列に上書きする場合、他のコンテナーはその変数を一切受け取りません。

<h2 id="behavior-across-the-sandbox-lifecycle">
  サンドボックスのライフサイクル全体にわたる動作
</h2>

`CW_SANDBOX_ID` は、サンドボックスの有効期間中、次のように動作します。

* **値はサンドボックスの存続中は固定されます。** プラットフォームが作成時に割り当て、基盤となる Pod が再起動しても変更されません。
* **リストアされたサンドボックスは新しいサンドボックスです。** ファイルシステムスナップショットからリストアすると、新しい ID を持つサンドボックスが作成され、`CW_SANDBOX_ID` にその新しい値が設定されます。アプリケーションがスナップショットボリュームに書き込んだ以前の ID は、独自のデータとして保持され、更新されません。
