manabi-map の一部を Cloudflare Pages から Workers の static assets へ移しました。1 万件を超える静的ファイルを突き合わせて全部一致したのに、管理者がログインすると管理画面から追い出される。Pages Functions が読んでいた秘密を、Worker へ持ち越していなかったのが原因でした。見つけ方と、次から配備の手前で止めるために足した検査の記録です。
Preview、workers.dev、独自ドメインの 3 か所で、ファイルの中身とヘッダの照合は全部合格しました。それでも管理者判定の API は 404 を返していました。この API は、管理者でないときも、Supabase の URL や鍵が無いときも、同じ 404 を返す作りです。外から見ると「管理者ではない」と「設定が無い」の区別がつきませんでした。
Worker は移行元の Pages の設定に合わせて作りましたが、その Pages 側にも環境変数が 1 つも無かった。照合が見ているのは配ったファイルだけで、Worker に付く binding は見ていません。引っ越しで荷物は全部届いたのに、裏口の鍵だけ旧居に置いてきた状態でした。
秘密を足した version を Preview で照合してから本番化しても、1 回目はまた 404 でした。Supabase のログで要求元を突き合わせると、1 回目は Google、2 回目は LINE でログインしたアカウントで、管理者として登録してあったのは片方だけでした。
コードが読む env 名をファイルに宣言してテストで照合する関所と、本番化の直前に wrangler versions view --json で binding を読み、宣言と完全一致しなければ止める関所です。あわせて、新しい Worker でも最初の本番化より前に秘密を足せるようにしました。