rails routes コマンドの読み方を徹底解説

Ruby on Rails

rails routes コマンドで何がわかるの?

rails routes コマンドの出力の読み方を知りたい

そんな疑問にお答えします!

Ruby on Rails のルーティングは「なんだかよくわからない」と言って後回しにしていないでしょうか?

実は Ruby on Rails を理解するためにはルーティングの理解がとても大切です。

rails routes コマンドはルーティングを確認するための大切な方法です。

ルーティングは HTTP リクエストを受けて最初に動作する場所なので、ルーティングが理解できないと Rails プログラムを理解することは困難です。

ルーティングは Ruby on Rails の中で最も重要なトピックの一つです。

この記事を読めば rails routes コマンドの出力結果の読み方が分かり、Rails プログラミングの実力が向上しますよ!

rails routes コマンドで読み取れる情報は2つ

まず結論として rails routes コマンドで読み取れる情報を挙げておきます。

それは

  • どのような「HTTPリクエスト」(「HTTPメソッド」+「パス」)を受け付けたら、どのプログラムを実行するか
  • 「パス」を作るためのメソッドは何か

です。

この2点が読み取れるようになることが本記事のゴールです。

ルーティングとは

「ルーティング」は「経路を決めること」です。

Ruby on Rails では

  • どんな HTTP リクエストを受け取ったら
  • どんなプログラムに実行させるか

を決めるプログラムを指します。

Webアプリケーションは HTTP リクエストを受け取って実行するプログラムです。

そのためルーティングは一番最初に動作する部品です。

「HTTP リクエスト」と書きましたがルーティングが受け取るのは「HTTPメソッド + パス」です。
例えば「GET /foo/bar」というリクエストに対してどんなプログラムを実行するかを決めるのがルーティングとなります。

rails routes コマンドとは

rails routes コマンドは Rails アプリケーションのルーティングを確認するためのコマンドです。

以下のようなテーブル形式で表示されます。

$ rails routes
   Prefix Verb   URI Pattern               Controller#Action
     root GET    /                         users#index
    users GET    /users(.:format)          users#index
          POST   /users(.:format)          users#create
 new_user GET    /users/new(.:format)      users#new
edit_user GET    /users/:id/edit(.:format) users#edit
     user GET    /users/:id(.:format)      users#show
          PATCH  /users/:id(.:format)      users#update
          PUT    /users/:id(.:format)      users#update
          DELETE /users/:id(.:format)      users#destroy

テキスト形式で最初は見づらいかもしれませんが、以下のような表形式となっています。

PrefixVerbURI PatternController#Action
rootGET/users#index
usersGET/users(.:format)users#index
POST/users(.:format)users#create
new_userGET/users/new(.:format)users#new
edit_userGET/users/:id/edit(.:format)users#edit
userGET/users/:id(.:format)users#show
PATCH/users/:id(.:format)users#update
PUT/users/:id(.:format)users#update
DELETE/users/:id(.:format)users#destroy

rails routes コマンドの表示は、実務では頻繁に利用します。

この表示結果の読み方について解説していきます。

rails routes コマンドで表示される項目

rails routes コマンドで表示されている項目は以下の通りです。

項目意味
PrefixパスやURLを作るメソッドのプレフィックス(接頭語)です
VerbHTTPリクエストにおけるHTTPメソッドを表します
URI PatternHTTPリクエストにおけるパスを表します
Controller#ActionそのHTTPリクエストを受け取ったときに実行されるController+Actionを表します。

Verb

そのルーティングで待ち受ける HTTP メソッドを表します。

主なHTTPメソッドは以下の通りです。

Verb意味
GET表示
POST作成
PUT, PATCH更新
DELETE削除

URI Pattern

そのルーティングで待ち受けるパスです。

パスとはURLの https://〜〜.com に続く部分です。(ただし、?や#が無い場合)
URL が https://example.com/abc/def ならパスは /abc/def です。

ルーティングが以下の場合、

Prefix Verb URI Pattern      Controller#Action
 users GET  /users(.:format) users#index

受け付けることができる HTTP リクエストは

GET /users

です。

URI Pattern にはパラメータが含まれることがあります。

パラメータは :id のように「:」(コロン)に続いた名前で書きます。例えば

Prefix Verb URI Pattern          Controller#Action
  user GET  /users/:id(.:format) users#show

