Complat / Cloudflare Deployment Guide

はじめての Cloudflare 公開ガイド
― Claude Code への指示と .env の扱い方

自分でつくったツールを、はじめてインターネットに公開する人のための手引き。
「何を、どの順番で、AIにどう言えばいいか」と「鍵(.env)をどう守るか」に絞ってまとめています。

前提環境 Claudeデスクトップアプリ(Mac / Windows)の Claude Code 対象 初めてWebツールを公開する人/AIに実装を任せる人 想定ケース 面談記録ツール(Pages + Workers + D1) 作成 2026-08-04

1先に結論:守るのは3つだけ

技術的な話をする前に、これだけ守れば大きな事故は起きません。逆に言えば、事故はほぼこの3つの違反から起きます。

① 鍵は「コードと同じ場所」に置かない

パスワードやAPIキーは、プログラム本体とは別の場所に置く。ソースコードに直接書かない。これが .env の存在理由そのものです。

② ブラウザに届くものは、全部見られると思う

画面(フロントエンド)に埋め込んだ値は、どんなに隠しても訪問者に読まれます。「難読化したから大丈夫」はありません。秘密はサーバー側(Cloudflare Workers)にだけ置きます。

③ 公開(デプロイ)だけは、AIに自動でやらせない

コードを書く・直す・テストする、はAIに任せてよい。しかし「インターネットに出す」瞬間だけは人間が承認する。取り消しの効かない操作だからです。

たとえるなら ①は「家の鍵を玄関マットの下に置かない」、②は「窓ガラス越しに見える場所に金庫の暗証番号を貼らない」、③は「郵便物は投函する前に自分で宛名を確認する」。 技術の話に見えて、やっていることは日常の用心と同じです。

2登場人物を整理する

最初につまずくのは、たいてい「誰が何をしているのか分からない」ことです。関わるのは4者だけです。

登場人物役割ひとことで言うと
あなたのPC作業場所。ソースコードと鍵の原本がある自分の机。ここは外から見えない
Claude Code
Claudeデスクトップアプリの
「Code」タブ/内蔵ターミナル
あなたの指示でコードを書く・実行する手を動かす担当。指示した範囲しかやらない
Cloudflare公開されたツールが実際に動く場所お店の物件。ここに置いたものが世界に見える
GitHub(使う場合)コードの保管・履歴管理共有の書庫。ここに鍵を入れるのが最悪の事故
  【あなたのPC】                      【Cloudflare】
  ┌────────────────────┐              ┌────────────────────┐
  │ ソースコード        │  ─ 公開 ─▶   │ Pages   = 画面      │
  │ .env(鍵の原本)    │              │ Workers = 処理      │
  │   ↑ ここに置く      │              │ D1      = データ    │
  └────────────────────┘              │ Secrets = 鍵の写し  │
        │                              └────────────────────┘
        │ Claude Code が読み書きする              ▲
        ▼                                         │
  ┌────────────────────┐              鍵はコードと別ルートで
  │    Claude Code     │              1回だけ登録する
  └────────────────────┘

  ✕ .env は「公開」の矢印には絶対に乗せない
ここが一番大事 コードは公開ルートを通ります。鍵は別ルートで、Cloudflare側に1回だけ登録します。この2本の線が交わらないようにするのが、以降の作業のすべてです。

2-1. この資料が前提にしている環境

Claudeデスクトップアプリ(Mac / Windows)を使う前提で書いています。アプリの中に、性格の違う2つの操作場所があります。この2つを区別できると、以降の説明が一気に読みやすくなります。

場所何をするところかこの資料での書き方
チャット欄 日本語でAIに依頼する。コードを書く・直す・調べるはここ 「〜と送る」「指示する」
ターミナル コマンドを自分の手で打つ。鍵の登録と公開はここ 「〜を実行する

ターミナルは、Claudeデスクトップアプリに内蔵されているものを使ってもいいですし、OS標準のものでも構いません。同じことができます。

