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

# 環境変数

> CWSandbox インスタンスで環境変数を設定および管理する方法 (セッションレベルのデフォルトを含む)

以下の例では、`CWSANDBOX_API_KEY` に設定した CoreWeave API アクセストークンを使用します。Forge APIキーによる認証については、[はじめに](/ja/products/sandboxes/get-started)を参照してください。CKS の要件については、[配置モード](/ja/products/sandboxes/placement)を参照してください。

このガイドでは、CWSandbox インスタンスで環境変数を設定および管理する方法について説明します。環境変数を使用すると、ログレベルや project 識別子など、機密性のない設定値をサンドボックスに渡すことができます。環境変数は、個々のサンドボックスに設定するほか、セッション内の複数のサンドボックスで共有したり、適用範囲をリモート関数に限定したりすることもできます。

<Warning>
  APIキー、パスワード、その他の認証情報を `environment_variables` にハードコードしたり、ログに出力したりしないでください。認証情報をそのまま渡すのではなく、シークレット参照を使用することを推奨します。Forge のシークレット注入を利用できない場合でも、機密性の高い値はシークレットマネージャーで管理してください。このガイダンスは、サーバーレスサンドボックスと CKS サンドボックスの両方に適用されます。
</Warning>

Forge で認証されたサーバーレスサンドボックスでは、[Forge シークレット](/ja/products/sandboxes/secrets)を使用してください。サーバーがこれらの参照を解決し、値を環境変数として注入します。Forge のシークレット注入は、CKS に配置されたサンドボックスや、CoreWeave API アクセストークンで認証されたサンドボックスでは利用できません。CKS の場合は、組織で承認されている方法でワークロードにシークレットを渡してください。

<h2 id="basic-usage">
  基本的な使い方
</h2>

サンドボックス内で実行されるプロセスで値を使用できるようにするには、`Sandbox.run` に `environment_variables` 辞書を渡します。

```python theme={"system"}
from cwsandbox import Sandbox

with Sandbox.run(
    environment_variables={"LOG_LEVEL": "info"},
) as sandbox:
    result = sandbox.exec([
        "python",
        "-c",
        "import os; print(os.environ.get('LOG_LEVEL'));",
    ]).result()
    print(result.stdout.strip())  # "info"
```

<h2 id="session-level-defaults">
  セッションレベルのデフォルト
</h2>

複数のサンドボックスで同じ変数を使う場合は、サンドボックスごとに繰り返し定義する代わりに、セッションで一度だけ定義できます。個々のサンドボックスでは、セッションのデフォルトを上書きしたり、独自の変数を追加したりできます。

```python theme={"system"}
from cwsandbox import SandboxDefaults, Session

defaults = SandboxDefaults(
    environment_variables={
        "PROJECT_ID": "my-project",
        "LOG_LEVEL": "info",
    },
)

with Session(defaults) as session:
    with session.sandbox() as sb1:
        result = sb1.exec([
            "python",
            "-c",
            "import os; print(os.environ.get('LOG_LEVEL'));",
        ]).result()
        print(result.stdout.strip())  # "info"

    # LOG_LEVEL を上書きし、新しい変数を追加
    with session.sandbox(
        environment_variables={
            "LOG_LEVEL": "debug",  # セッションのデフォルトを上書き
            "MODEL_NAME": "gpt-4",  # 新しい変数を追加
        }
    ) as sb2:
        result = sb2.exec([
            "python",
            "-c",
            "import os; "
            "print(os.environ.get('PROJECT_ID')); "
            "print(os.environ.get('LOG_LEVEL')); "
            "print(os.environ.get('MODEL_NAME'));",
        ]).result()
        lines = result.stdout.strip().split("\n")
        print(lines)  # ["my-project", "debug", "gpt-4"]
```

<h2 id="remote-functions">
  リモート関数
</h2>

リモート関数はセッションの環境変数を継承するほか、`@session.function` デコレーターで独自の環境変数を宣言することもできます。SDK は呼び出し時に、関数レベルの変数をセッションのデフォルトとマージします。

```python theme={"system"}
with Session(defaults) as session:
    @session.function(environment_variables={"MODEL_VERSION": "v2.0"})
    def process(task_id: int) -> dict:
        import os
        return {
            "task": task_id,
            "project": os.environ.get("PROJECT_ID"),  # セッションのデフォルトから取得
            "version": os.environ.get("MODEL_VERSION"),  # 関数デコレーターから取得
        }

    result = process.remote(42).result()
    print(result)  # {"task": 42, "project": "my-project", "version": "v2.0"}
```

<Warning>
  環境変数は参照渡しされます。次の例に示すように、デコレート後に辞書へ加えた変更は、以降の関数の Call に反映されます。
</Warning>

```python theme={"system"}
env_vars = {"MODEL_VERSION": "v2.0"}

@session.function(environment_variables=env_vars)
def process(task_id: int) -> dict:
    import os
    return {"version": os.environ.get("MODEL_VERSION")}

result = process.remote(42).result()  # バージョン: "v2.0"

env_vars["MODEL_VERSION"] = "v3.0"  # 辞書を変更する

result = process.remote(42).result()  # バージョン: "v3.0"（変更が反映される）
```
