ウェブ · COURSE
フォームバリデーション総点検
クライアント / サーバー両側のチェック漏れを Claude で洗い出す。
audience
Web エンジニア(フロント・バックエンド)
duration
60分
lessons
5 章
reviewed
2026.05
先に読むとよい
達成目安
全 5 レッスンを読み、コース完了マークを付ける
未完了
クイズ 3 問に挑戦し、正答率 80% 以上
未挑戦
コース構成
このコースで学ぶこと
- 01
“ある日突然エラー”の正体
本番で起きる『謎の 500』や『どこにも保存されていない注文』のかなりの割合は、バリデーションのクライアント / サーバー齟齬で起きる。
- クライアントだけ厳しくしてサーバーが受け入れている
- サーバーは弾くがエラーメッセージがフロントに届かない
- 正規表現が違う(電話番号 / 郵便番号)
- 02
Claude に“スキーマの正”を握らせる
zod や pydantic のスキーマを 1 つの“正”として、Claude にフロントとバックの実装を突き合わせさせる。
ts// schemas/contact.ts (唯一の真実) import { z } from "zod"; export const Contact = z.object({ name: z.string().min(1).max(50), email: z.string().email(), phone: z.string().regex(/^0\d{1,4}-\d{1,4}-\d{4}$/), }); - 03
突き合わせプロンプト
“スキーマと、フロントの form コンポーネントと、API ハンドラの 3 つを比較して齟齬を出して” と頼む。
text@schemas/contact.ts と @components/ContactForm.tsx と @app/api/contact/route.ts を読み、以下の表で出力して: | 項目 | スキーマ | フロント | サーバー | 差分 |出力イメージ突き合わせ結果の表| 項目 | スキーマ | フロント | サーバー | 差分 | |------|----------|----------|----------|------| | name | 1〜50 字 | 1〜50 字 | 上限チェックなし | ⚠ サーバーが 50 字超を受理 | | email | email 形式 | email 形式 | email 形式 | — | | phone | ハイフン必須 | ハイフン任意 | ハイフン必須 | ⚠ フロントの正規表現が緩い | 差分 2 件を検出。Issue 化を推奨します。
手を動かす
0 / 2
- 04
エラーメッセージの一括日本語化
ライブラリ既定の英語メッセージは UX を著しく下げる。日本語化マップを 1 ファイルにまとめると、Claude も将来の自分も助かる。
tsexport const fieldErrorMessages = { name: { min: "氏名を入力してください", max: "50 字以内で入力してください" }, email: { invalid: "メールアドレスの形式が正しくありません" }, phone: { regex: "電話番号はハイフンつき(例: 03-1234-5678)で入力してください" }, }; - 05
Skill 化と CI 組み込み
“スキーマ突き合わせ” は CI で回すと最も価値が出る。週次ジョブで全フォームを再点検する。
Lv.5 — 安全な実行手を動かす
0 / 3
理解度チェック
Q1.フォームバリデーションの齟齬を防ぐ Skill の前提は?
Q2.個人情報を扱うフォームのバリデーションを AI 補助で見直すとき、人間が必ず担当すべきは?
Q3.フォームバリデーション齟齬検出 Skill の入力として最も自然なものは?