家計簿アプリを作る #15:再デプロイと最新月の自動選択

家計簿アプリ作成シリーズの第15回です。ここまでの実装を Cloudflare Pages に再デプロイし、あわせてログイン直後に最新月が自動選択される UX 改善を実装します。

Cloudflare Pages への再デプロイ

git add .
git commit -m "Add monthly filter and form improvements"
git push origin main

push 後、Cloudflare Pages が自動でビルド・デプロイします。

UX 改善:ログイン直後に最新月を自動選択

課題

ログイン直後(?month クエリパラメータなし)は全件表示されており、フィルタリングされていない状態でした。最新月のデータが自動で表示される方が使いやすいと判断し、改善しました。

実装

load 関数で selectedMonth が未指定かつデータが存在する場合に、最新月へ redirect します。

const selectedMonth = url.searchParams.get('month');

// 年月のリストを先に生成
const uniqueMonths = Array.from(
  new Set(
    allTransactions.map((t) => {
      const date = new Date(t.date);
      return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}`;
    }).sort((a, b) => (a > b ? -1 : 1))
  )
);

// 年月未指定かつデータがある場合は最新月にリダイレクト
if (!selectedMonth && uniqueMonths.length > 0) {
  redirect(303, `/?month=${uniqueMonths[0]}`);
}

goto ではなく redirect を使う理由

load 関数はサーバーサイドで実行されるため、ブラウザ用の goto$app/navigation)は使えません。サーバーサイドでのリダイレクトには redirect を使います。

データが0件のときの考慮

uniqueMonths.length > 0 の条件を入れることで、データが0件のときは全件表示(空のテーブル)にフォールバックします。最初に全件自動選択案(A案)を避けた理由でもあります。

まとめ

ポイント 内容
再デプロイ git push で Cloudflare Pages が自動デプロイ
最新月の自動選択 load 内で redirect を使って最新月へ誘導
goto は使えない load はサーバーサイドのため redirect を使う
0件のケア uniqueMonths.length > 0 で空データ時はフォールバック

次回は UI 全体の見直しを行います。

← トップページに戻る