テクノロジー

2016年11月3日

Railsのルーティングを学ぼう①

この記事ではRuby on Railsのルーティングの基礎的な部分を学んでいきます。
Webアプリケーションにはリクエスト(Webアプリケーションへの要求のことで主にURLにアクセスすることでリクエストが発生します。) に対して何を行うか決定するルーティングという仕組みがあります。

Railsのルーティングを学ぶ(基礎編) | ディープロ

Webアプリケーションにはリクエスト(Webアプリケーションへの要求のことで主にURLにアクセスすることでリクエストが発生します。) に対して何を行うか決定するルーティングという仕組みがあります。

Ruby on Railsではroutes.rbというファイルにルーティングに関するコードを書いていくことでルーティングを実現させることができます。
この記事ではRuby on Railsのルーティングの基礎的な部分を学んでいきます。

Ruby on Railsにおけるルーティングの仕組み

まずはリクエストを受け取ってからRuby on Railsの中でどのように処理されているか見ていきましょう。

https://diveintocode.gyazo.com/5cad2e3d9437c9755ec9132852aca243

リクエストが送られてくるとまずルーターに遷移します。
ルーターでは受け取ったリクエストを見て、どのコントローラ(Webアプリケーションの中でどのような処理を行うか管理しているものです。Webアプリケーション内に複数存在しています。)のなんの処理を行うかを決定してくれます。
銀行で例えるなら「窓口へ案内するお姉さん」です。

つまりルーティングとは受け取ったリクエストを適切なコントローラへ案内させるための「ルール」のことを指します。
ルーティングはRailsアプリケーションのconfigディレクトリの中にあるroutes.rbに記載します。

ルーティングの書き方

では早速ルーティングを書いてみましょう。
routes.rbファイルの中に以下のコードを記載します。

Rails.application.routes.draw do
  get 'blogs', to: 'blogs#index'
end

書いたルーティングを確認するにはrake routesというコマンドを実行することで確認できます。

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

rake routesコマンドを実行すると上記のような内容が表示されます。

これはGET /blogsというルーティングが作成されて、そこにアクセスするとblogs_controllerindexアクションにある処理を行った結果を画面に表示するようなルーティングを設定していることを表します。
例えばexample.comというドメインでRuby on Rails製のアプリケーションを導入して上記のようなルーティングが設定されている場合にhttp://example.com/blogsにアクセスするとブログの一覧画面が表示されるという意味合いになります。(indexアクションには何かしらの一覧を表示するような処理を作ることが一般的です。)

Ruby on RailsではRESTという考え方を導入しており、Ruby on Railsの規則に従ってアプリケーションを作成していくとRESTful(RESTに従っていること)なアプリケーションを作ることができます。
ルーティングでもresourcesを用いたルーティングの書き方をするとRESTに従ったルーティングが一気に作成することができます。

Rails.application.routes.draw do
  resources :blogs
end

rake routesコマンドでルーティングを確認すると以下のルーティングが作成されます。

Prefix          Verb        URI Pattern                    Controller#Action
blogs          GET         /blogs(.:format)                   blogs#index
                   POST      /blogs(.:format)                   blogs#create
new_blog   GET         /blogs/new(.:format)           blogs#new
edit_blog    GET         /blogs/:id/edit(.:format)      blogs#edit
blog            GET         /blogs/:id(.:format)             blogs#show
                   PATCH     /blogs/:id(.:format)             blogs#update
                   PUT         /blogs/:id(.:format)             blogs#update
                   DELETE   /blogs/:id(.:format)             blogs#destroy
// prefixが空白の部分は一つ上のPrefxと同じです
// VerbがPOSTのPrefixはblogsです。

生成されたルーティングの内容としては以下のような内容になります。

ルーティング アクション HTTPメソッド 説明
/blogs(.:format) index GET 一覧画面生成
/blogs(.:format) create POST 登録
/blogs/new(.:format) new GET 登録画面生成
/blogs/:id/edit(.:format) edit GET 編集画面生成
/blogs/:id(.:format) show GET 詳細画面生成
/blogs/:id(.:format) update PUT 更新
/blogs/:id(.:format) destroy DELETE 削除

このようにブログに関するCRUD(C: Create[登録], R: Read[参照], U: Update[更新], D:Delete[削除])処理に関するルーティングが一気にできあがります。 CRUDという言葉は開発現場で当たり前のように使われるので覚えておきましょう。
先ほどしれっと登場したRESTという考え方はリソース(今回の場合はblog)をURLを使って表し、それに対してHTTPメソッドの「GET」「POST」「DELETE」「PUT」を用いて目的の処理を行うという考え方です。
resourcesを使えば「GET」「POST」「DELETE」「PUT」を使用するルーティングを簡単に生成することができ、意識しなくてもRESTfulなアプリケーションを作成することができます。

基本的にRuby on Railsではresourcesを活用してルーティングを作成していくことが多いのでresourcesで生成されるルーティングは押さえておきたいところです。

次回(ルーティング②)はmembercollectionを使ったルーティングの作成方法を紹介していきたいと思います。

ダイビックのことをもっと知ってみませんか?