すでにメンバーの場合は

無料会員登録

GitHubアカウントで登録 Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

登録がまだの方はこちらから

Pikawakaにログイン

GitHubアカウントでログイン Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

Rails

【Rails】 rake routesコマンドの使い方をマスターしよう!

ぴっかちゃん
ぴっかちゃん

rake routesコマンドとは、routes.rbで定義したルーティングをターミナルで確認することができるコマンドです。

ターミナル | rake routesコマンドの使い方
1
2
3
$ rake routes
#もしくは
$ rails routes

Rails5以降は、rails routesでも実行可能になりました。
上記のコマンドを実行すると、下記の出力結果がターミナルに表示されます。

実行結果

rake routesは、よく利用されるコマンドなので扱えるようになりましょう!

rake routesコマンドの使い方

この章では、rake routesコマンドの使い方や使う場面について解説します。

いつ使うのか

ルーティングをresourcesメソッドを使って定義した場合、各アクションのルーティングを確認することができません。

そんなときにrake routesコマンドを使用します。(※rails5以降はrails routesでも可能)

下記のようなルーティングを設定していたとします。

config/routes.rb
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を開き、確認してみましょう。

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でも可能