import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro'

Astroは環境変数に関するViteの組み込みのサポートを利用しています。環境変数を扱うためにViteが備える任意の方式を使用できます。

サーバ側のコードでは すべて の環境変数が使えますが、クライアント側のコードではセキュリティのためにPUBLIC_というプレフィックスを持つ環境変数のみが使えることに注意してください。

ini
SECRET_PASSWORD=password123PUBLIC_ANYBODY=there

この例では、PUBLIC_ANYBODYimport.meta.env.PUBLIC_ANYBODYでアクセス可能)はサーバサイドでもクライアントサイドでも利用でき、SECRET_PASSWORDimport.meta.env.SECRET_PASSWORDでアクセス可能)はサーバサイドでのみ利用できます。

:::caution .envファイルは設定ファイルの中では読み込まれません。 :::

デフォルト環境変数

Astroでは、いくつかの環境変数をすぐに利用できます。

  • import.meta.env.MODE: サイトが動作しているモードです。これはastro devを実行している場合はdevelopmentで、astro buildを実行している場合はproductionになります。
  • import.meta.env.PROD: あなたのサイトが本番環境で動作している場合はtrueとなり、その他の場合はfalseとなります。
  • import.meta.env.DEV: あなたのサイトが開発環境で動作している場合はtrueとなり、その他の場合はfalseとなります。常にimport.meta.env.PRODの反対となります。
  • import.meta.env.BASE_URL: あなたのサイトの配信元のベースURLです。これは、baseオプションによって決まります。
  • import.meta.env.SITE: プロジェクトのastro.configで指定されたsiteオプションがセットされます。
  • import.meta.env.ASSETS_PREFIX: build.assetsPrefix設定オプションが設定されている場合に、Astroが生成するアセットリンクに付加されるプレフィックスです。Astroが関与しないアセットリンクを作成するために使用できます。

他の環境変数と同様に使用します。

ts
const isProd = import.meta.env.PROD;const isDev = import.meta.env.DEV;

環境変数を設定する

.envファイル

環境変数は、プロジェクトディレクトリの.envファイルから読み込めます。

また、.env.production.env.developmentのように、ファイル名にモード(productionまたはdevelopment)を付けることもできます。この場合、環境変数はそのモードでのみ有効になります。

プロジェクトディレクトリに.envファイルを作成し、そこにいくつかの変数を追加するだけです。

ini
# これはサーバー上で実行したときのみ有効です!DB_PASSWORD="foobar"# これはどこからでも呼び出せます!PUBLIC_POKEAPI="https://pokeapi.co/api/v2"

.envファイルについてさらに知りたい場合は、Viteのドキュメントを参照してください

CLIの利用

プロジェクトの実行時に環境変数を追加することも可能です。

環境変数を取得する

Astroでは、process.envの代わりにimport.meta.envを使用して環境変数にアクセスします。これは、ES2020で追加されたimport.meta機能を使用しています。

例えば、環境変数PUBLIC_POKEAPIを取得するには、import.meta.env.PUBLIC_POKEAPIを使用します。

js
// import.meta.env.SSR === true のときconst data = await db(import.meta.env.DB_PASSWORD);// import.meta.env.SSR === false のときconst data = fetch(`${import.meta.env.PUBLIC_POKEAPI}/pokemon/squirtle`);

SSRを使う場合、使用するSSRアダプターによって実行時に環境変数にアクセスできます。ほとんどのアダプターではprocess.envから環境変数にアクセスできますが、DenoアダプターではDeno.env.get()を使用する必要があります。Cloudflareは独自の方法で環境変数を処理します。Astroはサーバーの環境変数をチェックし、存在しない場合は.envファイルを探します。

TypeScriptのインテリセンス

デフォルトで、Viteはvite/client.d.tsの中でimport.meta.envの型定義を提供します。

.env.[mode]ファイルではより多くのカスタム環境変数を定義できますが、PUBLIC_をプレフィックスとするユーザーが定義した環境変数のTypeScriptインテリセンスを取得したいと思うかもしれません。

これを実現するには、src/env.d.tsを作成し、ImportMetaEnvを以下のように設定します。

ts
interface ImportMetaEnv {  readonly DB_PASSWORD: string;  readonly PUBLIC_POKEAPI: string;  // その他の環境変数...}interface ImportMeta {  readonly env: ImportMetaEnv;}