コンテンツにスキップ

申込とアカウント作成を同時に行う

典型パターン:申込フォームにパスワード欄 別タブで開く ↗

典型の画面遷移

GET /events/:id/apply メールアドレス入力
POST /events/:id/apply/send-link 認証リンク送信
GET /events/:id/apply?token=xxx 申込フォーム(パスワード欄含む)
POST /events/:id/apply 申込実行(アカウント作成 + 申込登録)
GET /events/:id/apply/complete 完了画面

典型のテーブル構造

  • 設計上の矛盾を感じる - メールリンクで認証済みなのに、さらにパスワードを求められる。二重の手間に見える
  • 目的と関係ない入力を求められる - イベントに申し込みたいだけなのに、パスワードを考えて設定しなければならない
  • バリデーションで何度も止まる - 文字数不足、確認入力の不一致、強度不足など、エラーが起きやすい
  • パスワード疲れが増す - 利用頻度が低いサービスなのに、また1つパスワードが増える
  • 関心事が混在している - 「申し込み」と「アカウント作成」が1つのフォームに混在し、責務が不明確
  • バリデーションロジックが複雑になる - 申込項目のバリデーションとパスワードのバリデーションが混在する
  • テストケースが増える - パスワードの各種バリデーションパターンがテスト対象に加わる
  • パスワード忘れの問い合わせが増える - 利用頻度が低いとパスワードを忘れやすく、リセット対応が発生する

適用する原則: 登録はその場で行う状態と操作を分離する

再設計パターン:パスワード不要で申込 別タブで開く ↗

再設計の画面遷移

GET /events/:id/apply メールアドレス入力
POST /events/:id/apply/send-link 認証リンク送信
GET /events/:id/apply?token=xxx 申込フォーム(トークン検証後)
POST /events/:id/apply 申込実行
GET /events/:id/apply/complete 完了画面
POST /account/set-password パスワード設定(任意・別導線)

再設計のテーブル構造

  • 認証はメールリンク: 典型と同じ方式(ここまでは共通)
  • パスワードを申込から分離: 認証済みなのにパスワードを求めない
  • パスワードは任意: password_hash が NULL でも利用可能
  • 申込フォームがシンプルに: 本当に必要な項目だけ

画面遷移の比較

観点典型再設計
認証方法メールリンク(共通)メールリンク(共通)
フォーム項目申込 + パスワード申込のみ
パスワード必須任意(後から設定可)
バリデーションエラー起きやすい減る
次回ログインパスワード入力メールリンク or パスワード
テストケース多い(パスワード検証含む)少ない(申込項目のみ)
起きやすい不具合パスワード忘れ、強度エラー構造的に発生しない

再設計には主に1つの変更がある。

変更内容効果
1パスワード設定を申込フォームから分離フォームがシンプルになり、離脱が減る

変更1: パスワード設定を分離する

Section titled “変更1: パスワード設定を分離する”
  • 申込フォームからパスワード欄を削除する
  • users.password_hash を NULL 許容にする
  • パスワード設定を別導線(マイページ等)に移動する
  • 次回ログインはメールリンク認証をデフォルトにする
  • 申込フォームの項目が減り、離脱率が下がる
  • パスワード関連のバリデーションエラーが消える
  • 「パスワード忘れ」の問い合わせが減る
懸念対応
パスワードがないと不安パスワードは任意で後から設定可能と案内する
次回ログインが面倒メールリンク認証は1クリックでログイン可能
パスワードを求めるユーザーがいる完了画面やマイページで設定導線を用意する
  1. 影響を確認する: 既存ユーザーのパスワード設定状況を確認する
  2. 段階的に変える: 新規申込からパスワード欄を外し、既存ユーザーは従来通り
  3. 効果を測る: 申込完了率、問い合わせ数の変化を確認する

パスワードを完全に廃止するのではなく、「任意」にすることで段階的に進められる。

  1. 懸念を先に聞く: 「パスワード認証についてどうお考えですか?」
  2. 選択肢を示す: パスワード必須/任意/なしの3パターンを提示する
  3. 推奨を添える: 「利用頻度が低いサービスでは、パスワードレスを推奨します」

セキュリティ要件や業界慣行を確認してから提案する。


方式特徴
メールリンクログインリンクを送信
SMS認証認証コードを送信
OAuthGoogle等の既存アカウント
Passkey生体認証・デバイス認証

利用頻度が低いサービスほど、パスワードレスが有効。