0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】初学者がDeviseを導入させてみた

Last updated at Posted at 2025-03-14

はじめに

初めまして。現役看護師をしながら、エンジニア転職を目指しRuby on Railsを勉強しています。
アウトプットのために、Devise を使ったユーザー認証の実装方法を調べながら試してみたので、その手順をまとめました。


記事内容

  • Devise のインストール方法
  • ユーザー登録 & ログインの実装
  • Devise のビューをカスタマイズ
  • before_action :authenticate_user! で認証を保護

完成イメージ

  • /users/sign_up → ユーザー登録ページ
  • /users/sign_in → ログインページ
  • /users/sign_out → ログアウト(DELETE メソッドで実行)

Devise のインストール

① Gem を追加

Gemfile に以下を追加し、bundle install を実行

gem "devise"
bundle install

Devise のセットアップ

① Devise のセットアップコマンドを実行

rails g devise:install

実行すると、いくつかの設定項目が表示される。

config/environments/development.rb にメール送信の設定を追加

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

パスワードリセットなどのメールリンクが正しく動作するよようになる。


User モデルの作成

① User モデルを Devise で作成

rails g devise User

このコマンドで User モデルが作成され、マイグレーションファイルも生成される。

② マイグレーションを実行

rails db:migrate

Devise のルーティングを確認

config/routes.rb を確認すると、次のように devise_for :users が追加されているはず。

Rails.application.routes.draw do
  devise_for :users
  root to: "home#index"  # ホームページを設定
end

devise_for :users だけで、ユーザー登録・ログイン・ログアウト・パスワードリセットなどのルートが自動で設定さるはず。

確認方法

rails routes | grep users

実行すると、以下のようなルートが表示される。

new_user_session  GET    /users/sign_in
user_session      POST   /users/sign_in
new_user_registration GET    /users/sign_up
user_registration POST   /users

/users/sign_up で新規登録
/users/sign_in でログイン
/users/sign_out でログアウト(DELETE メソッドが必要)


ログイン必須のページを作成

ログインしていないユーザーを制限するには、before_action :authenticate_user! を。

例えば、boards_controller.rb を作成して、ログインしたユーザーのみが index を見られるようにするには以下のような感じになるらしい。

class BoardsController < ApplicationController
  before_action :authenticate_user!  # ログインユーザーのみアクセス可能

  def index
    @boards = current_user.boards
  end
end

これで未ログインのユーザーがアクセスすると、自動でログインページにリダイレクトされる。


Devise のビューをカスタマイズ

デフォルトの Sign UpSign In ページをカスタマイズしたい場合は、以下のコマンドを実行。

rails g devise:views

すると、app/views/devise/ 以下に以下のようなフォルダが作成されます。

app/views/devise/
 ├── registrations/  # ユーザー登録関連
 │   ├── new.html.erb  # 新規登録ページ
 │   ├── edit.html.erb # プロフィール編集ページ
 ├── sessions/        # ログイン関連
 │   ├── new.html.erb  # ログインページ

これでログイン画面をカスタマイズ可能に


動作確認

サーバーを起動

bin/rails server

ブラウザでアクセス

ログイン後、トップページ (root_path) にリダイレクトされるか確認を。


まとめ

rails g devise:install で Devise をセットアップ
rails g devise Userusers モデルを作成
rails db:migrate でマイグレーションを適用
devise_for :users でログイン・ログアウトのルートが自動生成
before_action :authenticate_user! で未ログインユーザーを制限
rails g devise:viewsSign Up / Sign In ページをカスタマイズ

これで Rails に Devise を導入し、認証機能を実装されました。


疑問

「ログイン後に特定のページへリダイレクトしたい」

class ApplicationController < ActionController::Base
  def after_sign_in_path_for(resource)
    boards_path  # ログイン後にボード一覧ページへリダイレクト
  end
end

「メール認証を追加したい」

t.string :confirmation_token
t.datetime :confirmed_at
t.datetime :confirmation_sent_at

これを db/migrate/xxxx_add_devise_to_users.rb に追加し、rails db:migrate を実行。


Devise は、Rails の認証機能を実装できる便利な Gem であることを知りました
カスタマイズ性が高いのが、とても素晴らしいと感じました。
引き続き、学習を続けます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?