djangoに入門したので、特徴をざっくりまとめ。
ウェブサービスを作ることになって、さて何を使おうかと考えて、最終的にdjangoを使ってみよう、ということにした。
なぜdjangoにしたかというと、キャリアとしてPythonを知っていることが今後重要になると感じたから。PythonはWeb、ロボット、機械学習、スタンドアロン、なんにでも使えるしPython3を使うのにもいい感じになってきているらしいので。
とりあえず最新版の1.11.x系を触った。
djangoの特徴
MVT
MVT(Model, View, Template)になっている。言葉が違うだけでだいたいMVCと同じ。
Mは同じくModelだけど、ViewはMVCで言うControllerの役目。TemplateがMVCのViewを担う感じ。
ある程度の規約はあるが、比較的自由に書ける。Templateの命名ルールもデフォルト値はあるが簡単に書き換えも可能。しかし規約どおりに作るとコードがどんどん減っていく作りになっている。
form・modelクラス
modelクラスはDBとのつなぎ役をやってくれるわけだけど、formクラスはウェブフォームを定義するクラス。テンプレートで使用するフォームを定義し、テンプレートの読み込ませるとその定義どおりのフォームを自動生成してくれる。
そしてそのformクラスとmodelクラスを組み合わせた、ModelFormというクラスが有り、これを定義すると、モデルとフォームのヒモ付が完了したフォームが自動生成される。
汎用ビュークラス(generic view)
よく使う機能をまるっと集めたクラス。
各CRUDやList、Detail、Redirectなどよく使う機能をお手軽に生成できる。
これを定義する時に、先に紹介したFormやModelを変数に入れるだけで画面ができてしまう。とても簡略的に書くと
class xxxcreateview(CreateView) :
model = XXXX
form = XXXX
template = XXXX
こんなかんじ。手っ取り早く機能だけをズバーっと作りたいときにとても便利。
adminページ
DBをコントロールすることの出来る管理ページが自動生成される。
開発用にDBいじりたいわーとか、テスト用のデータ作りたいわーなんて言う時に便利。
テスターの人に「こういうデータ作って」なんて言われることが減ります。ユーザ発行して作ってもらえば良いんだし。
python manager.py runserver
開発用サーバ立ち上げコマンド。このコマンドを実行すると開発用サーバが立ち上がり、プレビューが可能になる。このコマンドの場合、コードが一部変更されると自動的にサーバが再起動するので、確認が楽。
ちなみに、python manage.pyにはいろんなコマンドがあり、マイグレーションやアプリケーションの作成なども含まれる。
djangoのやりにくさ
利用実績&最新バージョンの日本語情報は少ない
採用しているサービスが少ないがゆえの宿命だと思う。機械学習が流行ってるから、ぼちぼちdjango使ってみたよーって人は増えてくると思うけど、やっぱり情報が少ない。書籍もほぼ見かけない。公式ドキュメントとstackoverflowと友だちになろう。
プロジェクトの構造どうするのが最適なんだろう?
django-admin のコマンドでプロジェクト生成すると、なーんか気持ちの良くない構造が最初に生成される。VisualStudioでDjangoのプロジェクトを生成するとまた違うプロジェクト構造が生まれてくる。どれがベストプラクティスなん?っていうのも明確にないし、公式が発行しているプロジェクト構造もなんかなーという感じ。ここは模索していくことになるだろう。
エディタ
多分pycharmが最強なんだろうけど、高いし、visual studio codeで書いてるけどいまいち補完が役に立たなかったりする。インポートとかも結構めんどくさかったりもするので、そのへん、いい感じのないのかなー。とおもうと pycharmなんだよなー…。という感じに。
VisualStudioはどうなんだろう。使ってみなければ。
ライブラリ
PHPとかRailsとかに比べればライブラリの数は少ないと思う。なければ作る!の気概がある程度必要。
まとめ
概ね気に入ってます。
初めて触ったWebフレームワークはRailsだったけど、正直肌に合わなかった。理由は使い方以前に規約が多すぎて覚えらんなかったから。djangoは規約はあれどもそこまで強いものではないし、書きやすい。
特に汎用ビューの使い方がわかってくると、どんどん機能を作っていけるようになるから学んでいて楽しいしね。
次からは使い方周りとかをまとめていこうと思います。