更新日:
【Rails】 rake routesコマンドの使い方をマスターしよう!
rake routesコマンドとは、routes.rbで定義したルーティングをターミナルで確認することができるコマンドです。
1
2
3
$ rake routes
#もしくは
$ rails routes
Rails5以降は、rails routes
でも実行可能になりました。
上記のコマンドを実行すると、下記の出力結果がターミナルに表示されます。
rake routes
は、よく利用されるコマンドなので扱えるようになりましょう!
rake routesコマンドの使い方
この章では、rake routes
コマンドの使い方や使う場面について解説します。
いつ使うのか
ルーティングをresourcesメソッドを使って定義した場合、各アクションのルーティングを確認することができません。
そんなときにrake routes
コマンドを使用します。(※rails5以降はrails routes
でも可能)
下記のようなルーティングを設定していたとします。
1
2
3
Rails.application.routes.draw do
resources :tweets
end
これだとルーティングの詳細が確認できませんね。
この時ターミナルでrake rotues
コマンドを実行すると下記の出力結果がターミナルに表示されます。
このようにroutes.rb
で定義したルーティングを確認することができました。
ではこの出力結果を詳しくみていきましょう。
一番上の項目は下記の意味があります。
項目 | 意味 |
---|---|
Prefix | パスが入った変数のようなもの。 resourcesメソッドを使ってルーティングを定義すると自動で作成されます。 |
Verb | HTTPメソッドを表します。 URI Patternのパスにどのhttpリクエストでアクセスするかを示しています。 |
URI Pattern | ルーティングのパスを表します |
Controller#Action | httpリクエストでパスが送られた際に処理が行われるコントローラとアクションを表します。 #左がコントローラ名、右がアクション名を示します。 |
Prefixとは?
Prefixはパスが代入されている変数のようなものです。 Prefixを使うときは末尾に_path
と追記します。
prefixを確認するとルートパスを表す/
というパスはroot
になっています。 なのでlink_toのパスを指定する場所には_path
をつけたroot_path
を書いてあげれば/
で指定した記述と同じになります。
パスにidが入っているときは、idの情報が入っているインスタンスを引数として渡してあげることにより指定ができます。
例えばusersコントローラーのshowアクションを動かすときは通常のパスだとusers/"ユーザーのid"
になりますが、Prefixを使って書くとuser_path(@user)
のような記述になります。
上の@user
はコントローラーで@user = User.find(params[:id])
などで記述してあげれば@user
の中にはそのユーザーのidも含まれているのでuser_path
の引数として指定できます。
httpメソッドとは
httpリクエストは、私たちが自分のPCでWebブラウザからリソース(ファイル)があるサーバーへする要求のことです。
要求にも何種類かあるのでそれをメソッドで指定します。 httpリクエストのメソッドは下記のような種類があります。
項目 | 意味 |
---|---|
get | リソースを取得する。サイトを閲覧する時に利用する。 |
post | リソースを保存する。 |
delete | リソースを削除する。 |
patch | リソースを更新する。 |
CRUD
アプリには基本となるリソースの操作が下記の4種類に分けることができます。
- 作成:Create
- 表示:Read
- 更新:Update
- 削除:Destroy
これらそれぞれの頭文字を取ってCRUDと呼ばれています。
Railsで作成するアプリも、このCRUDが基本となります。 CRUDは上の4種類のhttpメソッドを使って要求をします。
いつrake routesコマンドを使うのか
rake routes
コマンドは主にリンクを作成する時に使用します。
例えば詳細ページへのリンクを貼りたい場合、showアクションを動かしたいですよね。
ではshowアクションを動かすパスは何になるでしょうか?
routes.rb
をみてもresourcesメソッドを使って定義した場合、確認することができません。
ですのでrake rotues
コマンドを実行してそれを調べるわけです。
実際のアプリでrake routesコマンドを使ってみよう
この章では、実際に手を動かしながらrake routesコマンドについて理解を深めていきます
環境を構築しよう
下記のコマンドを順に実行してみましょう。
①git clone -b rake_routes https://github.com/miyagit/programan_dojo.git
② cd programan_dojo
③ bundle install
→ rbenv: version ‘2.4.1’ is not installed と表示された場合は、ruby -v と実行してください。
ruby -vと実行し出てきたversion(例: 2.3.1)と出てきたら、
vim .ruby-versionとし、
ruby -vで出てきた値(例: 2.3.1)に書き換えてください。
続いてvim Gemfileとし、ruby 2.4.1と書いてある部分をruby -vで出てきた値(例: 2.3.1)に書き換えてください。
④ rails db:create && rails db:migrate && rails db:seed
環境構築が完了しました。と表示されると、
本当にrails applicationが動作するかrails sコマンドで起動しましょう。
rails sを起動し、ブラウザでlocalhost: 3000と入力して下記のような画面が出てくれば環境構築完了です!
routes.rbを確認しよう
rake routes
コマンドを使う前に現在どういうルーティングが定義されているのかconfig/routes.rb
を開き、確認してみましょう。
1
2
3
4
Rails.application.routes.draw do
root 'main#top'
resources :users
end
現在はこういう記述になっていることが確認できます。
では実際にrake routes
コマンドでルーティングを確認してみましょう。
1
2
3
4
5
6
7
8
9
10
Prefix Verb URI Pattern Controller#Action
root GET / main#top
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
現在はこのようなルーティングになっていることが確認できました。
それではこれを参考にユーザーの詳細ページへ進むリンクを作成してみましょう。
それにはusersコントローラーのshowアクションを動かせば良さそうです。
それにはどのパスを指定してあげれば良いでしょうか?
まずは一番右からusers#show
を探しましょう。
#
の左がコントローラー名、右がアクション名でしたね。
users#show
のURI Patternはどうなっているでしょうか?
/users/:id(.:format)
となっているのが確認できます。
(.:format)とは、formatオプションで、html形式やjson形式、pdf形式といった複数の形式で出力することを表しています。
(詳細は、「respond_toメソッドでリクエストのフォーマットで処理を分ける」を参考にしてください。)
なのでパスには含まれません。
:id
の部分はuserのidを指定してあげます。
ですのでshowアクションへのパスは下記のようになります。
1
<%= link_to "詳細ページ", "/users/#{user.id}" %>
Prefixを使って書くと下記のようになります。
1
<%= link_to "詳細ページ", user_path('userのidが入ったインスタンス') %>
このようにrake routes
コマンドはリンク先のパスを確認する時に使うと覚えておきましょう!
他にも「rails server」や「rails console」などの基本的なコマンドの扱い方もおさえておきましょう。またRuby on Railsの基礎から実践的な開発体制まで学びたいという方は、この参考書がおすすめです。
この記事のまとめ
rake routesコマンド
は、routes.rbで定義したルーティングをターミナルで確認するためのコマンド- rails5以降は
rails routes
でも可能