Remix + CloudFlare Pagesの構成でローカル開発時に環境変数を使うために--bindingする
注意
Remix は 2022 年 3 月時点でかなり活発に開発が進んでいるフレームワークなので、バージョン差異や作成時期により再現できない可能性があります。この記事を再現するためのコードは下記にあります。
https://github.com/Hidekazoo/remix-cloudflarepages-env
下記のコマンドで作成し、CloudFlare Pages の構成を選択した構成です。上記は再現の手間を省くために.env ファイルを git に含めていますが普段はは含めないです。
npx create-remix@latest
- remix: 1.3.3
- wrangler: beta
環境変数を利用する
Remix の CloudFlare デプロイ用の構成の場合、環境変数の読み込み方法が独特です。フロント開発でよく使う process.env でアクセスができません。また、ローカル開発時に環境変数を利用したい場合、wrangler の起動時に binding し、context から読み取る必要がありました。
まず、ローカル環境に.env ファイルを作成し値を記載、dev コマンドの wranglerk 起動時に cat コマンドで展開しています。
"dev:wrangler": "cross-env NODE_ENV=development wrangler pages dev ./public --binding $(cat .env)",
参考元:Error “process is not defined” when accessing environment variables
useLoaderData で context からアクセスする
下記の用に React Component ファイルからアクセスができます
import type { LoaderFunction } from "remix";
import { useLoaderData } from "remix";
export const loader: LoaderFunction = async ({ context }) => {
const { SAMPLE_VARIABLE } = context;
return {
variable: SAMPLE_VARIABLE,
};
};
export default function Index() {
const data = useLoaderData();
console.log(data);
return <div></div>;
}
他にも方法があるかもしれないものの、一旦読み取れたのでこの方法で環境変数を読み取るようにしました。冒頭で書いた通り、remix のバージョンおよび wrangler のバージョンで挙動が変わりそうなので、上手くいかない場合は remix の github の issue を検索すると良いかもしれません。