Rails

【Rails】gem ‘devise’で自動作成されるルーティングを取捨選択する方法

Rails

 

今回はgem ‘devise’で自動生成されるルーティングを取捨選択する方法について紹介したいと思います。デフォルトでは実際には使用しないルーティング(パスワードリセット機能やアカウントロック機能のルーティングなど)も自動生成されてしまい、fatなコードになりがちなので、この機会にルーティングを整理できるようになっておきましょう。

deviseで自動生成されるルーティング

gem ‘deviseをインストールし、「% rails g devise user」を実行することで生成されるルーティングは以下のようになります。

Rails.application.routes.draw do
  devise_for :users
end
                     new_user_session GET    /users/sign_in(.:format)                                                                 devise/sessions#new
                         user_session POST   /users/sign_in(.:format)                                                                 devise/sessions#create
                 destroy_user_session DELETE /users/sign_out(.:format)                                                                devise/sessions#destroy
                    new_user_password GET    /users/password/new(.:format)                                                            devise/passwords#new
                   edit_user_password GET    /users/password/edit(.:format)                                                           devise/passwords#edit
                        user_password PATCH  /users/password(.:format)                                                                devise/passwords#update
                                      PUT    /users/password(.:format)                                                                devise/passwords#update
                                      POST   /users/password(.:format)                                                                devise/passwords#create
             cancel_user_registration GET    /users/cancel(.:format)                                                                  devise/registrations#cancel
                new_user_registration GET    /users/sign_up(.:format)                                                                 devise/registrations#new
               edit_user_registration GET    /users/edit(.:format)                                                                    devise/registrations#edit
                    user_registration PATCH  /users(.:format)                                                                         devise/registrations#update
                                      PUT    /users(.:format)                                                                         devise/registrations#update
                                      DELETE /users(.:format)                                                                         devise/registrations#destroy
                                      POST   /users(.:format)                                                                         devise/registrations#create
                      new_user_unlock GET    /users/unlock/new(.:format)                                                              devise/unlocks#new
                          user_unlock GET    /users/unlock(.:format)                                                                  devise/unlocks#show
                                      POST   /users/unlock(.:format)                                                                  devise/unlocks#create

 

このようにデフォルトでは新規登録やログインといった機能の他にパスワードリセットやアカウントロックといった機能のルーティングも含まれています。それらの機能を実装する場合はそのままで良いですが、実装しない場合はルーティングから削除してスッキリさせておきたいです。

ルーティングを整理する方法

今回はアカウントロック機能に関するルーティングを削除してみます。(devise/unlocks#new、devise/unlocks#show、devise/unlocks#createの3つ)

ルーティングの削除には「skip」を使用し、生成したくないルーティングのコントローラをそのスキップ対象に指定します。

Rails.application.routes.draw do
  devise_for :users, skip: [:unlocks]
end

 

上記のroutes.rbで生成されるルーティングは以下のようになり、devise/unlocks#new、devise/unlocks#show、devise/unlocks#createの3つが削除されたことが分かると思います。

                     new_user_session GET    /users/sign_in(.:format)                                                                 devise/sessions#new
                         user_session POST   /users/sign_in(.:format)                                                                 devise/sessions#create
                 destroy_user_session DELETE /users/sign_out(.:format)                                                                devise/sessions#destroy
                    new_user_password GET    /users/password/new(.:format)                                                            devise/passwords#new
                   edit_user_password GET    /users/password/edit(.:format)                                                           devise/passwords#edit
                        user_password PATCH  /users/password(.:format)                                                                devise/passwords#update
                                      PUT    /users/password(.:format)                                                                devise/passwords#update
                                      POST   /users/password(.:format)                                                                devise/passwords#create
             cancel_user_registration GET    /users/cancel(.:format)                                                                  devise/registrations#cancel
                new_user_registration GET    /users/sign_up(.:format)                                                                 devise/registrations#new
               edit_user_registration GET    /users/edit(.:format)                                                                    devise/registrations#edit
                    user_registration PATCH  /users(.:format)                                                                         devise/registrations#update
                                      PUT    /users(.:format)                                                                         devise/registrations#update
                                      DELETE /users(.:format)                                                                         devise/registrations#destroy
                                      POST   /users(.:format)                                                                         devise/registrations#create

 

このように生成したくないルーティングがある場合は、skipオプションに該当コントローラを指定することで生成を防ぐことができるようになります。

まとめ

  • デフォルトでは新規登録やログインといった機能の他にパスワードリセットやアカウントロックといった機能のルーティングも含まれる
  • ルーティングの削除には「skip」を使用し、生成したくないルーティングのコントローラをスキップ対象に指定する

 

 

今回はgem ‘devise’で自動生成されるルーティングを取捨選択する方法について紹介しました。「実装に不要なものは削除する」ということを心がけておくことで、後々の保守運用が楽になるのでぜひ取り組んでみてください。