なぜ、Web サービスを作るなら「Django」なのか

TwitterFacebookHatena
  • 公開:2021-8-6
  • 更新:2023-10-26
  • 文章量:2669
  • Python

TL;DR

Web サービスを作るなら、Rails・Django・Laravel が有名ですが、科学技術計算、AI や機械学習、画像処理などと Web アプリケーションを連携させようとした場合に、Django を選択する人は増えつつあります。トレンドの傾向も増えてます。

トレンドの傾向はこのようになってます

Google Trends

Django とは

  • 2005 年にオープンソースで公開
  • Python で Web アプリケーションを作成するためのフレームワーク
  • ユーザー認証機能が豊富
  • ビジネス利用が多い
  • フルスタック

Django 開発では、プロジェクトにアプリケーションを追加していく形で機能を組み込み、設定ファイルで有効化します。

Django で、できること

  • 管理サイト
  • ユーザー認証(パーミッション、ユーザーセッション)
  • ログイン機能
  • マイグレーション機能
  • CRUD
  • セキュリティ対策(CSRF、XSS、パスワード暗号化)
  • 多言語翻訳
  • 地理空間データ
  • Wiki
  • ニュースサイト

管理サイト(Django Admin)は、CRUD(追加・参照・変更・削除)を提供してくれます。その他、検索・フィルタ・ソート・ページネーション・一括操作・変更履歴・パスワード再設定などの機能があります。セキュリティミスを開発者が避けられるようにできています。

Django が使われているサービス

グローバルな Web サービスで増えている印象。

  • Quora
  • Spotify
  • Instagram
  • Pinterest
  • YouTube
  • Google
  • 日経電子版

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

学習に最適な書籍

学習に最適な Django チュートリアル

はじめての Django アプリ作成、その 1 | Django ドキュメント | Django

Django の紹介 - ウェブ開発を学ぶ | MDN

Django 入門 - Python 入門

Django Girls のチュートリアル

なぜ、Web サービスを作るなら「Django」なのか