Softex CelwareTech Blog
Next.js + Supabase2026-05-27

修正フォームの近くに参考情報を表示して入力ミスを減らすパターン

過去データの修正フォームで、判断材料になる参考情報を入力欄の近くに表示する実装パターンを解説します。

Next.jsSupabaseReactフォームらくログタスク

はじめに

過去データを修正する画面では、ユーザーが「何を見て正しい値を判断するか」が重要です。

入力欄だけを置くと、ユーザーは記憶や別画面に頼って修正することになります。退勤時刻を直すなら、最後の作業開始時刻や作業名が近くにあるだけで、入力ミスをかなり減らせます。

この記事では、Next.jsSupabase の画面で、修正フォームの近くに参考情報を表示するパターンを紹介します。

こんな場面で使えます

  • 退勤時刻を修正するとき、最後の作業開始時刻を見せたい
  • 作業時間を直すとき、前後の作業時刻を見せたい
  • 請求対象を修正するとき、単価や対象時間を見せたい
  • 在庫数を修正するとき、直前在庫や入出庫履歴を見せたい
  • ステータス変更時に、最終更新日時や更新者を見せたい

参考情報は、入力値そのものではなく判断材料です。自動で値を決めるのではなく、ユーザーが確認しながら正しい値を入れられる状態を作ります。

解決する問題

修正フォームに入力欄だけが並んでいると、ユーザーは次のような行動を取りがちです。

  • 別画面を開いて過去履歴を確認する
  • 記憶だけで時刻や数値を入力する
  • 迷ったまま仮の値を入れる
  • 修正後に違和感に気づき、再度直す

入力欄のすぐ近くに、判断に必要な1から2項目の参考情報を出すと、修正作業が短くなり、入力ミスも減ります。

実装例

関連する参考情報をまとめて取得する

一覧に複数の修正対象がある場合、1件ずつ Supabase へ問い合わせるとN+1クエリになりやすくなります。対象のIDをまとめて渡し、関連する明細を一括取得します。

const { data: histories } = await supabase
  .from("work_history")
  .select("history_id, work_day_id, task_name, started_at, sort_order")
  .in("work_day_id", workDayIds)

画面表示に必要な列だけを select しておくと、余計なデータを持たずに済みます。

最後の明細を日別にまとめる

退勤時刻の修正であれば、最後に開始した作業が参考になります。取得した明細から、作業日ごとの最後の明細を作ります。

type LastHistorySummary = {
  history_id: string
  work_day_id: string
  task_name: string
  started_at: string
  sort_order: number
}

const lastByWorkDayId: Record<string, LastHistorySummary> = {}

for (const history of histories || []) {
  const current = lastByWorkDayId[history.work_day_id]

  if (!current || history.sort_order > current.sort_order) {
    lastByWorkDayId[history.work_day_id] = history
  }
}

このようにマップ化しておくと、JSX側では work_day_id からすぐに参考情報を取り出せます。

入力欄の近くに表示する

参考情報は、入力欄から離れた場所ではなく、同じ行または同じカードの中に置きます。

<td>
  {lastHistory ? (
    <div className="text-sm text-gray-600">
      <div>最後の開始: {toHHMM(lastHistory.started_at)}</div>
      <div>{lastHistory.task_name}</div>
    </div>
  ) : (
    <span className="text-gray-400">-</span>
  )}
</td>

参考情報がない場合は空欄にせず、- などで「情報なし」と分かるようにします。空欄だと、読み込み漏れなのか、もともと情報がないのか判断しづらくなります。

参考情報の選び方

表示する情報は、多ければよいわけではありません。入力判断に直接役立つものだけに絞ります。

| 修正対象 | 参考情報の例 | |---|---| | 退勤時刻 | 最後の作業開始時刻、最後の作業名 | | 作業時間 | 前後の作業時刻、合計時間 | | 請求金額 | 単価、対象時間、前回請求額 | | 在庫数 | 直前在庫、入出庫履歴 | | ステータス | 最終更新日時、更新者 |

モバイル画面では列が増えすぎると読みにくくなります。時刻と短いラベルだけにするなど、表示量を調整してください。

注意点

  • 参考情報と保存値を混同しない
  • 自動入力する場合は、ユーザー確認を挟む
  • 参考情報を増やしすぎて、フォームの主役を奪わない
  • 一覧画面ではN+1クエリを避ける
  • 参考情報がない場合の表示も決めておく

参考情報は、あくまで判断材料です。保存処理では、ユーザーが入力した値と、参考表示用の値を明確に分けて扱います。

らくログタスクでの実績

らくログタスクでは、退勤忘れ一覧で最後の作業開始時刻と作業名を表示しました。

ユーザーは「この作業を始めたあと、何時ごろ退勤したか」を思い出しやすくなり、退勤時刻の修正を別画面に移動せず行えるようになっています。

関連リンク

まとめ

修正フォームでは、入力欄だけでなく、ユーザーが正しい値を判断するための参考情報も設計対象です。

Next.jsSupabase では、関連データをまとめて取得し、画面側でマップ化してから入力欄の近くに表示すると、実装も表示も扱いやすくなります。

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →