はじめに
本記事では、Railsアプリにおける「ユーザー管理機能(新規登録・ログイン)」の実装手順を、復習と備忘録を兼ねてまとめます。
ユーザー管理にはdeviseを利用するので、devise導入からバリデーション、日本語化、テストまで一通りの流れになります。
1. deviseの導入
Gemfile
gem 'devise'
コマンド
bundle install
rails generate devise:install
解説:
- deviseはユーザー認証の定番gemで、インストール後にセットアップコマンドで初期設定ファイルが生成される
 
2. Userモデルの作成
コマンド
rails generate devise User
rails db:migrate
解説:
- devise用のUserモデル・テーブルを自動生成
 - 
db/migrate/配下のマイグレーションでusersテーブルが作られる 
3. Userモデルのバリデーション追加
ファイル: user.rb
class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  # バリデーションを追加
  validates :nickname, :last_name, :first_name, :last_kana, :first_kana, :birthday, presence: true
  # パスワードのバリデーション
  validates :password, format: { with: /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i, message: 'は半角英数字を両方含む必要があります' }, allow_nil: true
  # 名前(全角)のバリデーション
  validates :last_name, :first_name, format: { with: /\A[ぁ-んァ-ヶ一-龥々ー]+\z/, message: 'は全角(漢字・ひらがな・カタカナ)で入力してください' }
  # 名前カナ(全角)のバリデーション
  validates :last_kana, :first_kana, format: { with: /\A[ァ-ヶー]+\z/, message: 'は全角(カタカナ)で入力してください' }
end
解説:
- deviseの標準バリデーションに加え、独自の必須・形式バリデーションを追加
 - 日本語名・カナ名・生年月日・パスワード形式などをチェック
 
4. 新規登録・ログイン画面のカスタマイズ
ファイル:
app/views/devise/registrations/new.html.erbapp/views/devise/sessions/new.html.erb
ポイント:
- フォーム項目を追加・日本語化
 - 
f.text_field :nicknameなど、Userモデルの属性に合わせてフォームを編集 
5. 日本語化(エラーメッセージ・属性名)
ファイル: ja.yml
ja:
  activerecord:
    attributes:
      user:
        nickname: "ニックネーム"
        email: "メールアドレス"
        password: "パスワード"
        last_name: "姓"
        first_name: "名"
        last_kana: "姓(カタカナ)"
        first_kana: "名(カタカナ)"
        birthday: "生年月日"
  errors:
    format: "%{attribute} %{message}"
    messages:
      blank: "を入力してください"
      # ...他
解説:
- 属性名を日本語化し、バリデーションエラーも日本語で表示
 - deviseのエラーメッセージも
devise.ja.ymlで日本語化可能 
6. RSpecによるモデルテスト
ファイル: spec/models/user_spec.rb
RSpec.describe User, type: :model do
  before { @user = FactoryBot.build(:user) }
  context '登録できる場合' do
    it '全ての項目が正しく入力されていれば登録できる' do
      expect(@user).to be_valid
    end
    # ...正常系
  end
  context '登録できない場合' do
    it 'ニックネームが空では登録できない' do
      @user.nickname = ''
      @user.valid?
      expect(@user.errors.full_messages).to include("ニックネーム を入力してください")
    end
    # ...異常系(メール重複、パスワード形式、名前形式など)
  end
end
解説:
- FactoryBotでテスト用ユーザーを生成
 - 正常系・異常系をcontextで分けてテスト
 - エラーメッセージは日本語・属性名付きで検証
 
7. コントローラー・ルーティング
ファイル:
- 
config/routes.rbdevise_for :users - 
app/controllers/application_controller.rbbefore_action :configure_permitted_parameters, if: :devise_controller? def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :last_name, :first_name, :last_kana, :first_kana, :birthday]) end 
解説:
- deviseのルーティング・ストロングパラメータ拡張
 - 新規登録時に追加項目も保存できるようにする
 
8. 動作確認
- 新規登録・ログイン・ログアウトが正常に動作するか確認
 - バリデーション・エラーメッセージが日本語で表示されるか確認
 - RSpecテストがすべてパスすることを確認
 
まとめ
- deviseでユーザー管理機能を簡単・安全に実装
 - RSpecでテストも忘れずに実施