【Ruby on Rails】ルーティングの基本:config/routes.rbの書き方

Ruby

こんにちは、かつコーチです。

「コントローラは書いたのに、画面が表示されない」。
Rails初心者が最初につまずくポイントの一つが、このルーティングの設定です。
この記事では、config/routes.rbの基本的な書き方と、rails routesコマンドでの確認方法を解説します。
読み終える頃には、URLとコントローラのつながりを自分で設計できるようになります。

ルーティングとは?

URLとコントローラをつなぐ地図

ルーティングとは、ブラウザからのリクエスト(URL)を、どのコントローラのどのアクションに渡すかを決める仕組みです。
Railsではconfig/routes.rbというファイルに、その対応関係をまとめて定義します。

たとえば「/postsにアクセスされたら、PostsControllerのindexアクションを実行する」といったルールを、このファイルに書いていきます。
前回の記事で紹介したMVCの中で、ユーザーからのリクエストが最初にたどり着くのがこのルーティングです。

なぜルーティングが必要なのか

コントローラやアクションを作っただけでは、Railsはどのファイルをどのタイミングで呼び出せばいいか分かりません。
ルーティングという「地図」を用意することで、初めてURLとコントローラが結びつきます。

getやpostでのルート定義

基本の書き方

config/routes.rbには、HTTPメソッドとURL、対応するコントローラ・アクションを組み合わせて記述します。

# config/routes.rb
Rails.application.routes.draw do
  get "posts", to: "posts#index"
end

この1行は「GET /postsというリクエストが来たら、PostsControllerindexアクションを実行する」という意味です。
to: "posts#index"の部分が、コントローラ名とアクション名を#でつないだ書き方です。

HTTPメソッドの種類と役割

Webアプリでは、目的に応じて複数のHTTPメソッドを使い分けます。

メソッド主な用途
getページの表示・データの取得
post新しいデータの作成
patch / put既存データの更新
deleteデータの削除

たとえば、投稿を新規作成する処理は次のように書きます。

Rails.application.routes.draw do
  get "posts", to: "posts#index"
  get "posts/new", to: "posts#new"
  post "posts", to: "posts#create"
end

get "posts/new"は新規投稿画面を表示するためのルートです。
post "posts"は、その画面から送信されたフォームを受け取り、実際にデータを作成するためのルートです。

resourcesで一括定義する

投稿の一覧・詳細・作成・編集・削除といった一連の操作は、1つずつgetpostを書くと行数が多くなります。
Railsにはresourcesという書き方があり、これを使うと必要なルートをまとめて自動生成できます。

Rails.application.routes.draw do
  resources :posts
end

この1行だけで、一覧・詳細・新規作成・編集・更新・削除に対応する7つのルートが自動的に定義されます。
resourcesを使ったRESTfulな設計の考え方については、別の記事「RESTfulなルーティング設計(resources)の考え方」で詳しく解説します。

rails routesコマンドでの確認方法

コマンドの実行方法

ルーティングを定義したら、実際にどんなルートが登録されているかを確認しましょう。
ターミナルで次のコマンドを実行します。

bin/rails routes

実行すると、次のような一覧が表示されます。

Prefix   Verb   URI Pattern          Controller#Action
posts    GET    /posts               posts#index
         POST   /posts               posts#create
new_post GET    /posts/new           posts#new

Prefixはルートの名前、VerbはHTTPメソッド、URI PatternはURLの形、Controller#Actionは呼び出されるコントローラとアクションを表しています。

特定のコントローラだけ絞り込む

ルートの数が多くなってきたら、-cオプションでコントローラを絞り込んで確認できます。

bin/rails routes -c posts

PostsControllerに関連するルートだけが表示されるため、確認したい対象が多いプロジェクトでも見やすくなります。

よくあるつまずきポイント・エラー対処

Before/After:ルート未定義でエラーになるケース

コントローラとビューは用意したのに、ルーティングを書き忘れてアクセスできない、というのはRails初心者が非常によく経験する失敗です。
私自身も投稿詳細ページを作った際、showアクションのルートを書き忘れたまま画面を確認しようとして、次のエラーに遭遇しました。

❌Before:resourcesを書かず、必要なルートが不足している

# config/routes.rb
Rails.application.routes.draw do
  get "posts", to: "posts#index"
  # showアクションへのルートを書き忘れている
end

この状態で/posts/1にアクセスすると、次のようなエラー画面が表示されます。

ActionController::RoutingError
No route matches [GET] "/posts/1"

このエラーは「そのURLに対応するルートが見つからない」という意味です。
コントローラにアクションを書いていても、ルーティングに定義がなければRailsはリクエストを処理できません。

✅After:resourcesで必要なルートをまとめて定義する

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

resources :postsと書けば、showを含む基本的なルートがすべて自動的に定義されます。
エラーが出たときは、まずbin/rails routesを実行して、目的のURLがそもそも一覧に存在するかを確認する癖をつけましょう。

まとめ

この記事のポイント

  • ルーティングは、URLとコントローラのアクションをつなぐ「地図」の役割を持つ
  • getpostpatchdeleteなどのHTTPメソッドごとにルートを定義する
  • resources :postsと書くだけで、基本的な7つのルートをまとめて生成できる
  • bin/rails routesでルートの一覧を確認し、RoutingErrorが出たらまずここをチェックする

次に読むべき記事

ルーティングの基本が分かったら、次はリクエストを受け取るコントローラの中身を学びましょう。
「コントローラの基本:アクションとストロングパラメータ」で、アクションの書き方を確認してみてください。

タグ: Ruby on Rails, 初心者向け, フレームワーク基礎

タイトルとURLをコピーしました