1
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?

deviseのdevise_forで定義されたルーティングで、不必要なルーティングを消す方法(もしくは必要なルーティングを追加する)

Posted at

deviseのdevise_forで定義されたルーティングで、現段階では必要ないと思われるルーティングが定義されていたので、どのように不必要なルーティングを外すかを調べました。

なお、当方初学者であるため、もし間違っている箇所があればこっそり教えていただけると非常に助かります!

前提

$ rails g devise Userを行って、自動で該当のモデルファイルが生成され、加えてconfig/routes.rbdevise_for :usersが加えられている状態とします。

起こっていた事象

devise_for :usersによって生成されるルーティングは以下のように、一括でルーティングが行われていることが確認できます。

スクリーンショット 2025-09-12 13.08.02.png

最初の初期段階では簡易的に実装するため、メールアドレスとパスワードの新規登録・ログインの際の「パスワードリセット機能」や「メールアドレス認証機能」のルーティングが必要ないと考えました。

普通ならルーティングの画面から不必要なルーティングを外せばいいのですが、今回はdevise_for :usersで一括でルーティングが定義されていたため、どのようにすれば該当のルーティングを外せるのかを調べました。

解決

結論としては、「該当のモデルファイルの中にあるdeviseモジュールを削除」すればいいということになります。

公式の詳細なドキュメントには以下のように書かれています。

This method is responsible to generate all needed routes for devise, based on what modules you have defined in your model.

このメソッドは、モデルで有効にしている Devise のモジュールに基づいて、必要なルートをすべて生成します。

つまり、今回のUserモデルでいうと、以下の箇所にdeviseの有効化したいモジュールが記述されているため、そこから「パスワードリセット機能(:recoverable)」と「メールアドレス認証機能(:confirmable)」を一旦削除するようにすれば良いということです。

class User < ApplicationRecord
  # ここで有効化されたモジュールを基にルーティングが生成されている
  devise :database_authenticatable, :registerable, 
          :rememberable, :validatable
end

モジュールを外したのでルーティングを改めて確認すると、該当のルーティングが消えていることが分かります。
これで初期段階では未実装のままにしておくページにユーザーが間違ってアクセスすることがなくなりました。

deviseのモジュールを活用する

ここまではdeviseのモジュールを有効化されている中から外す方法についてでしたが、逆も然りでそこにモジュールを追加すれば、新しくルーティングを生成してくれます。

deviseには他にもアカウントロック機能など、10個の便利なモジュールが用意されています。

スクリーンショット 2025-09-12 13.25.53.png

それぞれの特徴については以下の公式のREADMEから確認することが出来るので、使えそうなモジュールがあれば先程のモデルファイルにモジュールを追加することで、ルーティングも自動的に生成してくれます。

1
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
1
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?