はじめに
Railsでログイン等の認証機能をdeviseで実装する機会があったので手順をまとめておく。
deviseとは
以下のような認証機能を簡単に実装することができるgem
- ユーザー登録
 - ログイン
 - ログアウト
 - 登録情報の編集
 - パスワード変更、再発行
 
導入手順
1. Gemfileに以下を追記する
Gemfile
gem 'devise'
2. deviseの設定ファイルを作成する
$ rails g devise:install
コマンドを実行することで以下二つの設定ファイルが作成されます。
- config/initializers/devise.rb
 - config/locales/devise.en.yml
 
3. モデルを作成する
- 認証機能を付与したいモデルを作成する
 - 
generationの後はmodelではなくdeviseとすることに注意する 
$ rails g devise User
- 以下のようにmigrationファイルやモデルクラスファイルが作成されます。
 
      invoke  active_record
      create    db/migrate/20211206135237_devise_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml
      insert    app/models/user.rb
       route  devise_for :users
3-1. Userモデルを確認してみる
デフォルトでは6つのモジュールが用意されており、パスワードの検証や、トークンの生成、ログイン回数のカウント等を行ってくれます。
app/models/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
end
※ こちらの記事に詳しく書かれております。
4. migrationファイルをDBに反映する
$ rails db:migrate
4-1. 新しく作成されたカラムを確認してみる
1. Docker上のMySQLコンテナに接続しログインする
$ docker-compose exec db bash
root@....:/# mysql -u user -p
2. コマンドでusersカラムを確認する
mysql>show databases; # データベースの確認
mysql>show tables from <データベース名>; # テーブルの確認
mysql>show columns from <テーブル名(今回はusers)> from <データベース名>; # カラムの確認
+------------------------+--------------+------+-----+---------+----------------+
| Field                  | Type         | Null | Key | Default | Extra          |
+------------------------+--------------+------+-----+---------+----------------+
| id                     | bigint       | NO   | PRI | NULL    | auto_increment |
| email                  | varchar(255) | NO   | UNI |         |                |
| encrypted_password     | varchar(255) | NO   |     |         |                |
| reset_password_token   | varchar(255) | YES  | UNI | NULL    |                |
| reset_password_sent_at | datetime     | YES  |     | NULL    |                |
| remember_created_at    | datetime     | YES  |     | NULL    |                |
| created_at             | datetime(6)  | NO   |     | NULL    |                |
| updated_at             | datetime(6)  | NO   |     | NULL    |                |
+------------------------+--------------+------+-----+---------+----------------+
8 rows in set (0.12 sec)
5. 新規登録画面を確認してみる
- 
http://localhost:3000/users/sign_up にアクセスし以下の画面になれば正しく動作しています。
 
ビューを作成する
$ rails generate devise:views users
ログをみるとviewに関する色々なファイルが作成されていることがわかります。
カスタマイズする際は以下のファイルを編集します。
- 新規登録画面: 
app/views/devise/registrations/new.html.erb - ログイン画面: 
app/views/devise/sessions/new.html.erb 
以上が簡単な流れになります。
※ 編集したViewが反映されない場合
手順2 で作成されたconfig/initializers/devise.rbのconfig.scoped_viewsのコメントアウトを外しtrueに変更してください。
config/initializers/divise.rb
config.scoped_views = true
参考