はじめに
はじめまして!
プログラミング初心者のかずきです。
まだまだ初学者ですので、内容に間違いがあることもあるかと思います。その際はぜひ、コメントなどでご指摘いただけますと幸いです!
前回の続き
前回、deviseの導入方法について執筆しました。
前回の記事はこちら
そこで疑問に感じた点について、今回まとめてみました。
あれ、「コントローラー」と「ビュー」書いてないよな、、、
前回deviseのGitHubに従って実装を行いました。
実装した内容は以下です。
- gem diviseのインストール
- 設定ファイルの生成
- モデル周りの生成(マイグレーションファイルとモデルファイルの生成)
- ↑の生成時にルーティング自動付与
そうです。「コントローラー」と「ビュー」の記述がありません。
実際にファイルも生成されていません。
ではなぜブラウザにdeviseで実装した内容が表示されるのでしょうか?
gem deviseが「コントローラー」と「ビュー」を内部に持っている
GitHubにこのように記載されています。
Devise is a flexible authentication solution for Rails based on Warden. It:
- Is Rack based;
- Is a complete MVC solution based on Rails engines;
- Allows you to have multiple models signed in at the same time;
- Is based on a modularity concept: use only what you really need.
~3行目日本語訳~
deviseはRailsエンジンをベースにした完全なMVCソリューションです。
Railsエンジンとはどういう意味でしょうか?
Railsガイドにこのように記載されています
エンジン (engine) は、ホストとなるRailsアプリケーションに機能を提供するミニチュア版Railsアプリケーションとみなせます。この場合、ホストとなるRailsアプリケーションは、実際にはエンジンに「ターボをかけた」ようなものにすぎず、Rails::ApplicationクラスはRails::Engineから多くの振る舞いを継承します。
<解説>
Railsエンジンとは、いわゆるMVC(モデル・コントローラー・ビュー)を持った部品(ミニアプリ)です。
また、 Rails::ApplicationクラスはRails::Engineを継承しているということなので、
Rubyの記法に直すと、
class Rails::Application < Rails::Engine
end
になります。
つまり、deviseはMVCを持ったRailsエンジン(ミニRailsアプリ)であり、自分のRailsアプリに組み込むことで、
deviseが持つ認証用のMVCの機能を利用できます。
では、ルーティングはどうなるでしょうか?
ルーティングは前回のモデル周り生成時のコマンド時により自動記述されます。
docker compose exec web rails generate devise user# routes.rbファイルに以下が自動記述 devise_for :users
上記記述によりdeviseが持つ認証用MVCに繋がるルーティングが組み込まれ、私たちが見えないところでdeviseのMVCが利用されています。
自分で「ビュー」を記述したい!
前回のdevise導入方法のみでは、簡素な表示になってしまいます。
「ビュー」に手を加えたい場合、以下を設定します。
devise用のビューを作成
devise用で使用するビューファイルを作成します
実行場所:ターミナル
docker compose exec web rails g devise:views users
deviseで使用されているビューファイルが全て生成されます。
ビューを表示させるための設定
現在の状態では先ほど生成したビューではなく、私たちが見えないgem devise内部のビューが利用されます。
なので以下の設定をします
実行場所:config/initializers/devise.rb
- config.scoped_views = false
+ config.scoped_views = true
(-の行を削除し、+の行を追記します)
この設定により、ブラウザに表示されるビューの対象が生成されたファイルに変更されます。
設定ファイルを触っているのでサーバーを再起動します
実行場所:ターミナル
docker compose restart
試しに、新規登録用のビューファイル(Sign_up)を編集してみましょう。
実行場所:app/views/users/registrations/new.html.erb
- <h2>Sign up</h2>
+ <h2>新規登録</h2>
~~省略~~
(-の行を削除し、+の行を追加します)
すると、ブラウザに変更された内容が表示されます。

終わりに
これでビューを変更することが可能になりました。
次回、パラメーターを追加する方法を執筆できたらと思います。