テクノロジー
2018年12月28日Railsの処理の流れを理解しよう
今回はRailsのアプリケーションを使う際の処理の流れとその全体像を理解していきましょう。
Rails処理の流れ
みなさんはRailsのアプリケーションを使う際、その全体像を理解できていますでしょうか。
Railsの仕組みを理解することは、Railsを使っていく上でいずれ必ず必要になっていく知識ですので、ここでその大まかな全体像をイメージできるようになっておきましょう。
Railsアプリケーションの全体像
Railsアプリケーションの全体像は以下のようになっています。
まずは以下6つの役割を明確にしましょう。
- HTTPサーバ:リクエストを元にレスポンスを返す
- ルータ:HTTPサーバから来たリクエストを元にコントローラへ誘導する
- コントローラ:モデルに命令を出し、ビューにデータを渡す
- モデル:コントローラの命令を元にSQLを発行し、レコード操作を行う
- DB:レコードが保存されている場所
- ビュー:見た目の部分を生成する
上記を元にブログ詳細画面が出力されるまでの流れを簡単に見ていきましょう。
- リクエストがHTTPサーバを通ります。
- Railsアプリケーション内に入ると、コントローラのアクションを案内するルータがいます。
- ルータにリクエストを伝え、コントローラ&アクションへ案内してもらいます。
- コントローラ&アクションにて要件を伝え、モデルにその旨が伝割ります。
- モデルがDBからレコードを引き出します。
- 引き出したレコードは、コントローラ&アクション内にあるインスタンス変数に渡されます。
- レコードだけではブラウザで確認できないので、ビューを元にHTMLを生成します。
- HTMLの生成を終え、レコードの情報が埋め込まれたHTMLが渡されます。
- HTTPサーバを通って、HTMLがレスポンスとして送られます。
いきなりこれを説明されても全くわからないと思いますので、銀行でお金を引き出す工程に例えて説明していきます。
銀行の例え
Railsの処理の流れは 銀行でお金を引き出す工程にそっくり
なのです。
ここではAさんが1000万円を引き出すという前提で話を進めていきます。
- まずは自動ドアが開いて銀行内に入ります。
- 銀行内に入ると、窓口を案内するお姉さんが立っています。
- 案内役のお姉さんに要件を伝え、窓口へ案内してもらいます。
- 窓口で「1000万円を引き出す」という旨を伝え、窓口のお姉さんが裏側にいるお姉さんにその旨を伝えます。
- 裏側にいるお姉さんが、実際に金庫からお金を引き出します。
- 引き出したお金は、窓口のお姉さんに渡されます。
- お金だけでは正しく口座からお金が引き出されたかがわからないので、通帳記入をします。
- 通帳記入を終え、お金と通帳が渡されます。
- 自動ドアを出て、1000万円引き出し完了です。
これをそっくりそのままブログ詳細画面が出力されるまでの流れに置き換えてみましょう。
/blogs/1 + GET
というリクエストがHTTPサーバを通ります。- Railsアプリケーション内に入ると、コントローラのアクションを案内する
ルータ
がいます。 - ルータに
/blogs/1 + GET
というリクエストを伝え、blogsコントローラのshowアクションへ案内してもらいます。 - showアクションで「IDが1のレコードを取得してほしい」という旨を伝え、showアクションが裏側にいるモデルにその旨を伝えます。
- モデルが、実際にDBから、IDが1のレコードを引き出します。
- 引き出したIDが1のレコードは、showアクションにあるインスタンス変数に渡されます。
- IDが1のレコードだけではブラウザで確認できないので、HTMLを生成します。
- HTMLの生成を終え、IDが1のレコードの情報が埋め込まれたHTMLが渡されます。
- HTTPサーバを通って、ブログの詳細画面がレスポンスとして出力されます。
Railsの大まかな処理の流れはこのようになっています。
最初のうちに細部まで完璧に理解する必要はありませんので、まずは全体像を掴むところから初めて見るのがオススメです。