私がDjangoでWeb開発を行う理由
はじめに
今回の記事では、私がPythonのWebフレームワーク「Django」で開発を進める理由を独自の視点から徹底解説する。今回の記事の読者の対象は主に以下の通り。
- 個人開発でDjangoを使おうとしているプログラマー
- Djangoについて深く理解したいプログラマー
- Djangoを個人開発(Web開発)に採用するメリット・デメリットを把握したいプログラマー
- すでにRailsやLaravelなど他のWebフレームワークを使った開発を経験しており、他のWebフレームワークの特徴を把握しておきたいプログラマー
- Web開発の技術選定で困っているプログラマー
Djangoとは
DjangoはPythonで開発されたWebフレームワークである。フレームワークを簡潔に説明すると、開発に必要な機能をデフォルトで揃えているものを意味する。WebフレームワークはWebアプリケーションの開発を効率化させるためには必要不可欠である。Pythonで開発されたフレームワークは数多く存在するものの、Djangoは様々な機能をアプリケーションに取り入れられる。
Djangoの特徴
高いセキュリティ性能
Djangoの特徴の1つに高いセキュリティ性能が挙げられる。DjangoではWeb開発を進めるには、手動でセキュリティ機能を実装する必要がない。デフォルトで管理サイトへのログインや認証機能、SQLインジェクションやXSS(クロスサイトスクリプティング)などのセキュリティ上の重大な欠陥を未然に阻止できるように設計されているからだ。そのため、アプリケーションに取り入れたい機能を実装することに集中できる。
DRYの法則に忠実
DjangoはDRYの法則に忠実なので、Web開発を迅速に進めるには役立つ。DRYの法則とは、ソフトウェアの攻勢や開発手法に関するルールの1つだ。Don't Repeat Yourself.の略称で、同じ意味や機能を持つ情報を複数の場所に重複して置くことを極力避けるべきだとする考え方を意味する。そのため、Djangoでは既存のプログラムやコードを他のアプリで使いまわしたり、開発に必要な機能を少ないコードで書いたりすることができるのだ。
余談だが、実際にDjangoの公式サイトのトップページに以下のような文言が書かれている。
The web framework for perfectionists with deadlines.
これを意訳すると、「締切が近い完璧主義者のためのWebフレームワーク」となる。このことから、Djangoは短時間かつ簡単にWebアプリケーションを開発できるように設計されたフレームワークだということがわかる。
アーキテクチャが簡単(MVC)
Djangoのアーキテクチャ(簡単に言えば、アプリケーションの構造を意味する)は非常にシンプルである。DjangoはMVCパターン(Model-View-Controller)を採用している。
MVCアーキテクチャで、プログラマーはアプリのUI部分(目に見える部分)やビジネスロジック部分を別々に、かつお互いに影響を与えずに変更できる。実際には、DjangoはTemplate(いわゆるHTMLファイル)でControllerの部分を構築するのでMVTパターン(Model-View-Template)と言われることもある。それぞれ3つの層(Model、View、Template)はそれぞれ独立して使える。各レイヤー間の通信はAPIを経由して行われる。
※下図はDjangoでのMVTパターンを図にまとめたものである。
Model、ViewとTemplateの役割をそれぞれ簡潔に解説する。
- Model:アプリケーションに関する唯一の情報源。属性(Field)で表現される。保存するデータの必須フィールドと動作が含まれている。それぞれのモデルは1つのデータベーステーブルに対応する。Djangoは公式でSQLに対応したデータベース(SQLite、MySQL、PostgreSQL、Oracle)をサポートしている。Modelによって、プログラマーはデータベース内のデータを作成(Create)、読み込み(Read)、更新(Update)、削除(Delete)できる。
- View:HTTPリクエストを受け、Pythonのクラスや関数が提供するビジネスロジックを適用し、クライアントのリクエストに対してHTTPレスポンスを提供する役割を果たす。要は、ViewはModelからデータを取得し、それぞれのTemplateに表示するべき特定のデータにアクセスさせるか、予めデータを加工しておく。
- Template:データをレンダリングするために使われるHTMLプログラムを含むファイルである。原則HTMLファイルで作成される。ビジネスロジックがないので、アプリケーションのデータを表示するために使われる。
Djangoで開発を進めるべき理由
ここから本題に入る。Djangoで開発を進めるべき理由を3つ紹介する。
- 公式ドキュメントが充実しているから
- Web開発に必要な機能がデフォルトで揃っているから
- エコシステムが発達しているから
- 世界的に有名なアプリケーションのバックエンドに採用されているから
公式ドキュメントが充実しているから
Djangoで開発を進めるべき最大の理由は公式ドキュメントが充実していることにある。公式ドキュメントの見やすさと読みやすさはフレームワークの学習コストに多大な影響を与える。Djangoには初心者向けに簡単なアプリケーションを開発できるチュートリアルが用意されている。更に、一部不備なところはあるものの公式ドキュメントが日本語に対応していて英語に慣れていないプログラマーや初心者でも内容を理解しやすい。
Djangoでは公式のチュートリアルにあるプログラムや開発フローをコピペすれば簡単なWebアプリケーションを開発できる。さらに、Djangoで登場する専門用語や重要な機能を実装する方法には丁寧な解説もついているのでスムーズに理解しやすい。
Djangoは公式ドキュメントの質が非常に高く、初心者でもわかりやすく設計されているので開発のコストは高くない。
Web開発に必要な機能がデフォルトで揃っているから
DjangoはWebアプリケーションを開発するのに必要な機能をデフォルトで揃えている。Djangoをインストールした後、コマンドを入力するだけでアプリケーションの開発に必要な機能を同時にインストールできるので一からプログラムを書く必要がない。初期プロジェクトをインストールした後、サーバを立ち上げるコマンドを実行するだけで簡単にアプリケーションを開発できる。そのため、自分のアプリケーションに新しく実装したい機能を実装することに没頭できる。
エコシステムが発達しているから
Djangoで開発を進めるべき理由の1つに、エコシステム(簡単に言えば、言語・フレームワークに関する情報ネットワーク)が発達していることが挙げられる。Djangoは2005年にリリースされて以来17年も経過していて、大幅な改良やアップデートを経て進化を遂げてきた。Djangoには数多くのサードパーティ製のライブラリが開発されている。(詳細は以下のGitHubリポジトリを参照)これらはDjangoでのアプリケーション開発の効率を高めてくれる。
特に以下のライブラリはDjangoを使ったWeb開発に幅を持たせている。
- Django REST Framework:DjangoでREST APIを開発するのに役立つライブラリ。スマホアプリのバックエンドやAPIを使ったマイクロサービスのバックエンドにも使われている。
- Django CMS:Djangoでコンテンツ管理システム(CMS、Contents Management System)を開発するのに役立つライブラリ。公式ドキュメントはこちら。
Djangoは17年前からも存在していて今でもプログラマーに活用されているので、Djangoに関する具体的なテクニックやエラーの解決策などがネット上に公開されている。そのため、開発で遭遇するエラーやバグの解決策を簡単に発見しやすい。
このように、Djangoにはプログラマーが効率的にWeb開発が整っているので開発で使うべきフレームワークである。
世界的に有名なアプリケーションのバックエンドに採用されているから
Djangoは世界的に有名なアプリケーションのバックエンドに採用されている。バックエンドにDjangoが採用されているアプリケーションは以下の通り。下記に挙げられているアプリケーションは世界的に有名なものなので、Djangoが世界有数の企業から信頼されていることがわかる。
- YouTube
- Spotify
- Dropbox
Djangoを採用するデメリット
もちろん、Web開発にDjangoを採用することには以下のようなデメリットがある。
- カスタマイズ性が低く、融通がきかない
- WebSocketによる双方向通信に対応していない
カスタマイズ性が低く、融通がきかない
Djangoはデフォルトで様々な機能を搭載しているフルスタックフレームワークであるがゆえに、簡単なTodoアプリやチャットアプリを開発するにはあまり適さない。シンプルな機能を持つアプリを開発したいなら、FastAPIやFlaskのような軽量のWebフレームワークがより適している。
WebSocketによる双方向通信に対応していない
WebSocketを使えば、情報やイベントをリアルタイムで更新できる。しかし、DjangoはデフォルトでWebSocketに対応していないので他のサードパーティ製のライブラリを使う必要がある。WebSocketを使ったアプリを開発したいなら別のフレームワークを使おう。
まとめ
今回の記事では、DjangoをWeb開発で使う理由を概要と特徴、デメリットと同時に徹底解説した。今回の記事を参考に、DjangoでWeb開発を始めるきっかけになれば非常に幸いである。
余談
技術選定の際に言語やフレームワークを決める理由を、予めZenn等にメモとして書き残すことで効率的に説明内容を考えられることを思いついた。
参考サイト
Discussion
Djangoで開発を進めるべき理由をこのように挙げられていますが
有名どころのフレームワークだったら全て当てはまる特徴だと思いました。
他のフレームワークにないDjangoならではの特徴・メリットなどはありますか?