この記事を読んで得られること
「いきあたりばったり」にチュートリアルをこなすのではなく、一筋の光が通った状態でチュートリアルを進めることができるようになる(かも)
想定読者は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」と書くだけで
なんで諸々よしなにルーティングしてくれるの?
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オプションをつけると必要なルーティングだけを生成できます
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に沿っているのでそのことを理解しながらチュートリアルを進めたほうがよさそうです