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

# 環境変数とシークレット

> トークン、API キー、接続文字列を Square Cloud の環境変数としてダッシュボード、CLI、API から保存し、コードで読み取る方法を説明します。

ボットのトークン、API キー、データベースのパスワードは、ソースコードに書かないでください。アプリケーションの環境変数として設定すれば、コードは実行時にほかの変数と同じように読み取れます。

## 変数を設定する

環境変数は 1 つのアプリケーションに属します。再起動やコミットの後も残りますが、新しくアップロードすると変数のない新しいアプリケーションが作成されるため、そちらで改めて設定してください。

<Tabs>
  <Tab title="ダッシュボード">
    1. [ダッシュボード](https://squarecloud.app/ja/dashboard)でアプリケーションを開き、**設定** → **環境変数** に移動します。
    2. キーと値を 1 つずつ追加するか、既存の `.env` ファイルをインポートします。
    3. **保存** をクリックします。ダッシュボードがアプリケーションを再起動するかどうかを尋ねるので、新しい値を反映させるために再起動してください。

    ダッシュボードで新しいアプリケーションをアップロードする場合は、最初の起動前に、アップロード画面で変数を追加することもできます。
  </Tab>

  <Tab title="CLI">
    プロジェクトのフォルダでコマンドを実行します。CLI は、`squarecloud.app` にある `ID` のアプリケーションを対象にします。別のアプリケーションを対象にするには `--app <app ID>` を渡します（`list` では ID を引数として渡します）。

    ```bash theme={"system"}
    # 変数を追加または更新する（ほかの変数はそのまま）
    squarecloud app env set DISCORD_TOKEN=your-token LOG_LEVEL=info

    # ローカルの .env ファイルのすべての行を送信する
    squarecloud app env set --from-file .env

    # 現在の変数を一覧表示する
    squarecloud app env list

    # 変数を 1 つ削除する
    squarecloud app env remove LOG_LEVEL

    # 変更を反映するために再起動する
    squarecloud app restart
    ```

    `squarecloud app env replace` は、確認のうえ、変数のセット全体を渡したものに置き換えます。すべてのコマンドとフラグは [CLI での環境変数の管理](/ja/cli-reference/environment-variables)で説明しています。CLI のインストールとログインについては、[CLI のクイックスタート](/ja/cli-reference/quickstart)を参照してください。
  </Tab>

  <Tab title="VS Code">
    [Square Cloud 拡張機能](/ja/vscode-extension/features)で、サイドバーのアプリケーションを右クリックし、**環境変数** を選ぶと、変数の一覧表示、追加、編集、削除ができます。その後、変更を反映するためにアプリケーションを再起動してください。
  </Tab>

  <Tab title="API">
    `envs:write` スコープを持つ API キーを使って、変数を [`POST /v2/apps/{app_id}/envs`](/ja/api-reference/endpoint/apps/envs/add_n_edit) に送信します。

    ```bash theme={"system"}
    curl -X POST "https://api.squarecloud.app/v2/apps/YOUR_APP_ID/envs" \
      -H "Authorization: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"envs": {"DISCORD_TOKEN": "your-token"}}'
    ```

    同じパスで、変数の[一覧表示](/ja/api-reference/endpoint/apps/envs/get)（`GET`）、[置き換え](/ja/api-reference/endpoint/apps/envs/overwrite)（`PUT`）、[削除](/ja/api-reference/endpoint/apps/envs/remove)（`DELETE`）もできます。API はアプリケーションを再起動しないため、その後に[再起動のエンドポイント](/ja/api-reference/endpoint/apps/restart)を呼び出してください。
  </Tab>
</Tabs>

<Warning>変数はアプリケーションの起動時に読み込まれます。変更した後は必ずアプリケーションを再起動してください。再起動しないと、古い値のまま動き続けます。</Warning>

## コードで読み取る

<CodeGroup>
  ```javascript Node.js theme={"system"}
  const token = process.env.DISCORD_TOKEN;

  if (!token) {
    throw new Error("DISCORD_TOKEN is not set");
  }
  ```

  ```python Python theme={"system"}
  import os

  token = os.environ.get("DISCORD_TOKEN")

  if not token:
      raise RuntimeError("DISCORD_TOKEN is not set")
  ```
</CodeGroup>

変数がない場合にすぐ失敗させておくと、後から無効なトークンのようなわかりにくいエラーが出る代わりに、ログに明確なメッセージが残ります。

## Square Cloud が設定する変数

アプリケーションは、次の変数があらかじめ定義された状態で起動します。

| 変数 | 値 | 用途 |
| - | - | - |
| `PORT` | `80` | Web サーバーが待ち受けるポートを決める。 |
| `HOST` | `0.0.0.0` | Web サーバーがバインドするアドレスを決める。 |
| `SQUARECLOUD_APP_ID` | アプリケーション ID | 実行時にアプリケーションを識別する。 |
| `NODE_ENV` | `production` | Node.js のライブラリに本番環境で動いていることを伝える（Node.js と TypeScript のランタイム）。 |

<Warning>Web サイトでは `PORT` や `HOST` を上書きしないでください。プラットフォームが到達できるのは、ポート 80、ホスト `0.0.0.0` のサーバーだけです。</Warning>

`NODE_ENV` が `production` なので、`npm install` は `devDependencies` をスキップします。`START` コマンドでプロジェクトをビルドする場合（たとえば `typescript` や `vite` を使う場合）は、それらのビルドツールを `package.json` の `dependencies` に記載してください。

## 変数がアプリに渡る仕組み

Square Cloud は変数をアプリケーション内の `.squarecloud/.env` ファイルに保存し、アプリケーションが起動するたびに、依存関係のインストールや `START` コマンド、`MAIN` ファイルの実行より前に、シェルで読み込みます。そのため、次の点に注意してください。

* **名前**には英字、数字、アンダースコアを使い、数字で始めないでください。
* スペースや、`$`、`&`、`;`、`|` などのシェルの特殊文字を含む**値**は、引用符で囲む必要があります。囲まないと、シェルが値を途中で切ったり展開したりします。ダッシュボードと `squarecloud app env set` は自動で引用符を付けます。VS Code 拡張機能や API では、そのような値を自分でシングルクォートで囲んでください。`'p@ss word$1'` と入力するか、API のボディで `"PASSWORD": "'p@ss word$1'"` を送信します。

上限は、1 つのアプリケーションあたり 256 個の変数、名前は 1,024 文字、値は 4,096 文字です。静的な Web サイト（HTML/CSS）は環境変数に対応しておらず、`STATIC_APP_ENV_NOT_SUPPORTED` を返します。

## アップロードに秘密情報を含めない

コード自身が `.env` ファイルを読み込む場合（たとえば `dotenv` を使う場合）、そのファイルはアップロードに含まれている必要があります。その状態で `.env` を [`squarecloud.ignore`](/ja/getting-started/squarecloud-ignore) に記載すると、アプリは秘密情報なしで起動し、ボットは無効なトークンで失敗します。

より安全な構成は、上で説明したように `.env` の各値をアプリケーションの環境変数に移すことです。設定が済めば、`.env` をアップロードと Git リポジトリの両方から除外できます。`dotenv` は既存の変数を上書きしないため、同じコードが手元のマシンでも Square Cloud でも動作します。

<Warning>トークンやパスワードを公開リポジトリにコミットしないでください。漏えいした場合は、提供元で失効させ（たとえば Discord Developer Portal でボットのトークンをリセットし）、新しい値をここで設定してください。</Warning>

## 次のステップ

<CardGroup cols={2}>
  <Card title="設定ファイル" icon="gear-complex-code" href="/ja/getting-started/config-file">
    `squarecloud.app` の `MAIN`、`MEMORY`、`START` などのフィールドを設定します。
  </Card>

  <Card title="Discord ボットをホストする" icon="discord" href="/ja/tutorials/bots/discord">
    トークンを環境変数から読み取るボットをデプロイします。
  </Card>

  <Card title="Discord ボットのエラー" icon="bug" href="/ja/platform/troubleshooting/discord-bot-errors">
    無効なトークン、不足している intents、オフラインになるボットを解決します。
  </Card>

  <Card title="データベース接続エラー" icon="database" href="/ja/platform/troubleshooting/database-connection-errors">
    `DATABASE_URL` と適切な SSL 設定で接続します。
  </Card>
</CardGroup>
