MVCフレームワークで疲弊した諸君、独断と偏見で覚えてみないか?
もちろん私の考え方は大分歪んでいるだろうが、面白い体験になることは保証する
なお、今回はDjangoを例として使う
MVCの核心を一言で表すならこうだろう
「コード化されたER図に分けられたロジックにある程度動くHTML」
こいつの何が凄いのか、今回はModelを例にして説明しよう
View、Controllerも確かに凄い技術ではあるのだが、Modelの威力には敵わない
フルスクラッチPHPでスキーマを変更してみる
君はフルスクラッチPHPでコードを書く現場に所属された
上司がSQLのスキーマを変えてくれと言う
その場合、君は以下の処理をしなければならない
- ExcelでER図を更新する
- 生SQL文でDBを更新する
- DBのチェックを入れる
- テストを行う(現場によっては手動テストかもしれない)
- 深夜になった。君はようやく帰れる
ER図を知らない人向けに説明すると、ざっくり言うとにRDBMSの関連図だ
これをExcelで作るのはただただ苦痛だ。その上コロコロ変わりやがる
生SQL文はレガシーで、今時触りたい代物ではない
DBのチェックなんて出来る事ならしたくない
テスト? どうせ手動だろ? もう勘弁してくれよ
ようやく帰れた頃にはもう睡眠時間しか残されてない
こんなくたくたな毎日からおさらばしよう
Modelの威力を発揮する
君はDjangoを扱う現場に所属された
上司がSQLのスキーマを変えてくれと言った
その場合、君は以下の処理だけでいい
- Djangoでスキーマを変更してみる
- DBの書き換え(マイグレートと呼ぶ。モダンなSQL文みたいなものを自動生成してスキーマを書き換える事)をする
- テストを行う
- お昼でさようなら
嘘のような話だが、フルスクラッチPHP書きにとっては残念ながら真実だ
Modelと呼ばれる、ER図をコードにしたものを書き換え、マイグレートして、テストを行うだけだ
マイグレートと聞くと難しいと感じる人も多いかもしれないが、やる事はターミナル開いて以下の二行を打つだけだ。
python manage.py makemigrations
python manage.py migrate
これだけでSQLのスキーマは変わった。後はテストをするだけで現場からおさらば出来る
実際に体験してみる
この素晴らしい機能を実際に体験してみよう
君は、上司に「簡単なTODOアプリのモデルを作ってくれ」と言われた
整理した結果、ユーザーとTODOのテーブルと、外部キーがあれば十分なことが把握した
フルスクラッチPHPで書くなんていう拷問はやめよう。いきなりDjangoに飛び込むんだ。
まず、君はModelを書く事にした
その結果、以下のコードを書いた
from django.db import models
class User(models.Model):
name = models.CharField(max_length=20)
password = models.CharField(max_length=20)
class Todo(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.CharField(max_length=140)
厳密には間違ったコード(Djangoにはユーザーのモデルが標準で搭載されており、それを引っ張ってくるだけで十分。それとパスワードを暗号化していない)なのだが、説明が楽だし何より上司の目はごまかせそうなので大丈夫だろう
一応コードの意味を説明すると、1行目でDjangoのmodels機能を引っ張ってきて、継承している
CharFieldはただの文字列型、ForeignKeyはただの外部キーだ
こんなちっぽけなコードだけで、君のアフター5は保証される
次は、DBを更新しよう
と言ってもやることは簡単だ。さっき説明した通りに
python manage.py makemigrations
python manage.py migrate
これだけで君はDBの書き換えに成功する
後は自動テストなり手動テストなりして現場からおさらば出来る
浮いた時間でアニメでも見よう。お薦めはプリパラだ
#View,Controllerの解説
動くHTMLとロジック、以上
需要があれば書く