👏

HTTP通信からWebの仕組み、Railsがどのように動くかまで体系的にまとめてみる。

2022/04/01に公開

インターネットの仕組み

どのようにつながっているか..

インターネットの仕組み
引用 : 「コンピュータ用語学び塾」より

  1. 無線ルータからプロバイダのサーバにつながる
  2. プロバイダのサーバからインターネットへつながる
  3. インターネットからそれぞれのサーバに繋がる
  4. それぞれのサーバーからデータを取得してデータが手元に返ってくる。

どのように通信されているか

OSI参照モデル
引用 : 「Hatena Blog けんのへや」より

上記を 『手紙を届ける』 ということにたとえて説明していきます。

  1. どんな手段で運ぶか?
    これが、物理層・データリンク層(ネットワークインターフェイス層)に該当します。
  1. どこに運ぶか?
    これが、ネットワーク層(インターネット層)に該当します。
    ここで用いる概念が、IPアドレス(インターネットにおける住所)です。

250px-Ipv4_address_ja svg
引用 : 「Wikipedia」より

  1. 何号室か?(マンション・アパートみたいなイメージです)
    これが、トランスポート層に該当します。
    ここで用いる概念が、ポート番号です。
    以下のように役割は番号によって大体決まってます。

port
引用 : 「エンジニアの入り口」より

  1. 手紙の内容は?
    書き方は、場面に応じてある程度決まってます。
    それがプロトコルです。これはよく通信する上での『お約束』みたいにたとえられることがあります。他にも、『手順』とか『規約』とか。

port2
引用 : 「エンジニアの入り口」より

  1. ここでようやく手紙が読まれる。

Webの仕組み

DNS(Domain Name System)

https://....みたいなよく目にするのがドメインです。

DNS(ドメイン)とは、インターネットなどのIPネットワーク上でドメイン名(ホスト名)とIPアドレスの対応関係を管理するシステム
引用 : IT用語辞典

どのようにドメインからIPアドレスが分かるか?

zu01_02
引用 : 日経XTECH

  1. https://www.aaa.jpのIPアドレスを教えて』とDNSサーバーに問い合わせする。
  2. DNSサーバが色々なDNSサーバを経由して、IPアドレス(192.168.0.1)を教えてくれる。
  3. IPアドレスでWebサーバにアクセスする。(ブラウザの裏で実行されている)

HTTPの仕組み

zu3-1
引用 : 日経XTECH

手順

  1. HTTPリクエストを送る
  1. HTTPレスポンスをもらう
  1. クライアントに戻ってくる(手元のPCとか)

Railsがどのように通信しているか?

では、ここまででインターネットの仕組みとWebの仕組みをざっくりとわかった上でRailsがどのように動いていくのか見ていこうと思います。

4042f554557abe95724fcdcd9dae51b5
引用 : RailsTutorial

上記の画像をもとに説明していこうと思います。

前提

それでは、Railsの手順について

  1. クライアント側から何らかのHTTPリクエストがとんでくる。
    (ここでは、/usersパスにデータが送信されているので、GETリクエストが送信されます。)

-----ここからRails------

  1. リクエストが送られると、routes.rbで割り当てられているURL/コントローラに基づいて、リクエストに対応するアクションを実行します。
    (ここでは、usersコントローラindexアクションを呼び出すような記述になっています。)
Rails.application.routes.draw do
  # 通常resourcesを用いるパターンが多いですが今回はわかりやすくするためにあえてルーティングを1つだけ記述します。
  get '/users', to: 'users#index'
end
  1. (③~⑤まで)コントローラでは、indexメソッドでUser.allを呼び出して、Userモデル経由でデータベースからユーザーのすべてのデータを読み込みます。また、これらのデータは、@usersというインスタンス変数に代入されます。
class UsersController < ApplicationController
  def index
    @users = User.all
  end
end
  1. ビューでは、先程すべてのデータを代入した@usersというインスタンス変数を使用して、HTMLを作成します。
<h1>ユーザー一覧</h1>
<div>
  <% @users.each do |user| %>
    <p><%= user.name %></p>
  <% end %>
</div>
  1. ビューテンプレートのレンダリング結果をHTTPレスポンスで送る
    -----ここまでRails------

  2. HTTPレスポンスがクライアント側(手元のPCなど)に戻ってきて、画面が描画される。

以上が HTTP通信からWebの仕組み、Railsがどのように動くかまで体系的にまとめてみる でした。
至らない点が多いかもしれません。
その際は、コメントやTwitterなどでご指摘いただけると嬉しいです。

Discussion