アットウィキロゴ

Device

Devise の変更点(2025 年版)

Rails 3〜4 時代と比べ、2025 年までの Rails 5〜8 の変化により、Devise の使い方も少しずつ変わってきた。
ここでは、現在の Rails(7.x〜8.x)での Devise の使い方・変更点をまとめる。


■ 全体的な変化ポイント

  • Strong Parameters に完全移行
  • Turbo(Hotwire)との互換性問題
  • Request Spec / System Spec の一般化
  • OmniAuth の利用が非推奨傾向に
  • Credentials による秘密情報管理が主流
  • ルーティングや Controller カスタマイズが前提になりつつある

■ Strong Parameters 対応(Rails 4 以降の標準)

Rails 3 時代のようにモデルに attr_accessible を書く必要はなくなり、
Devise でも parameter sanitizer の設定が必須になった。

● 例

application_controller.rb

before_action :configure_permitted_parameters, if: :devise_controller?

def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  devise_parameter_sanitizer.permit(:account_update, keys: [:name])
end

■ Turbo(Rails 7)との互換性問題

Rails 7 の Turbo は、Devise の redirect や失敗時レンダリングと衝突することがある。
そのため、respond_to の追加Turbo 無効化が必要。

● Turbo 対応版 SessionsController

class Users::SessionsController < Devise::SessionsController
  respond_to :html, :turbo_stream
end

● Turbo を form 側で無効化

<form data-turbo="false">
…
</form>

■ ルーティング(devise_for)の現在の一般的な書き方

Rails 5〜7 では コントローラ分離が前提のアプリが増えている。

● 例

devise_for :users, controllers: {
  sessions: "users/sessions",
  registrations: "users/registrations"
}

■ OmniAuth 統合の変更点(非推奨傾向へ)

昔(Rails 3〜4 時代)は「Devise + OmniAuth」が鉄板構成だったが、
近年は以下の理由で 分割利用 or 自前構築が推奨される流れ

  • セキュリティ更新が遅い
  • Turbo / importmap / Vite と絡むと挙動が複雑
  • gem 依存が増えてトラブルが多い

現在のよくある構成:

  • OmniAuth 単体
  • Sorcery + OmniAuth
  • Rails 側での oauth 実装(Gem なし)

■ Mailer周りの設定(URL必須に)

Devise のメールリンクは Rails 側の URL オプション設定が必須。

config/environments/development.rb

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

昔は「なくても動く」ことが多かったが、
現在は 必ず設定が必要


■ テスト(RSpec / System Test)の変更点

Rails 5.1 以降、System Test が標準化したためテスト方法が変わった。

● Request Spec の場合

spec/support/devise.rb

RSpec.configure do |config|
  config.include Devise::Test::IntegrationHelpers, type: :request
end

● System Spec の場合(Warden)

login_as(user, scope: :user)
visit root_path

Controller Spec は廃止傾向で、Request Spec / System Spec へ移行が正しい


■ Credentials を使った秘密情報の管理

Rails 5.2 以降、credentials.yml.enc が標準化。
Devise の pepper や secret key base を管理しやすくなった。

● 例

config/credentials.yml.enc の内容例

devise:
pepper: abc123xyz987

■ Devise の内部仕様(暗号化)

  • BCrypt が引き続き標準
  • パスワードのストレッチコストは環境で自動調整
  • SessionsController の挙動は大きくは変わらず

■ 昔(Rails 3〜4)との主要な差分まとめ

項目 昔 (Rails 3〜4) 今 (Rails 7〜8)
パラメータ attr_accessible Strong Parameters
フロント jQuery / UJS Turbo (Hotwire)
認証フロー form+redirect Turbo との衝突に注意
秘密情報 secrets.yml credentials.yml.enc
テスト Controller Spec Request / System Spec
JS Sprockets Importmap / Vite / Bun
OmniAuth Deviseに組込 分割 or 非推奨傾向

■ まとめ

  • Rails の進化による影響が大きい(Turbo / Credentials / テスト方式)
  • Strong Parameters 前提で sanitizer 設定が必要
  • Turbo 対応はほぼ必須
  • OmniAuth 統合は今は非推奨傾向
  • ルーティングやコントローラ分離が一般化

Devise 自体の根本 API は大きく変わっていないが、
Rails 側の仕様変更に合わせて「書き方の正解」が変わっているのがポイント。

最終更新:2025年12月09日 09:08