0
1

More than 3 years have passed since last update.

RESTが分かればRuby on Rails チュートリアルの見通しがよくなる話

Last updated at Posted at 2020-10-20

この記事を読んで得られること

「いきあたりばったり」にチュートリアルをこなすのではなく、一筋の光が通った状態でチュートリアルを進めることができるようになる(かも)

想定読者はWEB周りの予備知識があまりなく
Railsチュートリアル途中か終わってすぐぐらいの人
(私がそうです)

RESTって何?

雑に言うと、webの設計思想のこと
RailsもRESTの思想に沿って設計されている

実はRailsチュートリアル2章のコラム2.2(第4版の場合)にチュートリアルを
読みこなすのに必要そうなRESTの概要が書かれていますが
よくわからないままサッと見て先に進んだ人もいるのではないでしょうか
私は進みました

が、

RESTの概念はチュートリアル中ついて回っている(というか骨子とすら言える)ので
チュートリアル中に早めになんとなくでも掴んでおいたほうが
一貫した構造や著者が考えていることが見えてきて迷子になりにくいのではないかと思います

RESTの概念はかなり抽象的なのですぐ全部理解しなくてもよいと思いますが
わかるとチュートリアル内のことだけでなくチュートリアルの外の
web世界も少しクリアに見ることができてお得です

以下、自分が感じたレベル別に解説していく

レベル1 HTTPリクエストとCRUD操作の関係の理解
レベル2 resourcesでルーティングされる内容の理解
レベル3 scaffoldで生成される謎のアクション群の理解
レベル4 RESTそのものの理解

レベル1 HTTPリクエストとCRUD操作の関係の理解

ユーザがブラウザを操作するとHTTPリクエストが送られる
Railsチュートリアルではそのリクエストを元にデータベースを操作する部分を書いたり
ブラウザ操作手順をテストに書いて動作確認することがほとんどだ

これだけわかればチュートリアル中の内容はとりあえず何とかなると思う

・8つあるHTTPリクエストのうちよく使われる4つ

HTTPリクエスト 処理
GET 取得
POST 登録
PUT 更新
DELETE 削除

 
・データベースに必要な操作

 CRUD操作  処理
READ 取得
CREATE 登録
UPDATE 更新
DELETE 削除

 
・それぞれの対応

HTTPリクエスト CRUD操作 処理
GET READ 取得
POST CREATE 登録
PUT UPDATE 更新
DELETE DELETE 削除

レベル2 resourcesでルーティングされる内容の理解

Q:「routes.rb」に「resources :users」と書くだけで
  なんで諸々よしなにルーティングしてくれるの?

routes.rb
Rails.application.routes.draw do
  resources :users
end

A: Railsはresourcesと宣言するとデフォルトで勝手に
  GETとPOSTとPUTとDELETEに基づいて気を利かせて
  URLとコントローラーのアクションを対応付けて以下を生成してくれます

URL アクション HTTPリクエスト 名前付きルート 用途
/users index GET users_path ユーザ一覧画面を表示
/users/:id show GET user_path(user) 特定ユーザの画面を表示
/users/new new GET new_user_path 新規ユーザの登録画面を表示
/users/:id/edit edit GET edit_user_path(user) ユーザの編集画面を表示
/users create POST users_path ユーザの登録アクション
/users/:id update PATCH/PUT user_path(user) ユーザの更新アクション
/users/:id destroy DELETE user_path(user) ユーザの削除アクション

レベル3 scaffoldで生成される謎のアクション群の理解

scaffoldを使うとusersコントローラの中に以下の7アクションが勝手に生成されると思います

def index
def show
def new
def edit
def create
def update
def destroy

初めの頃は勝手にいろいろ作られて何がなんだかわからなかったと思いますが
ここまでくればそれぞれの関連が見えてきたと思います
この7つなのはRailsのテンプレートだからということみたいです。
(不要なアクションは削除できるし
 必要なら自作アクションを追加することが可能)

説明が前後してしまいますが
「routes.rb」に「resources :コントローラ名」と書くと7アクションすべてのルーティングになりますが
チュートリアル13章のように:onlyオプションをつけると必要なルーティングだけを生成できます

routes.rb
Rails.application.routes.draw do
  resources :microposts, only: [:create, :destroy]
end

レベル4 RESTそのものの理解

結局RESTって?

本来のRESTの設計原則は以下の4つあるようです

  • アドレス指定可能なURIで公開されていること
  • インターフェース(HTTPメソッドの利用)の統一がされていること
  • ステートレスであること
  • 処理結果がHTTPステータスコードで通知されること

引用元:REST入門 基礎知識

Railsチュートリアルで必要なのは上記のREST原則のうち

  • インターフェース(HTTPメソッドの利用)の統一がされていること

だけです。(この記事もそこに焦点を当てています)
その他のことの詳細は引用元リンクをご参照ください

ただ、これだけわかっていれば各種サービスのAPIもRESTを意識して作られていることが
多いようなので、ほかのRESTfulなサービスとの連携がしやすいということになります

まとめ

Railsを使うならRESTfulなスタイルを採用するのが前提ということが
なんとなくわかってもらえれば幸いです

自分で作る部分もRESTに沿うし、Railsがよしなにやってくれる部分も
RESTに沿っているのでそのことを理解しながらチュートリアルを進めたほうがよさそうです

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1