OSOS標準のターミナル
Mac「ターミナル」アプリ(command + スペース →「ターミナル」で検索)
Windows「PowerShell」または「ターミナル」(スタートボタンを右クリック → 一覧にあります)
迷ったときの見分け方 日本語で頼めることはチャット欄。英数字のコマンドを打つのはターミナル。
そして本資料では、鍵に触る操作と公開の操作だけは、必ずターミナルで自分の手でやります。理由は「取り返しがつかない操作を、人間の手を1回はさんで止めるため」です。
補足:チャット欄からもコマンドは打てる Claude Codeでは、チャット欄の先頭に ! を付けると、その行がコマンドとして実行されます(例:! npx wrangler whoami)。慣れてきたら使うと速いですが、最初のうちはターミナルで打つほうが、何が起きているか見えて安全です。

3.env とは何か(鍵の話)

3-1. そもそも何のためにあるのか

ツールが動くには、たいてい「秘密の文字列」が必要になります。メール送信サービスのAPIキー、データベースのパスワード、LINEの接続トークン——こういうものです。

これをソースコードに直接書くと、次の問題が起きます。

そこで、秘密の文字列だけを1つのファイルに切り出す。それが .env(ドット・エンブ)です。

.env
RESEND_API_KEY=re_abc123xxxxxxxxxxxxxxxx
DATABASE_URL=xxxxxxxxxxxxxxxxxxxx
SESSION_SECRET=xxxxxxxxxxxxxxxxxxxx

プログラム側は「RESEND_API_KEY という名前の値を持ってきて」とだけ書きます。中身が何かは知りません。だからコードは人に見せても安全になり、.env だけを厳重に守ればよくなります。

たとえるなら 料理のレシピ(コード)に「金庫の暗証番号は 4823」と書き込まないで、「暗証番号は台所の引き出しのメモを見る」と書いておく。レシピは家族に配れるし、引き出しだけ鍵をかければいい。

3-2. ファイル名が「.」で始まる理由

先頭が . のファイルは、Mac・Linuxでは隠しファイル扱いになり、通常のフォルダ表示に出てきません。うっかりメールに添付する事故を減らすための慣習です。

Mac(Finder)で表示する

Finderで対象のフォルダを開いた状態で、次のキーを押します。

command + shift + .(ピリオド)

押すたびに表示 ⇄ 非表示が切り替わるトグルです。隠しファイルが表示されているときは、アイコンが少し薄く表示されます。確認が終わったら、もう一度同じキーを押して非表示に戻しておくのが安全です。

やりたいこと操作
Finderで一時的に表示command + shift + .(もう一度押すと非表示)
常に表示させるターミナルで
defaults write com.apple.finder AppleShowAllFiles -bool true
killall Finder
※戻すときは truefalse にして同じ2行を実行
ターミナルで一覧を見るls -la-a が「隠しファイルも全部」の意味)

Windows(エクスプローラー)で表示する

先に知っておくこと Windowsでは、そもそも .env は隠しファイルになりません。 「先頭がピリオドなら隠す」というのはMac・Linuxの決まりごとで、Windowsは別方式(ファイルごとの「隠し属性」)を使うためです。つまり .env はエクスプローラーに最初から見えています

それでも表示設定を触る必要があるのは、node_modules.git といった「隠し属性が付いたフォルダ」を確認したいときです。

バージョン操作
Windows 11エクスプローラー上部の [表示][表示][隠しファイル] にチェック
Windows 10エクスプローラー上部の [表示]タブ → [隠しファイル] のチェックボックスをON
共通(確実)コントロールパネル →「エクスプローラーのオプション」→[表示]タブ →
「隠しファイル、隠しフォルダー、および隠しドライブを表示する」を選択
PowerShellで見るGet-ChildItem -Force-Force が「隠しも含める」の意味)
Windowsで本当に危ないのは「拡張子の非表示」 Windowsは初期設定でファイルの拡張子(.txt など)を隠します。この状態でメモ帳から保存すると、.env のつもりが実際は .env.txt になり、画面上は「.env」に見えるのに、プログラムからは読めないという事故が起きます。

