家計簿アプリを作る #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 全体の見直しを行います。