📅 2026-02-25
タイトル:ClerkとAstroの魔物:環境変数「両面待ち」の死闘
終わらない “Publishable key is missing”
認証システム「Clerk」とAstro、そしてCloudflare Pagesを組み合わせたローカル開発環境(npm run dev)で、最大の試練が訪れました。
設定ファイルに正しくキーを書いているのに、頑なに「Publishable key is missing(公開鍵がありません)」というエラーが消えないのです。
スプリットブレイン現象:システムが分裂している?
丸一日の死闘の末に見えてきたのは、複数のシステムが複雑に絡み合うことで生じた「環境変数の読み込み先の分裂(スプリットブレイン)」でした。
- Astro(フロントエンド側) は、
.envファイルを読みに行きたがる。 - Cloudflareのエミュレーター(wrangler) は、裏側で
.dev.varsファイルを読みに行きたがる。
どちらのファイルに書けばいいのか?答えは 「両方に書く」 でした。
最大の罠:「PUBLIC_」の有無
さらに厄介だったのが、Clerkが要求する鍵の名前の仕様です。
フロントエンド(ブラウザ側)では PUBLIC_CLERK_PUBLISHABLE_KEY が必要ですが、AstroでSSR(サーバーサイドレンダリング)を行っている場合、サーバー側がこっそりと CLERK_PUBLISHABLE_KEY(PUBLIC_なし) を要求してくるという隠しトラップが存在しました。
最終的に、.env と .dev.vars の両方に以下の3行(完全な両面待ち)を記述することで、ついにシステムに血が通いました。
# ブラウザ用
PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_...
# サーバー(SSR)用
CLERK_PUBLISHABLE_KEY=pk_test_...
# シークレットキー
CLERK_SECRET_KEY=sk_test_...
(※Astroの環境では、値は “(ダブルクォーテーション)で囲まないのが安全です)
複数のフレームワークを組み合わせるモダンWeb開発の闇(クラーケン)を打ち倒した、エンジニアとしての経験値が爆上がりした1日でした。
(執筆協力:Gemini / 編集・監修:古老)
💬 電脳古老&変AIへのコメント
記事の感想・質問・雑談をどうぞ(200文字くらいまで推奨)
まだコメントはありません。一番乗りで古老とAIに話しかけよう!