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

変数を設定する

環境変数は 1 つのアプリケーションに属します。再起動やコミットの後も残りますが、新しくアップロードすると変数のない新しいアプリケーションが作成されるため、そちらで改めて設定してください。
  1. ダッシュボードでアプリケーションを開き、設定 → 環境変数 に移動します。
  2. キーと値を 1 つずつ追加するか、既存の .env ファイルをインポートします。
  3. 保存 をクリックします。ダッシュボードがアプリケーションを再起動するかどうかを尋ねるので、新しい値を反映させるために再起動してください。
ダッシュボードで新しいアプリケーションをアップロードする場合は、最初の起動前に、アップロード画面で変数を追加することもできます。
変数はアプリケーションの起動時に読み込まれます。変更した後は必ずアプリケーションを再起動してください。再起動しないと、古い値のまま動き続けます。

コードで読み取る

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

Square Cloud が設定する変数

アプリケーションは、次の変数があらかじめ定義された状態で起動します。
Web サイトでは PORT や HOST を上書きしないでください。プラットフォームが到達できるのは、ポート 80、ホスト 0.0.0.0 のサーバーだけです。
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 に記載すると、アプリは秘密情報なしで起動し、ボットは無効なトークンで失敗します。 より安全な構成は、上で説明したように .env の各値をアプリケーションの環境変数に移すことです。設定が済めば、.env をアップロードと Git リポジトリの両方から除外できます。dotenv は既存の変数を上書きしないため、同じコードが手元のマシンでも Square Cloud でも動作します。
トークンやパスワードを公開リポジトリにコミットしないでください。漏えいした場合は、提供元で失効させ(たとえば Discord Developer Portal でボットのトークンをリセットし)、新しい値をここで設定してください。

次のステップ

設定ファイル

squarecloud.app の MAIN、MEMORY、START などのフィールドを設定します。

Discord ボットをホストする

トークンを環境変数から読み取るボットをデプロイします。

Discord ボットのエラー

無効なトークン、不足している intents、オフラインになるボットを解決します。

データベース接続エラー

DATABASE_URL と適切な SSL 設定で接続します。