はじめに
はじめまして、エンジニアに向けて日々勉強中の@goooooonです。まだ勉強して1年ではありがますが、Qiitaの記事にはいろんな場面で助けていただきました。今までの復習を兼ねて(それと少しでもこれから勉強される方の0.01mでも参考になったら幸いです)今後少しずつ記事を投稿していきたいと思います。
今回は未熟者なりにこれは最初に理解していたいところだなーと思い返した所を記事にしてみました。
みなさんが普段利用しているWebアプリケーションの処理の流れってイメージできますか?
私はこんなふうに思ってました。
とりあえずすごいことをしているんだろう....はい
サーバーの存在
サーバーとは
サービスを提供するコンピュータやプログラム(またはその役割)です。それには種類がある。
この他にもDNSサーバー、キャッシュサーバー、仮想サーバー、ファイルサーバー、プリントサーバーなどがあり用途に応じて異なる役割する。
Webサーバー
HTMLやCSS、画像ファイルなどWebコンテンツを配信するサーバー。
あらかじめ保存しているコンテンツしか返さない。
APサーバー
JavaやRuby で書かれたプログラムを実行して必要な処理を行うサーバー。
動的にHTMLなどのコンテンツを作成しクライアントに返す。
メールサーバー
電子メールの送信、受信、保管を管理し、電子メールの通信を可能にするサーバー。
DBサーバー
データーベースの管理や操作を行うサーバー。
Webアプリケーションの処理の流れの確認
(APサーバーの処理の流れ)
①ユーザーはブラウザを通してWebサーバーにリクエストを送る
②Webサーバーは動的なリクエストを処理できないのでAPサーバーに処理を依頼
③APサーバーはリクエスト中のクッキーから現在のユーザーを取得しそのユーザに紐づくデータの取得をDBサーバーにリクエスト
④DBサーバーはリクエストに応じたデータをAPサーバーに返す
⑤APサーバーは取得したデータを元にHTMLを生成し(この時にerbなどのテンプレートからHTMLが作られる)、Webサーバーに返す
⑥Webサーバーがユーザーにレスポンスを返す
🌟ポイント
APサーバー単体で機能するのではなくWebサーバーやDBサーバーと連携して操作する。
DBサーバーに接続するには接続情報が必要になる。Railsでいうとapp/config/database.ymlの部分。
イメージ図
上記の流れを踏まえてRailsアプリケーションでの処理の流れを確認
①クライアントからのリクエストはWebサーバーを介してRailsアプリケーションへと受け渡される。
②ルーティング機能がそのリクエスト処理を行うなうべきコントローラ(クラス)とアクション(メソッド)を特定し、アクションを呼ぶ。
③アクションでは、必要に応じてモデルを利用。例えば一覧機能であるindexアクションでは、全ユーザーデータをUserオブジェクト群としてUserクラスから取得。
④モデルがデータベースで永続化されている場合、モデルはデータベースの書き込みや読み出しも担当。indexアクションの場合は、データベースのuserテーブルからの全レコードを読み出すSQLが実行される。
⑤アクションごとに、対応するビューテンプレートを用いてHTML等を生成。
⑥コントローラがレスポンスを作成し、Webサーバを介してクライアントへと返す。
イメージ図
APサーバとDBサーバーの連携
DBサーバーに接続するには接続情報が必要になる。
app/config/database.ymlの中では、development,test,productionの3種類の環境用に、それぞれデータベースの接続に必要な設定がされている。
必要に応じて記述する。
adapter: DBの接続に使用するアダプタ名(mysql2,postgresqlなど)
encoding: 文字コード
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> (コネクション数の上限)
database: データベース名
username: データベースに接続するユーザ名
password: データベースに接続するパスワード
host: データベースが動作しているホスト名またはIPアドレス
*IPアドレスとはコンピュータに割り当てられた「住所」(識別番号)
まとめ
処理の流れの大体イメージしてから勉強を進めるとに入ると頭に入りやすくなると思います
参考書
・Web技術の基本
・現場で使えるRuby on Rails5 速習実践ガイド