Rails Devise入門 (第1回):インストールと基本設定

Railsアプリケーション開発において認証機能は頻繁に要求されます。Deviseは、この認証レイヤーの実装を標準化・効率化するGemであり、デファクトスタンダードとして広く利用されています。

本シリーズではDeviseの導入から応用までをステップバイステップで解説します。第1回は、Devise Gemのインストールと基本的な初期設定手順、そして認証モデルの準備に焦点を当てます。

目次

Deviseの概要とアーキテクチャ

DeviseはRailsエンジンとして実装された認証ソリューションであり、MVCに基づいた一連のコンポーネントを提供します。主な技術的特徴は以下の通りです。

モジュール

認証に関する責務は複数のモジュールに分割されており、必要な機能をモデルに include する形で選択的に利用できます。主要なモジュールとその機能は以下のテーブルに示します。

モジュール名主な機能
database_authenticatableDB上のパスワードハッシュを用いた認証
registerable ユーザー登録(アカウント作成)処理
recoverable パスワードリセット機能(トークン発行とメール送信)
rememberable “Remember me” 機能(Cookieによるセッション維持)
validatableEmail/パスワードの基本的なバリデーションを提供
confirmableメールアドレス確認(確認トークンとメール送信)
lockable ログイン試行失敗によるアカウントロック
timeoutable 一定時間無操作によるセッション失効
trackable サインイン回数、日時、IPアドレスの記録
omniauthable OmniAuthを利用した外部サービス認証連携(OAuth等)

標準化さたインターフェース

認証に関連するコントローラー、ヘルパーメソッド (current_user, user_signed_in? 等)、ルーティングヘルパーを提供し、アプリケーション全体で一貫したインターフェースを利用可能にします。

設定と拡張性

  • config/initializers/devise.rb による広範な設定項目(パスワード長、ロック戦略、タイムアウト期間など)。
  • Generator (rails g devise:views, rails g devise:controllers) によるビューやコントローラーのejectとカスタマイズ。
  • Devise::FailureApp のオーバーライドによる認証失敗時の挙動変更など、多数のカスタマイズポイントを提供。
  • 実績: Railsコミュニティで長年にわたり広く利用されており、安定性と情報量の豊富さには定評があります。

前提環境

DockerおよびDocker Composeを用いてRailsアプリケーションとその依存サービス(データベース等)をコンテナとして管理している開発環境を前提とします。

Step 1: Gemのインストール

Gemfiledevise を追加し、依存関係を解決します。

# Flexible authentication solution for Rails with Warden.[https://github.com/heartcombo/devise]
gem "devise"

ターミナルで以下を実行します。

docker compose run --rm <your_rails_service_name> bundle install

Step 2: 初期設定 (devise:install)

Deviseのinitializerファイルを生成し、基本的なセットアップ指示を得るために rails generate devise:install を実行します。

docker compose run --rm <your_rails_service_name> bin/rails generate devise:install

これによりinitializer (config/initializers/devise.rb – Deviseの多くの挙動を設定するファイル) が生成され、追加で必要となる手動設定に関する指示が標準出力に表示されます。

# (出力メッセージ要約)
# 1. config.action_mailer.default_url_options の設定 (environments/*.rb)
# 2. root パスの設定 (config/routes.rb)
# 3. Flashメッセージ表示コードの追加 (Layout)
# 4. Viewカスタマイズ用コマンド (rails g devise:views) の案内

これらの指示に基づき、必要な設定を行います。

1. Action Mailer: default_url_options

Deviseはパスワードリセット通知等でメーラーを使用します。メーラー内で url_for ヘルパーがURLを正しく生成できるよう、環境設定ファイル (config/environments/*.rb) に config.action_mailer.default_url_options を設定します。開発環境では通常以下のようになります。

# config/environments/development.rb
Rails.application.configure do
  # ...
  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
  # ...
end

Production環境では、実際のアプリケーションホスト名(ドメイン)を :host に指定してください。

2. ルートパス (root)

認証後のリダイレクト処理などで利用されるため、アプリケーションのルートパス (root) が config/routes.rb に定義されている必要があります。未定義の場合は追加します。

a. Homeコントローラーとビューの作成(サンプル)

まず、ルートパスに対応するコントローラーとビューを作成します。ここでは例として HomeControllerindex アクションを作成します。(Docker環境の場合はコンテナ内で実行)

docker compose run --rm <your_rails_service_name> bin/rails g controller Home index

これにより、app/controllers/home_controller.rbapp/views/home/index.html.erb が生成されます。

b. ルートパスの設定

config/routes.rbroot を設定します。

# config/routes.rb
Rails.application.routes.draw do
  root to: "home#index" # 例: HomeController#index をルートに設定
  # ...
end

3. Flashメッセージ表示

認証結果などのフィードバックはFlash (notice, alert) を介して行われます。これらをユーザーインターフェースに表示するため、アプリケーションレイアウト (app/views/layouts/application.html.erb 等) に対応する表示コードを追加します。

<%# app/views/layouts/application.html.erb %>
<body>
  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>
  <%= yield %>
</body>

4. Devise Views (任意)

rails g devise:views コマンドを実行すると、Deviseが内部で持つビューファイル一式が app/views/devise/ 配下にコピーされます。これによりUIのカスタマイズが可能になりますが、詳細は本シリーズの後の回で扱います。

Step 3: 認証モデル (User) の生成

rails generate devise MODEL コマンドで、認証対象となるモデル(ここでは User)と関連ファイルを生成します。

docker compose run --rm <your_rails_service_name> bin/rails g devise User

このジェネレーターは主に以下の処理を実行します。

1.モデルファイルの変更/生成

app/models/user.rb を生成/変更し、devise メソッド呼び出しを追加(デフォルトモジュールを含む)。

2.マイグレーションファイルの生成

db/migrate/ 配下に users テーブル作成用のマイグレーションファイルを生成。

# 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

Step 4: マイグレーションの実行

生成されたマイグレーションを実行し、データベーススキーマに users テーブルを反映させます。

# Dockerコンテナ内で実行
docker compose run --rm <your_rails_service_name> bin/rails db:migrate

Step 5: 基本動作確認

開発サーバーを起動します。

docker compose up

起動後、Webブラウザ等からDeviseが提供するパス(例: http://localhost:3000/users/sign_in)にアクセスします。Deviseのデフォルトビュー(通常はスタイル未適用)が表示されれば、ルーティングが有効化され、基本的なセットアップが完了していることを示します。

まとめと次回予告

本稿では、Devise Gemのインストールから、devise:install による初期設定、devise MODEL による認証モデルとマイグレーションファイルの生成、そして db:migrate の実行まで、Deviseを導入するための基本的な手順を解説しました。

これにより、Deviseを利用するための基盤となる設定とデータベーススキーマの準備が整いました。

次回は、config/routes.rbdevise_for ルーティングを追加し、実際のユーザーサインアップ、サインイン、サインアウト処理を有効化する手順を解説します。また、コントローラーやビューで利用可能なDeviseのヘルパーメソッドについても触れる予定です。

未経験からエンジニアへ転職!おすすめの転職サービスはこちら

「未経験だけどエンジニアになりたい…」「IT業界に興味があるけど、どこから始めるべきかわからない…」
そんな方におすすめなのが、プログラミングスクールを活用した転職活動です。
実績豊富なスクールを利用すれば、未経験からでもエンジニアとしての転職がぐっと近づきます!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次