Railsのルーティングに関する理解

2017年09月19日

RubyOnRails

シェア
Tweet このエントリーをはてなブックマークに追加

こんにちは,徐です.
今日から色々書いていきます.

Rilasを教えていて,ルーティング全然わかってないなと感じます. それは,"Railsの仕組みをわかってないな"と言うのももちろんありますが,
通信をしていくわけなので,ネットワークに関する知識ももちろん必要になります.

Railsの教科書や,プログラミングスクールでは,そういった低レイヤーのことはほとんど教えてもらえないので,
ルーティングを理解するためにも更に勉強が必要です.

初級編

Railsを触ったことある人ならば,まずはScaffoldから習い始めるんじゃないかと思います.
Scaffoldの説明は,他の記事に任せることにします.

Scaffoldでは,

resources :hogehoge

と,追加されるのではないでしょうか.

HTTP動詞 パス コントローラ#アクション 目的
GET /hogehoge hogehoge#index すべてのhogehogeの一覧を表示
GET /hogehoge/new hogehoge#new hogehogeを1つ作成するためのHTMLフォームを返す
POST /hogehoge hogehoge#create hogehogeを1つ作成する
GET /hogehoge/:id hogehoge#show 特定のhogehogeを表示する
GET /hogehoge/:id/edit hogehoge#edit hogehoge編集用のHTMLフォームを1つ返す
PATCH/PUT /hogehoge/:id hogehoge#update 特定のhogehogeを更新する
DELETE /hogehoge/:id hogehoge#destroy 特定のhogehogeを削除する

こういうのが一通り生成されます.

中級編

Scaffoldを使ってなんとなくできたら,マニュアルで設定していくと思います.

例えば下記のようなものです.

get hogehoge/:id', to: 'hogehoge#show'

これは,resourcesで生成されるもの以外,URLを独自でカスタマイズするときによく使います.
これには,実は様々なオプションがあるのですが,また別の機会に解説していきたいと思います.

また,resoucesでは,上記のような7つのルーティングが生成されますが,
実際の開発では「不必要なものは書かない」というのが大事になります.
これは,後から入る開発者が,「これ使ってるの?使ってないの?」と混乱しないようにするためです.

そのため,

resources :hogehoge, only: [:index, :show]

と言うように,アクションを限定してあげたりします.

上級編

マニュアルで追加していくと,コードが煩雑になってくることが多々あります. また,管理が煩雑化しないようにする工夫もとても大事になっていきます.

ここでは,ちょっとRailsならではの道具について紹介していきます.

scope, namespace, module

routeのmoduleとnamespaceとscopeの違いを読めばわかるのですが,主にRailsのディレクトリ分割や,パスをうまくカスタマイズする時に使います.(他にもshallowオプションがあったりします)

通常,大規模なシステムだと,app/controller以下に,controllerのファイルを全部置き管理することは不可能です.
これは,使う機能が管理者(admin)やユーザ(user)など役割ごとに変わってきたりするからです.

コードの設計にも依存する部分ですので,今回は割愛します.
詳しくはエリック・エヴァンスのドメイン駆動設計ユースケース駆動開発実践ガイドを読んでみるのが良いと思います.

member, collection

通常,member, collectionは本には使用例が書いてありますが,実践している人は多く見かけません.
下記の記事が参考になるかなと思います.

resourcesとうまく組み合わせると下記のようになります.

namespace :api, defaults: { format: :json } do
  resources :hogehoge, only: [:index] do
    collection do
      resources :fuga, only: [:show, :index]
      resources :foo, only: [:show, :index]
    end
  end
end

個人的に,こういうのをうまく使いこなせると,Rails熟れている感がでていいんじゃないかと思います.

もちろん,もっと他にも様々な機能があるので,Rails のルーティングを熟読するのをオススメします.

最上級

教えてて特に,全然ダメだなと思うことはそもそも,この辺のルート以前にhttp通信などネットワーク的なことです.

など,そもそも通信についてあまり良くわかってないということが多々見受けられます.

話すと長くなるので,こういう本読んで勉強するといいよ,というのを勧めておきます.

ネットワークについて

マスタリングTCP/IP 入門編

Web全般について

Webを支える技術 -HTTP,URI,HTML,そしてREST

特に,Webを支える技術はいい本です. 非常に初心者にはとっかりづらく,新卒の自分にはとてもつらい本でした. しかし,いまになって読み返してみるととてもいい本だな,と思います.

最後に

SideWorksでは,技術をきちんと学び,身につけてもらうために,「開発しながら体で覚える」ことを大事にしています.

本だけ読んでもわからん!!もっと深く学びたい!!など,需要がありました,ぜひ下記のリンクよりお問い合わせください.
よろしくお願いします.

やるかやらないかはあなた次第

人生を変える1年間にしませんか?
体験授業随時開催中.詳しくは下記からどうぞ.

お問い合わせする