私は初学者ですよという前置き
初めて使ったフレームワークがDjangoで、その後Ruby on Railsを勉強しています。
やたら似ているなと思い調べたところ、どちらもMVCという考え方から作られたフレームワークだということを知りました。
「これは全体像の理解が大事なタイプのやつだな〜」と思ったのでアウトプットを通して勉強しようとした感じの記事です。
同じ初学者の役に立てたら嬉しいですが、まだエンジニアでもないスーパージュニアエンジニアの書いた記事なので疑いながら参考にしてくれたら助かります。
また、エンジニアの方で記事の誤りを見つけた場合はぜひご教授ください。
まずはDjangoの全体像を掴む
先に全体像を把握してると、先輩のエンジニアと話す時に「何言ってるのかさっぱり分からん」から「あ〜、このへんの話をしてるんだな〜、それ以外はさっぱり分からん」に変化して成長スピードが変わる気がするのでおすすめです。
一例ではありますが、Djangoは主に図のようなデータの流れでWebページを表示しています。
①ブラウザから送られてきたhttpリクエストが
②uWSGIでDjangoが扱える形(リクエストオブジェクト)に変換されて、
③プロジェクト(Django全体)のurls.pyによって、使う機能(アプリ)のurls.pyにルーティングされ、
④アプリのurls.pyは、受信したリクエストオブジェクトを、エンドポイント(URLみたいなもの)を参考に、適切なビュー関数(views.py内の関数)にルーティング(接続)して
⑤views.pyでは受け取ったリクエストオブジェクトからレスポンスオブジェクトを作成するもので、そのためにmodels.pyに指示をしてデータベースとのデータをやり取りしたり、templatesからhtmlを受け取ったりする、様々な処理(ビュー関数)が記載されている。そのうちの指定のある処理(ビュー関数)を実行して、レスポンスオブジェクトを作成して、
⑥作成したレスポンスオブジェクトをuwsgiを通して、httpレスポンスとしてブラウザに返す。
ざっくり言うと、このようなデータの流れです。
この流れを踏まえつつ、図に載せている。エネミーコントローラーや、謎の女性モデルなどの謎の画像たちに触れながらMVCフレームワークを理解していきたいと思います。
MVCとは
教科書っぽく言うと、
MVCとは、「Model(モデル)」「View(ビュー)」「Controller(コントローラ)」の頭文字をとったもので、これはプログラミングにおける設計の方法(設計パターン)。アプリケーションの役割を3つに分けることで、整理しやすく、保守しやすくする。
といった、説明になります。ここからそれらについてイメージを掴んでいきたいと思います。
Model
データベースとデータのやり取りをする、いわゆる「処理」の担当です。私は英語に疎いので、モデルというと女性モデルしか浮かばないのでこのようなイメージを持ちました。
いかにもデータのやり取りをしそうな理系女性モデルですね。好きです。
View
Viewは見た目を管理する部分です。英語に疎い私でもなんとなく「観る」的な意味だと理解できたので、このようなモニターの様なイメージをしています。
Controller
Controllerはコントローラーです。司令官的な意味合いですけど。私はエネミーコントローラーしかでてきませんでした。相手モンスターであろうが逆らえないコントローラー。
← → B A
MVCの相関図はこのようにイメージできます。
このようにそれぞれに担当分野で分けることによって、開発中に「あれ、ここの見た目おかしいぞ」ってなったときに「View部分ににエラーがある可能性が高いね!」とできるのがメリットというわけです。
MVCについてはググればググるほど奥深く、オブジェクト指向とかに近い概念チックな分野だと感じたので、私はこのようなイメージをいったん中心として脳みそに保存しようと思いました。
MVCの概念を踏まえて改めてDjangoを見る
MVCの考え方に合わせると、
Model部分は、models.py
Vew部分は、templatesファイル
Controller部分は、urls.pyとViews.py
と言えそうです。めっちゃややこしい。なぜ、コントローラー部分にviewsと名付けたのか。。。
私が初めて Djangoで開発して難しいと感じたのも、このviewsのイメージが掴めていなかったのが原因でした。
(過去のMVCではview部分が見た目の「生成」をしてたから、その意味合いなのかもなとも思いました。知らんけど。)
文句はいいつつも、DjangoはMVCの考え方を使ったフレームワークということで、MVCフレームワークのひとつなのだなと、しっかり認識することができました。
まとめ
Djangoというフレームワークからレイヤーを上げる感じでMVCという概念をふんわり掴むことができました。
この全体像をイメージしながら引き続きRuby on Railsの学習を続けていって、理解がカチッとハマったら、また記事にしたいと思います。