家計簿アプリを作る #88:Cloudflare Pages への再デプロイ

家計簿アプリ作成シリーズの第88回です。前回のE2Eテスト導入の途中で、アプリ側にもいくつか修正が入ったので、本番環境へ反映します。

今回反映する変更

  • 設定画面のTabItemからkeyを削除(タブボタンと入力欄のIDが重複し、ラベルが別の要素に紐付いていた不具合の修正)
  • バックアップタブの<Label>から、対応する入力欄の無いforを削除
  • アカウント削除でtransactionTemplatesとbudgetAlertsが消えていなかったのを修正し、削除をdb.batch()でまとめて実行

Playwright関連のファイル(e2e/、playwright.config.ts、@playwright/test)は開発時にだけ使うもので、Workerには含まれません。テーブル・カラムの追加も無いので、マイグレーションは不要でした。

ローカルでnpm run buildは必要か

このアプリはGitHubにpushすると、Cloudflare側でビルドとデプロイが走る構成です。そのため、デプロイのためだけにローカルでビルドする必要はありません。

ローカルビルドに意味があるとすれば、push前にビルドエラーが無いか確かめる事前チェックとしてです。ただ今回はそれも済んでいました。playwright.config.tsのwebServerがnpm run build && npx wrangler devなので、npm run test:e2eを実行するたびにローカルでビルドが走っています。最新のコードでE2Eテストが通っていれば、ビルドも成功しているということです。

Cloudflare側のビルド設定を確認する

代わりに、Cloudflareのダッシュボードでビルド設定を確認しました。

項目 設定
ビルドコマンド npm run build
デプロイコマンド npx wrangler deploy

見ておきたかったのはビルドコマンドです。package.jsonのbuildはvite build && node scripts/patch-worker.jsで、お題81で作ったpatch-worker.jsがここで実行されます。Cloudflare側のビルドコマンドがvite buildだけになっていると、scheduledハンドラの無いWorkerがデプロイされます。その場合もビルドは成功し、画面も普通に動くので、月初にサマリーメールが届かないことで初めて気付くことになります。ローカルとCloudflareで同じコマンドが走っていることを確認できました。

本番環境での動作確認

設定画面

  • タブを切り替えたとき、選んだタブだけがハイライトされること
  • アカウントの削除タブで「パスワードを入力してください」の文字をクリックすると、タブが切り替わらずに入力欄にフォーカスが移ること

アカウント削除

漏れていたテーブルが本当に消えるかは、画面を見ても分かりません。本番の自分のアカウントは使わず、確認用のアカウントを作って確かめました。

  1. 確認用アカウントでログインし、クイック登録のテンプレートを1件作る
  2. 削除する前に、そのユーザーのIDを控えておく
    npx wrangler d1 execute kakeibo-app-db --remote --command "SELECT id FROM user WHERE email = '確認用のメールアドレス'"
    
  3. 設定画面からアカウントを削除する
  4. 控えたIDのテンプレートが残っていないことを確認する
    npx wrangler d1 execute kakeibo-app-db --remote --command "SELECT COUNT(*) FROM transaction_templates WHERE user_id = '控えたID'"
    

件数が0になり、修正が本番でも効いていることを確認できました。

なお、E2Eテストは本番に向けては実行していません。テストはアカウントの作成と削除を実際に行うので、本番に向けると本番のDBを直接触ることになります。baseURLはlocalhost固定のままにしています。

まとめ

GitHub連携でデプロイしている場合、ローカルビルドは「デプロイの手順」ではなく「push前の確認」です。E2Eテストのサーバー起動にビルドが含まれているので、テストを回す習慣がそのまま確認を兼ねてくれます。確認すべきなのはむしろ、Cloudflare側でローカルと同じビルドコマンドが走っているかの方でした。

← トップページに戻る