のように URI パターンが /users/:id の場合はこのようなパスとなるわけではなく、

  • /users/1
  • /users/1000000

など :id のところに具体的な文字が来ます。

そのため URI「パターン」と言います。

補足

実は /users(.:format):format もパラメータです。
例えば /users.html/users.json のように :format が拡張子部分(html, json) を指定できるように記述されたパターンとなります。
ただしカッコ ( … ) は省略できることを表すため、拡張子の無い /users もこのURI Patternに適合するということになります。
(.:format) を使う場合というのは別のトピックが入るため、本記事では (.:format) 部分を無視して解説しています。

Prefix

ルーティングに Prefix が指定されている場合、

  • Prefix_path
  • Prefix_url

というメソッドが追加されます。

「ルーティングによってメソッドが追加される」ということは Ruby や Ruby on Rails の初心者が見落としやすいところです。

Ruby でメソッドを追加するときは def 〜 end と書くのが基本ですが、このように別の記述によってメソッドが追加される、ということがあることに注意しましょう。

例えば、

Prefix Verb URI Pattern      Controller#Action
 users GET  /users(.:format) users#index

このようなルーティングであれば

users_path
users_url

というメソッドが追加されています。

これらのメソッドの戻り値は「URI Pattern」から作られる「パス」「URL」です。

Prefix Verb URI Pattern      Controller#Action
 users GET  /users(.:format) users#index

の場合は、

  • users_path メソッドの戻り値は “/users”
  • users_url メソッドの戻り値は “https://xxxx.yyyy.com/users”

となります。

ただし、xxxx.yyyy.com は今アクセスしているドメインになります。

開発中の rails s コマンドの場合は “http://localhost:3000/users” となります。

URI Pattern にパラメータがある場合は引数にハッシュ形式で指定します。

例えば

Prefix Verb URI Pattern          Controller#Action
  user GET  /users/:id(.:format) users#show

の場合は

  • user_path(id: 1) で戻り値が “/users/1” という文字列
  • user_url(id: 1) で戻り値が “https://xxxx.yyyy.com/users/1” という文字列

になります。

パラメータが :id のときはモデルのインスタンスを渡すこともできます。

user = User.find(1) # id == 1 の User モデルのインスタンスを取得
user_path(user)     # 戻り値は文字列 "/users/1"

Controller#Action

そのルーティングで HTTP リクエストを受け取ったときにどのプログラムを実行するかを表します。

「コントローラクラス名#メソッド名」の形式となります。

コントローラ名は省略記法となっており xxx の場合は XxxController となります。

そのため、例えば以下のような場合は

Prefix Verb URI Pattern      Controller#Action
 users GET  /users(.:format) users#index

「UsersControler の index メソッドを実行する」という意味になります。

これらは

  • a タグの href 属性
  • form タグの action 属性
  • redirect_to の引数

といった、リンク先を表す場所で使います。

ルーティングの読み方

いよいよルーティングが読めるようになります!

ルーティングは以下の通り読み取りましょう。

  • HTTPリクエスト「Verb」+「URI Pattern」を受け取ったら 「Controller#Action」を実行する
  • Prefix_path、Prefix_url というメソッドが追加され、その戻り値は「URI Pattern」をもとにした文字列

例えば以下のような場合は

Prefix Verb URI Pattern      Controller#Action
 users GET  /users(.:format) users#index
  • 「GET /users」というHTTPリクエストが来たら「UsersControllerのindexメソッドを実行する」
  • users_path メソッドが定義され、戻り値は “/users”
  • users_url メソッドが定義され、戻り値は “https://ホスト.ドメイン名/users”

のように読み取ることができます。

図示するとこのようなイメージになります。

まとめ

ルーティングは Ruby on Rails では最も大事なトピックの一つです。

最初のころは分かりづらいところもありますが、これを理解しないと Ruby on Rails は理解できない、というくらい重要です。

rails routes コマンドはそのルーティングを確認するための重要なコマンドです。

rails routes コマンドで確認できる情報は以下の2つです。

  1. どのような「HTTPリクエスト」(「HTTPメソッド」+「パス」)を受け付けたら、どのプログラムを実行するか
  2. 「パス」を作るためのメソッドは何か

Ruby on Rails を理解するために本記事が参考になれば幸いです。

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