家計簿アプリを作る #16:UI全体の見直し

家計簡アプリ作成シリーズの第16回です。機能実装が一通り完了したので、全ページの UI を見直します。

方針

UI はこだわり始めると際限がないため、機能実装をすべて終えてからまとめて見直す方針としていました。今回はその仕上げです。対象ページは以下の5つです。

  1. ログインページ(/login
  2. サインアップページ(/signup
  3. 一覧ページ(/
  4. 登録フォーム(/transactions/new
  5. 編集フォーム(/transactions/[id]/edit

ログイン・サインアップページ

修正内容

  • ラベル・ボタン・リンクを日本語化
  • placeholder をサンプル値から適切な値に変更
  • 画面中央に配置

画面中央に配置する方法

外側の <div>min-h-screenitems-centerjustify-center を追加します。

<div class="flex flex-col items-center justify-center min-h-screen px-6 py-12">

min-h-screen で画面の高さいっぱいにコンテナを広げ、justify-center で縦方向の中央に配置されます。

サインアップページのバグ修正

名前フィールドの <label>for 属性が "email" になっていました。"name" に修正します。

<!-- ❌ -->
<label for="email">名前</label>
<input id="name" name="name" ... />

<!-- ✅ -->
<label for="name">名前</label>
<input id="name" name="name" ... />

また type="name" は HTML の正式な属性値ではないため、type="text" に修正しました。

一覧ページ

修正内容

  • type の表示を income/expense から「収入」/「支出」に変更
  • 金額にカンマ区切りを追加(toLocaleString()
  • 削除・編集ボタンにスタイルを適用
  • 登録リンクを <button> の中に <a> を入れる形から <a> に直接スタイルを適用する形に修正
  • 登録・ログアウトボタンのレイアウトを改善

type の日本語表示

{transaction.type === "income" ? "収入" : "支出"}

<button> の中に <a> を入れるのは NG

<!-- ❌ HTML 的に不正 -->
<button type="button">
  <a href="...">登録</a>
</button>

<!-- ✅ <a> に直接スタイルを適用する -->
<a href="..." class="text-white bg-brand ...">登録</a>

登録・ログアウトボタンのレイアウト

justify-between で登録ボタンを左、ログアウトボタンを右に配置しました。

<div class="flex justify-between items-center w-full">
  <a href="...">登録</a>
  <form method="POST" action="?/logout" use:enhance>
    <button type="submit">ログアウト</button>
  </form>
</div>

登録・編集フォーム

  • Submit ボタンのラベルを「登録」に変更(編集フォームはすでに「更新」になっていた)
  • スタイルは他ページと統一済みのため変更なし

まとめ

ページ 主な修正内容
ログイン 日本語化・中央配置
サインアップ 日本語化・中央配置・for 属性バグ修正・type="text" 修正
一覧 type 日本語化・金額カンマ区切り・ボタンスタイル・レイアウト改善
登録フォーム ボタンラベル日本語化
編集フォーム 変更なし(スタイル統一済み)
← トップページに戻る