基本

Ruby on Railsのルーティング設定方法

Ruby on Railsのルーティングは、ブラウザから送られたHTTPリクエストのURLを解析し、適切なコントローラーのアクションに振り分ける仕組みです。config/routes.rbファイルに定義を記述することで、URLとコントローラーのマッピングを設定します。この記事では、基本的なルーティングの書き方からRESTfulなリソースルーティングまで解説します。

基本的な使い方

config/routes.rbを編集して、URLとコントローラーのアクションを紐づけます。最もシンプルなルーティングの設定方法は以下のとおりです。

config/routes.rb
Rails.application.routes.draw do
  get "/" => "home#index"
end

この設定により、ルートURL(http://127.0.0.1:3000)にGETリクエストが来たとき、HomeControllerのindexアクションが実行されます。

ポイント

コントローラー名は末尾の「Controller」を省略し、すべて小文字で記述します。例えばHomeControllerは「home」、PostsControllerは「posts」と書きます。

カスタムパスへのルーティング

getの直後の文字列がアクセスされるURLパスです。任意のパスに対してルーティングを設定できます。

config/routes.rb
Rails.application.routes.draw do
  get "/" => "home#index"
  get "/about" => "home#about"
  get "/contact" => "home#contact"
end

上記の設定では、/aboutにアクセスするとHomeControllerのaboutアクション、/contactにアクセスするとcontactアクションが呼ばれます。

rootの記述方法

ルートURL(トップページ)のルーティングには、rootという専用の記法も使えます。

config/routes.rb
Rails.application.routes.draw do
  root "home#index"
end

root "home#index"get "/" => "home#index"と同じ意味です。Railsコミュニティではこちらの書き方が推奨されています。

パラメータを含むルーティング

URLにパラメータを含めて、動的なルーティングを設定できます。コロン(:)で始まる部分がパラメータとして扱われます。

config/routes.rb
Rails.application.routes.draw do
  get "/posts/:id" => "posts#show"
end

/posts/1にアクセスすると、PostsControllerのshowアクションが実行され、params[:id]で「1」を取得できます。

app/controllers/posts_controller.rb
class PostsController < ApplicationController
  def show
    @post = Post.find(params[:id])
  end
end

リソースベースのルーティング

Railsではresourcesを使って、RESTfulなルーティングを一括で設定できます。これがRailsで最も推奨されるルーティングの定義方法です。

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

この1行だけで、以下の7つのルーティングが自動的に設定されます。

HTTPメソッド パス アクション 目的
GET/postsposts#index一覧表示
GET/posts/newposts#new新規作成フォーム
POST/postsposts#create新規作成
GET/posts/:idposts#show詳細表示
GET/posts/:id/editposts#edit編集フォーム
PATCH/PUT/posts/:idposts#update更新
DELETE/posts/:idposts#destroy削除

必要なアクションだけに制限したい場合は、onlyexceptオプションを使います。

config/routes.rb
resources :posts, only: [:index, :show]
resources :comments, except: [:destroy]

ルーティングの確認方法

設定したルーティングの一覧は、ターミナルで以下のコマンドを実行して確認できます。

ターミナル
rails routes

特定のコントローラーに関連するルーティングだけを表示するには、-cオプションを使います。

ターミナル
rails routes -c posts
注意

ルーティングは上から順に評価されます。同じパスに一致する定義が複数ある場合、先に書かれたものが優先されるため、定義の順序には注意してください。

まとめ

  • config/routes.rbでURLとコントローラーのアクションを紐づける
  • rootでトップページのルーティングを設定する
  • :idのようにコロンで始まるパラメータをURLに含められる
  • resourcesで7つのRESTfulルーティングを一括定義できる
  • onlyexceptで必要なアクションだけに制限可能
  • rails routesコマンドで設定されたルーティングを確認できる