カテゴリ: Rails 更新日: 2025/11/28

RailsのNamespaced ControllerとAdmin構成を完全解説!初心者でもわかるルート・認可・レイアウトの分離

Namespaced ControllerとAdmin構成:ルート・認可・レイアウトの分離
Namespaced ControllerとAdmin構成:ルート・認可・レイアウトの分離

先生と生徒の会話形式で理解しよう

生徒

「Railsで管理画面ってどうやって作るんですか?普通の画面と分けたいです。」

先生

「その場合は、Namespaced Controllerと呼ばれる仕組みを使うのが一般的ですよ。管理者専用のルーティングや画面を分けることができます。」

生徒

「難しそうですが、初心者でも理解できますか?」

先生

「もちろんです!ルートの分け方・認可処理・レイアウトの切り替えなど、一つずつ丁寧に解説していきますね。」

1. Namespaced Controller(ネームスペース付きコントローラ)とは?

1. Namespaced Controller(ネームスペース付きコントローラ)とは?
1. Namespaced Controller(ネームスペース付きコントローラ)とは?

Namespaced Controller(ネームスペース付きコントローラ)とは、コントローラをディレクトリで分類して役割を明確に分けるRailsの仕組みです。特に管理画面(Admin)と通常ユーザー画面を分けたいときに使われます。

たとえば、ブログ記事を管理する画面を作りたい場合、次のようにします。


# app/controllers/admin/posts_controller.rb
class Admin::PostsController < ApplicationController
  def index
    @posts = Post.all
  end
end

Admin::PostsControllerという名前にすることで、Railsは自動的にadminディレクトリにあるposts_controller.rbを探します。

2. ルーティングで管理画面を分ける方法

2. ルーティングで管理画面を分ける方法
2. ルーティングで管理画面を分ける方法

ルーティングもネームスペースで分ける必要があります。namespaceというキーワードを使って設定します。


# config/routes.rb
Rails.application.routes.draw do
  namespace :admin do
    resources :posts
  end
end

これにより、URLは/admin/postsのようになります。一般ユーザーとは別のURL空間(パス)になるので、管理者専用のページと簡単に区別できます。

3. 認可処理で管理者だけアクセスできるようにする

3. 認可処理で管理者だけアクセスできるようにする
3. 認可処理で管理者だけアクセスできるようにする

次に、認可(にんか)の設定です。これは「誰がアクセスできるのか?」を制限する処理です。

たとえば、before_actionを使って、管理者だけがアクセスできるようにします。


# app/controllers/admin/base_controller.rb
class Admin::BaseController < ApplicationController
  before_action :require_admin

  private

  def require_admin
    unless current_user&.admin?
      redirect_to root_path, alert: '管理者専用のページです'
    end
  end
end

このAdmin::BaseControllerを作っておくことで、他のAdmin::◯◯Controllerはそれを継承するだけで、簡単に共通の認可処理を入れることができます。


# app/controllers/admin/posts_controller.rb
class Admin::PostsController < Admin::BaseController
  def index
    @posts = Post.all
  end
end

4. 管理画面専用のレイアウトを使う方法

4. 管理画面専用のレイアウトを使う方法
4. 管理画面専用のレイアウトを使う方法

管理画面は見た目(デザイン)も通常画面と分けたいですよね。その場合は、レイアウトを切り替えることができます。

Railsではlayoutメソッドを使って、表示に使うHTMLテンプレート(レイアウト)を指定できます。


# app/controllers/admin/base_controller.rb
class Admin::BaseController < ApplicationController
  layout 'admin'
end

上記のようにすれば、app/views/layouts/admin.html.erbという専用レイアウトファイルを使って、管理画面だけ別のデザインにできます。


<!-- app/views/layouts/admin.html.erb -->
<!DOCTYPE html>
<html>
<head>
  <title>管理画面</title>
</head>
<body>
  <h1>管理者用メニュー</h1>
  <%= yield %>
</body>
</html>

5. 管理画面と通常画面を分離するメリット

5. 管理画面と通常画面を分離するメリット
5. 管理画面と通常画面を分離するメリット

ここまでで、管理画面を分離する方法を学びましたが、なぜ分けるべきなのでしょうか?

  • URLが分かれているため、セキュリティ対策がしやすい
  • レイアウトが別なのでデザイン変更が簡単
  • 認可処理を共通化できるため、コードが綺麗
  • 運用や保守がしやすくなる

このように、Namespaced ControllerAdmin構成を使えば、機能・デザイン・セキュリティをしっかり分けた構成が可能になります。

関連記事:
カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
データベース
データベース正規化とは?初心者でもわかるデータ重複を防ぐSQL設計の基本