さらなる高みへ -higher ground -

プログラミング学習の定着を狙いとしたアウトプット(独り言)をしてみるブログ

ルーティングについて【Ruby on Rails4】

ここでは以下3点を学習する。

  • ルーティングの役割
  • ユーザーからの要求を受け取る仕組み
  • ルーティングの設定方法

ルーティングとは

Railsアプリ全体の中で、ルーティングはどのような役割を持っているのだろうか。
前の投稿で触れたが、ユーザーからの要求を、適切なコントローラーに割り振るためのものである。

ここでは、「ユーザーからの要求」とはどういうことなのか、またどのような仕組みでコントローラに割り振るのかを詳しく確認したい。

ユーザーからの要求をどのように受け取るのか

ウェブアプリに対して、ユーザーがこんなことをしたいという要求をしたら、それに応える仕組みが必要である。
例えばあるユーザーが、「Twitterでタイムラインのツイート一覧が見たい」とか、「ツイートを投稿したい」という操作がされたら、それに対して適切な動作をしなくてはならない。

そのためには、ユーザーは「何に対して」「何をしたい」のかが分かる仕組みが必要である。

Railsではどのような仕組みで実現しているのか確認する。

URLとHTTPメソッド

Railsの場合、URLとHTTPメソッドの組み合わせによってやりたいことを伝える仕組みになっている。
それぞれ順に確認する。

RailsではURLはリソースを意味する

URLはインターネット上の住所のようなものである。
Yahooのサイトが見たい場合、URLの入力欄に「https://www.yahoo.co.jp」 と入力すればサイトが開く。

ただ、RailsにおいてURLは特別な意味を持っている。
仮にアプリのURLが 「http:www.pictweet.co.jp」 だったとする。

http:www.pictweet.co.jp/tweets

このようにURLを指定したら、それはアプリに対して「tweets」というリソースの全ての情報が欲しい、という意味になる。

「(アプリ名)/users」

同様にこの入力はusers情報全てを要求していることになる。
つまり、RailsではURLで「リソース」を表しており、これが「何に対して」 の部分になる。

HTTPメソッドとは

それに対して、「何をしたい」を指定するために使われるのがHTTPメソッドである。

HTTPメソッドについて、ここで詳しく理解する必要はないが、どのような種類があるのか確認しておく。

HTTPメソッドはHTTP通信で使用されるメソッドなので、先にHTTPとは何か確認する。

HTTPとは

HTTPとは、Hyper Text Transfer Protocolの略で、インターネット上で情報をやり取りするときの約束事である。
Railsができる前からあった仕組みで、クライアント(自分のパソコン)とウェブサーバーがこの方式に則ってデータの送信をする。

https://tech-master.s3.amazonaws.com/uploads/curriculums//df6e64f308bf27b1f3a0f667e68478ce.png

大まかな仕組みはシンプルで、パソコンからHTTPリクエスト(データの要求)を送ると、サーバーがHTTPレスポンスとして返す。
ブラウザを操作すると、その背後ではHTTPリクエストを送信し、HTTPレスポンスを受け取っている。

HTTPメソッドとは

HTTPリクエストを送信するときに、サーバーに対して「情報が欲しい」「情報を追加したい」「情報を更新したい」など様々な種類の要求を行う。
そのために用意されているのがHTTPメソッドである。

8種類あるうち、Railsでは以下の4つを使用する。

メソッド名 機能

GET

データを取得する
POST データを登録する
PATCH データを更新する
DELETE データを削除する

これらのメソッドを使って何をしたいのかを指定する。
つまり、RailsではURLとHTTPメソッドを組み合わせることで「何に対して」「何をしたいのか」を表すことができるようになっている。

なお、ブラウザのURL欄に入力した時は、HTTPメソッドGETが自動的に指定される。

http:www.pictweet.co.jp/tweets

そのため、先ほど見た上記の例では、「tweets」というリソースを「GET」したいという意味になる。

ルーティングの設定

ここから実際にルーティングの設定を行う。

Railsではルーティングをconfig/routes.rbに記述する。このファイルを編集していくことで、新しいルーティングを設定したり、ルーティングを削除したりすることが出来る。

なお、1つのアプリに対してroutes.rbファイルは1つだけある。

rooutes.rbを開いて以下のように編集する。

Rails.application.routes.draw do
  get 'tweets' => 'tweets#index'
end

1,3行目は元からある記述で、2行目に注目する。

https://tech-master.s3.amazonaws.com/uploads/curriculums//9cd433b442b008caf9bf108ef8f84abe.png

矢印の記号(=>)で左右に分かれる。
左がユーザーからの要求で、右がそのあとに割り振るコントローラーとアクション名である。

まず左側から見ていく。
これは「 HTTPメソッド: get」「URL: tweets」がユーザーによって入力された場合、という意味になる。これは先ほど学習したとおりである。

右側はさらに「#」で左右に分かれる。
#より前の部分はコントローラー名、後はアクション名を表わす。
(コントローラーやアクションについては後述)

以上のことから、ユーザーが「 HTTPメソッド: get」「URL: tweets」を入力した場合は、tweetsコントローラーのindexアクションに仕事を依頼する、という設定をしたことになる。

【要点】