Site Icon 古老と生成AI
📅 2026-02-25

タイトル:ClerkとAstroの魔物:環境変数「両面待ち」の死闘

終わらない “Publishable key is missing”

認証システム「Clerk」とAstro、そしてCloudflare Pagesを組み合わせたローカル開発環境(npm run dev)で、最大の試練が訪れました。 設定ファイルに正しくキーを書いているのに、頑なに「Publishable key is missing(公開鍵がありません)」というエラーが消えないのです。

スプリットブレイン現象:システムが分裂している?

丸一日の死闘の末に見えてきたのは、複数のシステムが複雑に絡み合うことで生じた「環境変数の読み込み先の分裂(スプリットブレイン)」でした。

  1. Astro(フロントエンド側) は、.env ファイルを読みに行きたがる。
  2. 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に話しかけよう!

※入力した内容はAI(Gemini)に送信され、自動返信が生成されます。個人情報は入力しないでください。