対策:上の表と同じ画面で 「登録されている拡張子は表示しない」のチェックを外す。これは隠しファイル表示とは別項目なので、両方いじってください。
結局いちばん確実なのは Mac・Windowsどちらでも、OSの表示設定を触らずに、Claude Codeに作らせる/開かせるのが一番安全です。ファイル名を文字で指定するので、Windowsの拡張子問題(.env.txt になる事故)も起きません。

チャット欄にこう送るだけです。
プロジェクト直下に .dev.vars という空のファイルを作ってください。中身は私が自分で書きます。

中身を書くときは、ターミナルで open -e .dev.vars(Mac)/ notepad .dev.vars(Windows)と実行すればエディタで開けます。

3-3. .env に「入れるもの/入れないもの」

値の例.envへ理由
APIキー・トークン入れる漏れると他人に使われる・課金される
DBのパスワード・接続文字列入れるデータを全部抜かれる
セッション用の秘密鍵入れるログインを偽装される
管理者のメールアドレス入れる秘密ではないが、環境ごとに変えたい
ツールの名前・色・文言入れない秘密ではない。コードに書いてよい
公開URL(xxx.pages.dev入れない誰でも見える情報
判断に迷ったときの基準 「これが掲示板に貼られたら困るか?」——困るなら .env。困らないならコードに書いてよい。

4鍵の置き場所は3種類ある

ここが初心者が最も混乱するところです。「.env に書けば全部OK」ではありません。 動く場所が3つあるので、鍵の置き場所も3つあります。

どこで動く鍵の置き場所登録のしかた
①自分のPC
開発中・テスト中
.env
(Workersなら .dev.vars
テキストエディタで書くだけ
②Cloudflare上のサーバー
Workers=処理担当
CloudflareのSecrets wrangler secret put KEY名
またはダッシュボードで入力
③訪問者のブラウザ
Pages=画面担当
置けない 秘密は一切置かない。必要な処理は②に頼む

4-1. ①と②は「別々に登録する」

.env をCloudflareにアップロードする仕組みはありません(それが安全設計です)。同じ鍵を、手元用とCloudflare用に2回登録する。これが正しい手順です。

# 手元用(ファイルに書く)
echo 'RESEND_API_KEY=re_abc123' >> .dev.vars

# Cloudflare用(コマンドで送る/画面には残らない)
npx wrangler secret put RESEND_API_KEY
# → 入力を求められるので、そこに貼る

4-2. ③が最大の落とし穴

フロントエンド(画面)のビルドツールには、VITE_NEXT_PUBLIC_ といった接頭辞のついた環境変数をそのままブラウザに埋め込む機能があります。便利ですが、ここにAPIキーを入れると訪問者全員に配布したのと同じです。

実際に起きる事故 VITE_OPENAI_API_KEY=sk-xxxx と書いてPagesに公開 → ブラウザの検証ツールで誰でも読める → 第三者に使われ、API利用料が請求される。
接頭辞が VITE_ / NEXT_PUBLIC_ / PUBLIC_ の変数は「公開してよい値」専用だと覚えてください。

4-3. wrangler.toml に秘密を書かない

wrangler.toml はCloudflareの設定ファイルで、コードと一緒にGitHubへ上がります。ここの [vars] セクションに書いた値は平文でそのまま残ります。

wrangler.toml
name = "mendan-tool"
compatibility_date = "2026-08-01"

[vars]
APP_NAME = "面談記録"        # ← OK(秘密ではない)
# API_KEY = "re_abc123"      # ← 絶対にダメ。secret put を使う

[[d1_databases]]
binding = "DB"
database_name = "mendan-tool-db"
database_id = "xxxxxxxx-xxxx-xxxx"   # ← ID自体は秘密ではないが、公開リポジトリなら伏せる運用も可

5フォルダのつくり方

5-1. 基本形

まずは、ツールごとに1つのフォルダを作ります。プロジェクト名は英数字とハイフンだけ(日本語やスペースは避ける)。

mendan-tool/              ← プロジェクトのフォルダ
├── .env                     ← 鍵。Gitに入れない
├── .dev.vars                ← Workers用の鍵。Gitに入れない
├── .env.example             ← 「鍵の名前だけ」の見本。Gitに入れる
├── .gitignore               ← 何を除外するかの指定
├── wrangler.toml            ← Cloudflareの設定
├── package.json
├── src/                     ← プログラム本体
└── public/                  ← 画像・CSSなど

5-2. .gitignore を最初に作る(順番が重要)

.gitignore は「このファイルはGitに含めない」という指定です。コードを書き始める前に作ってください。1回でもコミットしてしまうと履歴に残り、消すのが面倒になります。

.gitignore
# 鍵・環境変数(最重要)
.env
.env.*
!.env.example
.dev.vars
.dev.vars.*
*.key
*.pem

# 依存パッケージ・ビルド成果物
node_modules/
dist/
.wrangler/

# OS
.DS_Store

5-3. .env.example を置く理由

中身を空にした「鍵の一覧表」です。これだけはGitに入れます。あとから自分が見返すときも、他の人に渡すときも、「何の鍵が必要なのか」が分かるようになります。

.env.example
# このファイルをコピーして .env を作り、値を入れてください
# cp .env.example .env

RESEND_API_KEY=          # メール送信用。https://resend.com で取得
SESSION_SECRET=          # ログイン用の秘密鍵。openssl rand -hex 32 で生成
ADMIN_EMAIL=             # 管理者のメールアドレス

5-4. 【応用】鍵の実体をプロジェクトの外に置く

より安全にするなら、鍵の本体をプロジェクトフォルダの外に置き、シンボリックリンク(ショートカット)を張る方法があります。クラウド同期フォルダ(Google Drive / Dropbox / iCloud)の中で作業する場合は、この方法を強く推奨します。同期フォルダに .env を置くと、鍵がクラウドにアップロードされてしまうためです。

Mac(ターミナル)

# 1. 同期されない場所に鍵の実体を置く
mkdir -p ~/secrets/mendan-tool
open -e ~/secrets/mendan-tool/.dev.vars      # テキストエディットで開いて値を書く
chmod 600 ~/secrets/mendan-tool/.dev.vars    # 自分だけが読める権限に

# 2. プロジェクト側からリンクを張る
cd ~/projects/mendan-tool
ln -s ~/secrets/mendan-tool/.dev.vars .dev.vars

# 3. 確認(.dev.vars -> /Users/.../.dev.vars と出れば成功)
ls -la .dev.vars

Windows(PowerShell)

# 1. 同期されない場所に鍵の実体を置く
mkdir "$HOME\secrets\mendan-tool"
notepad "$HOME\secrets\mendan-tool\.dev.vars"   # メモ帳で開いて値を書く

# 2. プロジェクト側からリンクを張る
cd "$HOME\projects\mendan-tool"
New-Item -ItemType SymbolicLink -Path ".dev.vars" `
         -Target "$HOME\secrets\mendan-tool\.dev.vars"

# 3. 確認
Get-Item .dev.vars | Select-Object Name, LinkTarget
Windowsで2点だけ注意 ① シンボリックリンクの作成には管理者権限のPowerShellが必要な場合があります(PowerShellを右クリック →「管理者として実行」)。
② メモ帳で保存するとき、ファイルの種類を「すべてのファイル」にしないと .dev.vars.txt になります。ファイル名を "..dev.vars" のように引用符で囲んで保存するのが確実です。
この方式の利点 プログラムからは普通のファイルに見えるので何も書き換えずに動く。それでいて実体は同期・バックアップの外にある。鍵を差し替えるときも1か所直せば全プロジェクトに反映されます。

難しければ、この5-4は飛ばして構いません。 クラウド同期フォルダの外(例:~/projects/)にプロジェクトを置いてさえいれば、.gitignore だけで十分に安全です。

6Claude Codeへの指示テンプレート

ここからは実際にコピーして使える指示文です。すべてClaudeデスクトップアプリのチャット欄に貼り付けて送るものです。AIは「言われていないこと」は基本的にやりません。逆に言えば、守ってほしいルールは最初に明文化しておく必要があります。

CLAUDE.md に書いておくと、もっと確実 6-1のルール宣言は、毎回チャットに貼らなくても、プロジェクト直下に CLAUDE.md というファイルを置いておけば会話のたびに自動で読み込まれます

チャット欄にこう送るだけで作れます:
下のルールをプロジェクト直下の CLAUDE.md に書いて保存してください。(続けて6-1の本文を貼る)

6-1. 最初に1回だけ出す指示(ルール宣言)

新しいプロジェクトを始めたら、まずこれを送ります。以降の会話全体に効きます。

▼ コピーして最初に送る
このプロジェクトのルールを宣言します。以降、必ず守ってください。

【鍵の扱い】
1. APIキー・パスワード・トークンをソースコードに直接書かないこと。
   必ず環境変数(.env / .dev.vars / Cloudflare Secrets)経由で読むこと。
2. 私が鍵の値をチャットに貼ることはありません。
   鍵が必要なときは「.env に○○という名前で書いてください」と
   ファイル名と変数名だけを指示してください。
3. .env / .dev.vars の中身をチャットに出力しないこと。
   存在確認は「あるかないか」だけを報告してください。
4. フロントエンドのコード(ブラウザに届くコード)に秘密の値を
   一切埋め込まないこと。VITE_ / NEXT_PUBLIC_ 接頭辞の変数には
   公開してよい値だけを入れること。

【最初にやってほしいこと】
- .gitignore を作り、.env / .env.* / .dev.vars / node_modules /
  dist / .wrangler / .DS_Store を除外してください(.env.example は除外しない)。
- .env.example を作り、必要な環境変数の「名前と説明だけ」を
  空の値で列挙してください。

【公開(デプロイ)】
- wrangler deploy / wrangler pages deploy などの公開コマンドは、
  実行前に必ず「何を・どこに・どのURLで公開するか」を提示し、
  私の承認を得てから実行してください。無断で実行しないこと。

6-2. 鍵を追加するときの指示

ポイントは「値を渡さない」こと。AIには「箱を作れ」とだけ言い、中身は自分で入れます。

▼ 鍵が必要になったとき
メール送信機能を追加します。Resend の API キーが必要です。

- 変数名は RESEND_API_KEY にしてください。
- .env.example に空の項目と説明コメントを追加してください。
- コードからは環境変数経由で読む形にしてください。
- 実際の値は私が自分で .dev.vars に書きます。
  値を聞かないでください。また、書き終わったかどうかも
  ファイルの存在確認だけで判断してください。

6-3. Cloudflareへ登録するときの指示

▼ 本番用の鍵をCloudflareに入れる
手元の .dev.vars に入っている変数を、Cloudflare 側の Secret として
登録したいです。実行すべきコマンドを一覧で出してください。

- コマンドは私が自分のターミナルで実行します。
- あなたが実行する必要はありません。
- 値はコマンドの引数に含めず、対話入力で渡す形にしてください。

提示されるのは、こういうコマンドのはずです。

npx wrangler secret put RESEND_API_KEY
npx wrangler secret put SESSION_SECRET

# 実行すると入力欄が出るので、そこに値を貼る。
# コマンド履歴には値が残らない。
やってはいけない書き方 npx wrangler secret put KEY --text "re_abc123"
値をコマンドに直接書くと、シェルの履歴ファイル(~/.zsh_history)に平文で残り続けます。必ず対話入力を使ってください。

6-4. 公開前の指示

▼ デプロイの直前に
公開の準備ができているか、実行前に確認してください。

1. git status で .env / .dev.vars が追跡対象に入っていないこと
2. git log で過去に鍵らしき文字列がコミットされていないこと
   ("KEY" "SECRET" "TOKEN" "PASSWORD" などで grep)
3. ビルド後の成果物(dist/ など)に秘密の値が含まれていないこと
4. Cloudflare 側に必要な Secret が全部登録されていること
   (wrangler secret list で名前だけ確認)

確認結果を報告したうえで、公開するプロジェクト名とURLを提示し、
私が「OK」と答えてから実行してください。

6-5. 【上級】そもそも実行できないようにする

指示だけでは不安な場合、Claude Codeには「特定のコマンドを機械的にブロックする」仕組み(Hooks/permissions)があります。.claude/settings.json に拒否リストを書いておけば、AIがうっかり実行しようとしても止まります。

.claude/settings.json(例)
{
  "permissions": {
    "deny": [
      "Bash(wrangler deploy:*)",
      "Bash(wrangler pages deploy:*)",
      "Bash(git push:*)",
      "Read(./.env)",
      "Read(./.dev.vars)"
    ]
  }
}
考え方 「AIに気をつけてもらう」より「AIが物理的にできないようにする」ほうが確実です。運転で言えば、注意喚起の看板ではなくガードレールを置くということ。

7公開までの流れ(全10ステップ)

各ステップに、どこで操作するかを付けています。ターミナル は自分の手で打つ場所、チャット欄 はAIに日本語で頼む場所です。

  1. Node.js を入れる1回だけ npx というコマンドを使うために必要です。nodejs.org から LTS版 をダウンロードしてインストール。
    入っているか確かめるには、ターミナルで node -v を実行して v20.x.x のような数字が出ればOK。
  2. Cloudflareアカウントを作るブラウザ dash.cloudflare.com でメール登録。クレジットカードは無料枠のうちは不要。登録後、ダッシュボード右側のAccount IDを控えておく。
  3. Cloudflareにログインするターミナル npx wrangler login を実行。ブラウザが開くので「Allow」を押す。これで手元のPCとCloudflareがつながります。
    つながったかの確認は npx wrangler whoami。自分のメールアドレスが出れば成功。
    ※AIはブラウザの承認ボタンを押せません。ここだけは必ず自分で実行してください。
  4. プロジェクトのフォルダを作り、ルールを宣言するチャット欄 6-1のテンプレートを送る。.gitignore.env.exampleCLAUDE.md がこの時点で完成します。
  5. 機能を作るチャット欄 ここは普通に日本語で依頼してよい。手元で npx wrangler dev を動かしながらブラウザで確認する。この段階ではまだ誰にも公開されていません
  6. 手元用の鍵を入れるターミナル .dev.vars に自分で値を書く。チャット欄には貼らない
  7. Cloudflare側に鍵を登録するターミナル npx wrangler secret put 変数名 を必要な数だけ実行し、対話入力で値を貼る。
  8. 公開前チェックを回すチャット欄 6-4のテンプレートを送り、鍵の混入がないか確認させる。10章のチェックリストも自分の目で見る。
  9. 公開するターミナル npx wrangler pages deploy dist などを、内容を確認したうえで実行。xxxxx.pages.dev というURLが発行されます。
  10. 公開後の確認スマホ スマホのシークレットウィンドウで開く(=他人と同じ条件で見る)。ログインが要るページが素通りできないか、意図せず公開されている情報がないかを確認する。
最初の公開は「空っぽ」でやってみる 「Hello」とだけ表示するページを1枚作って、先に公開まで通してしまうのがおすすめです。仕組みが分かっている状態で本番を作れるので、後半で慌てません。

8やってはいけない7つ

  1. 鍵の値をチャットに貼る 会話ログに残ります。AIサービス側にも送信されます。値を渡さずに「変数名だけ」で会話を進めれば、そもそも貼る必要がありません。
  2. .gitignore を作る前にコミットする 1回でも .env をコミットすると、あとから削除しても履歴には残り続けます。最初の git init の直後に .gitignore を作るのが鉄則。
  3. フロントエンドに秘密を埋め込む VITE_ / NEXT_PUBLIC_ 接頭辞の変数はブラウザに配布されます。「難読化」「Base64エンコード」も無意味です。
  4. wrangler.toml の [vars] に秘密を書く このファイルはコードと一緒に共有されます。秘密は必ず wrangler secret put で。
  5. スクリーンショットに鍵を写す ターミナルやダッシュボードの画面共有・スクショで漏れる事故は非常に多い。共有する前に一度自分で読み返す。
  6. 「とりあえず公開して後で直す」 公開した瞬間から、検索エンジンのクローラーや自動スキャンが来ます。人事情報のような機微データを扱うツールでは、ログイン制御が効いていることを確認してから公開する。
  7. デプロイをAIの自動実行に任せる 公開は取り消せません(履歴を戻せても、その間に見られたものは戻らない)。承認ゲートは必ず人間が握る。

9鍵が漏れたときの対処

やってしまったときは、順番が決まっています。あわてて履歴を消すのは2番目以降です。

  1. まず鍵を無効化する(最優先) 発行元のサービス(Resend、OpenAI、Cloudflareなど)の管理画面で、その鍵をRevoke / Delete する。漏れた鍵は「もう使えない文字列」にしてしまえば、履歴に残っていても実害がなくなる。
  2. 新しい鍵を発行して差し替える .dev.vars と Cloudflare の Secret の両方を新しい値に更新する。
  3. 不正利用がないか確認する 発行元の利用履歴・請求画面を見る。身に覚えのないアクセスがあれば記録する。
  4. その後で、履歴の掃除を検討する GitHubに上げてしまった場合は、リポジトリの削除・再作成が最も確実。履歴の書き換え(git filter-repo 等)は影響が大きいので、詳しい人と一緒にやる。
よくある誤解 「コミットを取り消した」「ファイルを削除した」だけでは鍵は無効になりません。Gitの履歴、GitHubのキャッシュ、フォークされたリポジトリのどこかに残ります。鍵の無効化が唯一の確実な止血です。

10公開前チェックリスト

鍵の管理

  • .gitignore.env / .env.* / .dev.vars が入っている
  • git status.env 系が追跡対象に出てこない
  • ソースコードを KEY SECRET TOKEN PASSWORD で検索して、直書きがない
  • ビルド成果物(dist/ など)を同じ語で検索して、秘密が混ざっていない
  • wrangler.toml[vars] に秘密が書かれていない
  • Cloudflare側に必要なSecretが全部登録されている(wrangler secret list

公開の内容

  • 公開されるプロジェクト名とURLを、実行前に自分の目で確認した
  • テスト用のダミーデータ・実在の個人名が混ざっていない
  • ログインが必要なページが、未ログインで開けないことを確認した
  • 検索エンジンに載せたくない場合、noindex 設定が入っている
  • スマホのシークレットウィンドウで開いて、他人の見え方を確認した

運用の準備

  • データのバックアップ方法が決まっている(D1なら日次エクスポート)
  • 鍵を差し替えるときの手順を、自分がもう一度たどれる
  • 公開URLを誰に伝えるかが決まっている

11用語辞典

用語意味
デプロイ手元で作ったものを、インターネット上の公開場所に置くこと。「公開する」とほぼ同義
環境変数プログラムの外側から渡す設定値。.env に書くのはこれ
APIキー外部サービスを使うための身分証。漏れると他人があなたの名前で使える(=課金される)
Cloudflare Pages画面(HTML/CSS/JS)を置く場所。訪問者のブラウザに届く側
Cloudflare Workers処理を実行するサーバー。秘密の鍵を安全に置けるのはここ
Cloudflare D1データを保存するデータベース
SecretsCloudflare側に登録した鍵。一度入れると画面から読み出せなくなる(=安全)
wranglerCloudflareを操作するコマンドツール。「ラングラー」と読む
.gitignore「このファイルはGitに含めない」という指定ファイル
コミット変更をGitの履歴に記録すること。記録したものは消しにくい
フロントエンド訪問者のブラウザで動く部分。中身は全部見られる
バックエンドサーバー側で動く部分。訪問者からは中身が見えない
シンボリックリンク別の場所にあるファイルへのショートカット。実体は動かさずに参照だけ張る
Revoke発行済みの鍵を無効化すること。漏洩時の最優先アクション