TL;DR
Web サービスを作るなら、Rails・Django・Laravel が有名ですが、科学技術計算、AI や機械学習、画像処理などと Web アプリケーションを連携させようとした場合に、Django を選択する人は増えつつあります。トレンドの傾向も増えてます。
トレンドの傾向はこのようになってます
Django とは
- 2005 年にオープンソースで公開
- Python で Web アプリケーションを作成するためのフレームワーク
- ユーザー認証機能が豊富
- ビジネス利用が多い
- フルスタック
Django 開発では、プロジェクトにアプリケーションを追加していく形で機能を組み込み、設定ファイルで有効化します。
Django で、できること
- 管理サイト
- ユーザー認証(パーミッション、ユーザーセッション)
- ログイン機能
- マイグレーション機能
- CRUD
- セキュリティ対策(CSRF、XSS、パスワード暗号化)
- 多言語翻訳
- 地理空間データ
- Wiki
- ニュースサイト
管理サイト(Django Admin)は、CRUD(追加・参照・変更・削除)を提供してくれます。その他、検索・フィルタ・ソート・ページネーション・一括操作・変更履歴・パスワード再設定などの機能があります。セキュリティミスを開発者が避けられるようにできています。
Django が使われているサービス
グローバルな Web サービスで増えている印象。
- Quora
- Spotify
- YouTube
- 日経電子版
Django と Rails の比較
Django
- Python のコードをそのまま使える
- セキュリティホールが空かない設計
- デフォルトで管理画面がついてる(開発コストを減らせる)
- Python のコードを活かせる
- 無駄なくコードを書ける
- 自動生成される不要なファイルも少ない
- 可動性が高いから、開発スピードも上げやすい
- AI、機械学習に強い
- 自動生成ファイルの数が少ない(バグを見つけやすい)
- Rails と比べて、機能的な強みの差異は少ない
- scaffold はない
- ユーザーアカウントとパスワードを安全に管理する方法を提供
- 多くの脆弱性に対する保護
- エディタのサポートが充実している
Rails
- 日本語のチュートリアルが充実(古い情報も混在している)
- コード量が少なくて済む
- ググればエラーの対処法が落ちてる
- レイアウトを ERB を使って構築できるが、最近は React や Vue.js が増えつつある
- 魔法のようなコードを覚える必要がある。暗記重視。
- 高速で Web アプリができる
- 国内産の Web サービスが採用しているケースが多い
- Rails 市場はまだまだ活発
- ActiveRecord の利便性
- Ruby でなく Rails 特有の書き方が多いので、学習コストが増える
- 柔軟な言語がゆえに、保守、メンテナンスが忙しくなる
- エディタのサポートが微妙
個人的見解
rails の方がコード量が少なくなるけど抽象的で、Django の方がコード量が増えるけど可読性が高まり分かりやすい印象。エラーがでた場合の対処も楽。暗記が好きなら Rails、Python のコードをバリバリ書きたいなら Django。
とはいえ、似たような Web フレームワークなので、どちらを採用してもいいと思います。
それ以外に、爆速な Go 言語や Node.js のフレームワークを使うという選択肢もあります。
Django が選ばれる理由
しかし、なぜ Django を使ったサービスが増えているのでしょうか?
プログラミング言語 Python の紹介 - python.jpにおいて以下のように述べられています。
Python は C 言語などと比べれば実行速度は劣りますし、メモリ使用量も多くなります。Instagram のように、非常に多くのユーザからのリクエストを処理するサービスでは、最適なプログラミング言語とは言えません。それでも、Instagram は実行性能では劣る Python と Django を採用しています。その理由を、次のように述べています「Instagram のボトルネックは開発速度です。コードの実行速度ではありません。」
この部分に同意です。どんなに処理速度が早くても、開発環境構築・学習コスト・メンテナンスに時間を取られ、開発スピードが落ち、サービスの修正が遅くなればユーザーからの支持は得られないと思います。
上記の理由から、弊社が今後リリース予定の Web アプリケーションにおいて当面は Django を採用することとしました。
ともあれ、エンジニアを目指している方は、Django を使うことで、Python の知識も活かせるし、何を書いているのか理解しやすいので楽しめると思います。
MTV フレームワーク
Django を構成する要素は 3 つあります。
- M:モデル(内部データとビジネスロジック)
- T:テンプレート(UI への出力)
- V:ビュー(UI からの入力)
紛らわしいところ
Rails の「View」は、Django の「Template」です。 Django の「View」は、Rails の「Controller」です。
モデル
- Django ORM(OR マッパー。レコード操作)
- models.py に書く
テンプレート
- html コードに変数の内容を表示
- DTL:テンプレートエンジン
インストール
Python3
brew update
brew info python3
brew install python3
sudo easy_install pip
Django
pip install django
プロジェクト作成
django-admin startproject mysite
サーバー作成
python manage.py runserver