【フォーム開発実践】認証やお問い合わせフォームをNext.js/RHF/zod等のモダン技術を使って開発する実践講座
アプリ/サイト開発で必須になるフォーム開発。モダンな技術である「Next.js」「react-hook-form」「zod」「shadcn/ui」を使ってバリデーションチェック済みの堅牢性の高いフォームの作り方をご紹介します。ファイル送信機能付きフォームも解説しています。また、Supabase Authenticationを利用してユーザー認証用フォームまで実装します。
本講座で学べること
本講座の完成品ソースコード
本セクションの完成品のデモ
まずはNext.jsでプロジェクトの雛形を作成しよう
shadcn/uiをプロジェクトに導入してみよう
お問い合わせフォームコンポーネントの作成を開始しよう
shadcn/uiのフォームを使ってフォームのレイアウトを作ろう
react-hook-formをフォームに導入しよう
zodライブラリを使ってフォームスキーマ定義をしよう
zodResolverを導入してスキーマの型定義を適用させよう
zodResolverを導入してスキーマの型定義を適用させよう
送信の確認とバリデーションチェックができているか確認しよう
useMailForm()のカスタムフックスを作ってリファクタリングしよう
useCallbackでカスタムフックス内の関数をメモ化しよう
Resendを利用してメール送信機能の実装を始めよう
Gmailに送られるテンプレートコンポーネントを作成しよう
Gmail送信APIを作ってみよう
Postmanを使ってメール送信APIテストをしてみよう
メールフォームからGmail送信APIを叩いてテストしてみよう
フォーム入力した内容が正常に送信されるかチェックしてみよう
ファイル送信項目をお問い合わせフォームに追加しよう
ファイル型定義やバリデーションチェックをスキーマに追加しよう
画像サイズ・種類を制限するバリデーションチェックも含めよう
ファイルデータを文字列と一緒に送信するにはどうすれば良いのか
ファイルバリデーションエラー状態を修正しよう
formDataを使ってfileを送信できる形にしてみよう
api側でformDataの情報を取り出してアタッチしてみよう
Fileオブジェクトからバッファオブジェクトを取り出して画像ファイル送信してみよう
送信時にローディング状態を実装しよう
送信成功時にトースターを出してみよう
開発したお問い合わせフォームをデプロイしてみよう
本セクションの完成品デモ
Next.jsでプロジェクトの雛形を作成しよう
認証ページに遷移するためのページを作ろう
1からユーザー新規登録ページをTailwindCSSで作成しよう
Input入力コンポーネントを作成しよう
Propsを付与してコンポーネントを受け取る側で動的に変更させよう
送信ボタン用コンポーネントを作成しよう
react-hook-formを導入してフォームの状態管理をしよう
zodを導入して型定義とバリデーションチェックをしよう
カスタムフックスを呼び出してバリデーションチェックができているか確認しよう
ログインページを作成しよう
新規登録とログインページ間を移動できるリンクを設置しよう
Supabase Authenticationでユーザー管理を始めよう
ユーザーテーブルを作成してユーザー情報を保存できるようにしよう
Supabaseへユーザーを登録・管理してみよう
新規登録時にユーザー情報をテーブルへ保存しよう
RLSポリシーを変更してテーブルにアクセスできるようにしよう
既に同じユーザーが存在した場合はそのバリデーションエラーを出そう
重複エラーをユーザーに分かりやすい形で表示しよう
ユーザーログイン機能を実装しよう
メール未確認やユーザーが存在しない場合のバリデーションチェックをしよう
実際にメール確認をしてサービスにログインしてみよう
getSessionを使って本当にログインできているか確認してみよう
メール確認を促すページを作成しよう
Supabaseから届くメール本文内容を修正しよう
ユーザーログアウト機能を実装しよう
ユーザー状態は状態管理ライブラリやHooksで管理しよう
ボーナスレクチャー