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