MVCモデルについて学習したことはあるが、なんとなく曖昧だったので、勉強した。
以下の画像を用いて説明する。
まず、ブラウザにURLを打ち込むと、DNS(ドメインネームシステム)によってIPアドレスに変換される。IPアドレスとは現実世界で言う住所のようなものだ。
WEBサーバにリクエストを送る際、HTTP通信という方法でリクエストが送られる。すると今度はWEBサーバが「あぁ〜これはここから情報をもってくればいいのね!」と判断してくれて、index.htmlやらxxxx.pngなどの文字情報や画像、動画などがレスポンスとしてHTTP通信を介して送られる。
関連:HTMLはレスポンスされた状態だとただのテキストデータである
JavaScriptの基礎をおさえる 番外編 〜innerTextとinnerHTMLの違いとは? DOMって何?〜
でも書いたが、HTMLはそのままではただのテキストデータである。DOMによってタグ情報やCSSの情報などが整理されて、見やすいページに表示される。
で、WEBサーバが「あ、これRailsだ!」と判断して初めてRoutingに情報が送られる。
Routingを通って、まずはリクエストに応えるため、適切なアクションをControllerから探す。Controllerは司令塔のような役割を果たしているから、直接Viewに働きかけてページを表示するよう指示することもあれば、Modelに働きかけてDBとのやりとりを行わせ、その結果をController→View→Controllerの順に情報が流れる。最終的にHTTP通信を用いてブラウザに出力される。
このように一口にMVCモデルといっても、実はコンピュータのさまざまな動きと連携してなされていることであり、機械的にMVCの役割を言うことができたとしても、それが周りとどう関係しているか、をおさえることが肝要だと感じた。
まとめ
MVCモデルについて初めて勉強したときは、無機質に「Mはモデルで、データベースとのやりとりを行なって、Vはビューで、情報を表示するための場所で・・・」と暗記のように頭に叩き込んだが、今回のように調べたり人に聞いたりしていくと、なるほどコンピュータはこうやって動いているのか、と合点のいく場所が何箇所もあった。
ちなみに、「なぜDNSでドメインをIPアドレスに指定するの?最初からIPアドレス入力したらいいじゃん」と最初は思ったのですが、IPアドレスは数字の羅列で人間には「この数字が何を意味するのか?」はわからない。ドメイン名があることで、「あぁこれは〜のサイトだ」と判断できるわけである。また、フィッシング詐欺等にもドメイン名が正しいか見ることで対応できるのではないかと思った。(google.comがあったとして、gooogle.comは似ているけど違うサイト)
また、これらの知識はAWSでデプロイをする際にわけもわからず見よう見まねで行ったことの復習にも通じている。「80番ポートって何?」「localhost3000って何者?」という部分も自分なりに調べることで納得がいった。