Rails Ambassador

Railsのルーティング

基本的なルーティングであるresourcesを学習します。
7つのURLパターンと役割を覚えるようにしましょう。

HTTPリクエストについて

ブラウザなどクライアントにWEBページが表示されるにはWEBサーバにHTTPリクエストを送る必要があります。
このHTTPリクエストには二つ大事な要素がありますのでまずはこの二つを確実に覚えましょう。

  • URI
  • HTTPメソッド

こちらの二つの組み合わせがHTTPリクエストです。リクエストを受けたRailsアプリのあるWEBサーバはリクエストに応じた処理を行い、HTTPレスポンスをクライアントに返します。
ではこの二つは一体何か見ていきましょう。

URI

HTTPリクエストの一つ目の要素はURI(Uniform Resource Identifier)です。URIはURLと同じ意味として考えて良いです。厳密には少し違いますが、URIが正式名称、URLは俗称です。
しかし現在では俗称であるURLの方が一般的ですね。このURIがHTTPリクエストの構成要素の一つです。

HTTPメソッド

もう一つの構成要素はHTTPメソッドです。HTTPメソッドは8つありますがそのうちRailsで扱う以下5つを必ず覚えておいてください。
HTTPリクエストとは上記URI(URL)とHTTPメソッドの二つのセットの事を言います。

メソッド 意味
GET リソースの取得
POST リソースの作成
PUT(PATCH) リソースの更新
DELETE リソースの削除

GET

HTTPメソッドのGETはリソースの取得です。WEBアプリにおいてはHTMLなどのデータの取得を要求し、画面が表示されるわけですね。ブラウザのアドレスバーに直接URLを入力してWEBページを表示させようとするときはこのGETメソッドが送信されています。

POST

HTTPメソッドのPOSTメソッドはリソースの作成です。Railsアプリにおいては新規作成の時に使われます。例えばデータベースに新しいレコードを作成する際にはこのPOSTメソッドを使いましょう。HTMLの<form>要素のデフォルト値はPOSTになります。

PUT(PATCH)

HTTPメソッドのPUTメソッドはリソースの更新です。Railsアプリにおいては編集~更新するときに使われます。例えばデータベースのレコードを編集し、UPDATE(更新)する際にはこのHTTPメソッドを使いましょう。

DELETE

HTTPメソッドのDELETEメソッドはリソースの削除です。例えばデータベースのレコードを削除するときにはこのHTTPメソッドを使いましょう。

resourcesで自動生成される7つのルーティング

それでは早速ルーティングの設定を行いましょう。
ルーティングを確認するコマンドは以下になります。よく使うコマンドですから必ず覚えるようにしてください。

$ rails routes

railsのバージョン等によって初期状態のルーティングは違います。初期のルーティングは現段階で理解する必要はありません。今後自身で追加したルーティングについては理解しましょう。初期状態の確認が出来ましたらURIの設定を追加していきます。ルーティングは一つのファイルで全て設定することになります。まずはconfig/routes.rbファイルを開いてください。

config/routes.rb
Rails.application.routes.draw do
  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

  # Defines the root path route ("/")
  # root "articles#index"
end


このようになっていますでしょうか?
do~endブロック内にコメントが書かれているだけだと思います。(Railsのverによってコメント内容は違います。)このdo~endブロック内にルートを記載していきます。
以下のようにdo~end内を修正してください。

Rails.application.routes.draw do
  resources :posts #この行を追加
end

この一行だけで7つのルートが規約によって自動生成されます。増えた7つのルートを確認してみましょう。

$ rails routes

以下のようなルートが増えていると思います。

Prefix Verb URI Pattern Controller#Action
posts GET /posts(.:format) posts#index
POST /posts(.:format) posts#create
new_post GET /posts/new(.:format) posts#new
edit_post GET /posts/:id/edit(.:format) posts#edit
post GET /posts/:id(.:format) posts#show
PATCH /posts/:id(.:format) posts#update
PUT /posts/:id(.:format) posts#update
DELETE /posts/:id(.:format) posts#destroy

RailsアプリではHTTPリクエストを送るとconfig/routes.rbファイルの設定によってあるコントローラの中の一つのアクションを実行します。この組み合わせ表がこちらになります。
表の見方は以下のようになっています。

  • prefix(接頭語)は_pathや_urlをつけてURLヘルパに(URLヘルパについては後述します)
  • VerbはHTTPメソッド
  • URI URI PatternはリクエストURL
  • Controller#ActionはHTTPリクエストによって選ばれるコントローラとアクション

現段階ではURLヘルパやコントローラやアクションといったものは学習していません。しかし学習が終わるころにはこの表を暗記できるくらいになっているようにしましょう。
HTTPリクエストが送信されると、ある一つのコントローラのアクションが選択されるという事は覚えておいてください。

resourcesで生成されるアクションについて

まだ現段階ではコントローラやアクションは学んでいませんが、生成されるアクションの名前と役割について説明しておきます。
resourcesで生成されるルートは7つです。自動生成される7つのアクション名は決まっていますのでそれぞれの役割を把握しておくことが肝要です。

アクション名 HTTPメソッド 概要
index GET 一覧画面
create POST リソースの新規作成
new GET 新規作成画面
edit GET 編集画面
show GET 詳細(個別)画面
update PUT/PATCH リソースの更新
destroy DELETE リソースの削除

今回は掲示板のリソースである投稿(Post)を操作することになります。 一般的なデザインパターンですと投稿一覧を表示する画面が欲しくなるでしょう。その際に使うアクションはindexです。
一覧ページがあったら投稿一つ一つの個別の詳細画面も必要かもしれません。詳細画面のアクションはshowとして用意されました。
また、投稿を作成するページも作成するとします。そのアクションはnewとして用意されています。この新規投稿作成画面から実際にデータベースに保存するアクションはcreateです。リソースの新規作成のHTTPメソッドはPOSTを使うと学習しましたね。
さらに投稿の編集画面はedit、実際にデータベースの更新を行うのはupdateアクションとなります。
不要になったり誤った投稿を削除するアクションはdestroyという事になります。
この一連の7つのアクションはよく使われる操作を集めたものです。アクション名と役割をしっかり覚えておきましょう。

resourcesまとめ

以下resourcesにより自動生成されるルーティングには生成パターンが決まっています。役割も必ず覚えましょう。

resources :xxxs

また、resourcesの引数にはモデルの小文字複数形(:xxxs)を指定し、後述するコントローラ名もこの単数複数形に合わせることで余計な記述を増やすことなくシンプルなコーディングをすることができます。
この引数 :xxxsはURLパターンの一部として採用されます。MVCアーキテクチャでは後述するコントローラ名をURLに含めることがよくあります。

Prefix Verb URI Pattern Controller#Action role
xxxs GET /xxxs(.:format) xxxs#index 一覧画面
POST /xxxs(.:format) xxxs#create 新規作成処理
new_xxx GET /xxxs/new(.:format) xxxs#new 新規作成画面
edit_xxx GET /xxxs/:id/edit(.:format) xxxs#edit 編集画面
xxx GET /xxxs/:id(.:format) xxxs#show 詳細画面
PATCH /xxxs/:id(.:format) xxxs#update 更新処理
PUT /xxxs/:id(.:format) xxxs#update 更新処理
DELETE /xxxs/:id(.:format) xxxs#destroy 削除処理

ターミナルからルーティングを確認するには以下コマンドを実行します。

$ rails routes

よく使うコマンドです。覚えておきましょう。