読者です 読者をやめる 読者になる 読者になる

Blank?=False

「呉下の阿蒙にあらず」をモットーにしたITエンジニアの日々

基礎RubyOnRails Chapter3-1 コントローラとビュー

Rails 読書

f:id:stonebeach-dakar:20160530220309p:plain 基礎RubyOnRaisチャプター3−1、
Raisの基礎編、 コントローラとビューについて書いてきます。

改訂3版基礎 Ruby on Rails (KS IMPRESS KISO SERIES)

改訂3版基礎 Ruby on Rails (KS IMPRESS KISO SERIES)

HTTPの基礎

HTTPとは、ブラウザとサーバーがHTMLや画像などのリソースをやり取りするときに使われるルールみたいなもので、 このルールにしたがったコードをサーバーに送信することで、サーバーからレスポンスをもらうことができるもの。 このプロトコルを使ってブラウザとサーバーで様々な種類の通信を行い、データのやり取りをする。
技術的な細かい話は別にして、ざっくばらんにいうとこんな感じ。
(よくわかってないだけだったり)

URLの基礎

普段から使っているURLも、細かく分けると幾つかの部分に分かれていて、それは以下のとおり。

f:id:stonebeach-dakar:20160614193009p:plain
ポート番号なんてないじゃないか!と一瞬思ったけど、Httpのデフォルトのポート番号(80)であれば省略可能というルールになっているので、ほとんどのWebサイトにはこのポート番号はありません。
イントラネットのWebアプリとかだと、このポート番号が丸見えなこともありますね。

大抵のWebサイトはトップページにアクセスすると、indexページが表示されますが、このindexが上記のパスという形になっています。
(ルートがインデックスページになっていることもあるので、その場合はindexというパスはありません。アクセスできるけどルートにリダイレクトされることが多いですね。)

HTTPのメソッド

HTTPのメソッドとは、HTTPがサーバに送信するリクエストの先頭にある文言です。
この文言を使い分けることで、リクエストに対するサーバーの動作が変わります。
たとえば、GETメソッドはサーバーのデータ(HTMLや画像など)を取得しますが、POSTメソッドはデータを送信(フォームに入力した情報など)を送り、サーバーにそのデータを保存するような機能になります。
RubyOnRailsも同様、これらのメソッドが送信された時の処理をルーティングすることでコントローラのアクションに割り当てることになります。

名称 機能
GET リソースの要求
POST リソースの送信
HEAD ヘッダー部分のみを要求
PUT リソースの痴漢
PATCH リソースの一分更新
DELETE リソースの削除

このうち、 Railsで見るのはGET,POST,PUT,DELETEの4つだと思います。
バージョンによってはPATCHメソッドも準備されていますが、最新版だとPATCHは後方互換性のため残されている、 と解説されているので、新規開発では使わないほうがいいでしょう。

リダイレクトとは?

リダイレクトについて、自分は今まで「強制的に移動する」という曖昧なイメージでした。
結果としては間違っていなかったのですが、具体的な処理は以下の様に、一度送信したリクエストに対し別のページのURLをレスポンスとして返し、ブラウザがそのURLにアクセスする、というものです。

以下はメンバーページアクセスの例で、まずメンバーページ(メンバー1)のリクエストをサーバーに送信します。 リクエストを受け取ったサーバーはユーザーがログインしていないためアクセス出来ないと判断し、ログインページにリダイレクトするようレスポンスを返します。 レスポンスを受け取ったブラウザはサーバーにログインページのリクエストを送信し、サーバーはそのリクエストどおりログインページを送信する、というのが具体的な処理です。

最初のリクエストに対するレスポンスが別のページの表示、ではなく別のページにアクセスせよというレスポンスを送信するわけです。

f:id:stonebeach-dakar:20160614062132p:plain

ルーティングとは?

RubyOnRailsのルーティングという機能ですが、単純に言ってしまえば、URLを生成しそのURLに割り当てる動作を決めるというものです。
その記述方法がさまさまな方法があり、非常に柔軟なURLと動作の割当が可能となっています。

まとめ

WebはOSに依存する部分が少ない分、Webなりの作法やルールがたくさんあることを改めて認識。今までやってきたデスクトップアプリとはぜんぜん違う世界だなと日々考えさせられます。