PythonのフレームワークDjangoとは?特徴やできることをご紹介
Djangoとは、Pythonで実装されたWebアプリケーションのフレームワークのひとつです。他のPythonで実装されたフレームワークと比較して多くの機能を備えており、広く使われているフレームワークである一方、活用するためには把握しておきたい特徴があります。
この記事では、Djangoの特徴やできること、インストール方法までをご紹介します。
この記事の監修者
株式会社Macbee Planet
永井 琢也
株式会社 Macbee Planet 入社後、データ解析プラットフォーム「ハニカム」の開発や、リバースETLツール「DATAHIVE」の新規開発に関わる。
同社開発部門のプリンシプルでもある「Impact-driven(技術によって事業成長にインパクトをもた…
Django(ジャンゴ)とは
Djangoとは、Pythonで実装されたWebアプリケーションフレームワークです。オープンソースであるため、誰でも無料で利用できます。
DjangoはPythonのフレームワークの中でも、利用者の多いものです。Python Software Foundation と JetBrainsが共同で実施した「2022 年 Python 開発者アンケートの結果」によると、Python開発者が使うフレームワークの中で、DjangoはFlaskと同率1位となっています。
参考:2022 年 Python 開発者アンケートの結果|JetBrains
Djangoについて、簡単に特徴をご紹介します。
【Djangoの特徴1】フルスタック・フレームワーク
Djangoは、フルスタック・フレームワークです。Djangoの場合、フルスタックとはWebアプリケーションの実装に必要な機能が一通り備わっていることを指します。Djangoには、WebアプリケーションやWebサイト構築でよく利用される、ユーザー認証や管理画面、RSSフィードやサイトマップといった機能が含まれています。
Pythonには、FlaskやFastAPIなど、搭載機能を厳選した軽量なフレームワークもあります。Djangoはそれらのフレームワークに比べて、開発を進める上で便利な多くの機能を提供していますが、開発の機能要件によっては、オーバースペックになってしまうことがあります。そのため、どういったWebサイトやWebサービスを作りたいのかについて整理を行い、その要件に応じて、どのフレームワークを利用するのかを検討する必要があります。
フレームワークについて詳しくは下記記事をご参照ください。
【Djangoの特徴2】MTVモデルを採用
Djangoでは、「MTVモデル(Model Template View)」というソフトウェアの設計モデルを採用しています。
MTVモデルとは
Ruby on Railsなどで使われている著名な設計モデルに、MVCモデルがあります。これは機能を「Model(モデル)」「View(ビュー)」、「Controller(コントローラ)」の3つの役割に分けて実装し、3つが互いに連携して処理を進める方式です。
DjangoのMTVモデルでもMVCモデルと同じように、下記の3つの役割に分けて、実装を進めます。
- モデル(Model):ビューからのデータの要求に応じて、データベースと連携を行い、ビューにデータを返す役割を担います。
- ビュー(View):ユーザからのリクエストを処理した後、モデルにデータを要求し、モデルから受け取ったデータをテンプレートに渡す役割を担います。
- テンプレート(Template):ビューからデータを受け取り、主にWebブラウザ等にデータを表示する役割を担います。
MTVモデルの利点
MTVモデルを採用しているフレームワークを用いた開発では、ユーザからのリクエストに対応するプログラムの処理が役割ごとに分担されます。このことから、開発者自身がプログラムに変更を加える際に、どのプログラムを変更すれば良いのかが分かりやすくなるという利点があります。
【Djangoの特徴3】セキュリティ
Djangoはサイバー攻撃への対策やユーザー認証システムを備えているなど、セキュリティに関わる機能についても考慮がなされています(後述)。
TECH STOCKでは、Pythonエンジニアのキャリアアップのヒントを紹介する資料を配布しています。フリーランスとして、年収アップを目指す方はぜひご覧ください。
Djangoでできること
Djangoが活用されるケースは、主にWebアプリケーションとWebAPIの作成の2つです。
Webアプリケーションの作成
Djangoでは、ニュースサイトや画像共有サイトなど、さまざまなWebアプリケーションを作成できます。機能が充実しているため、比較的大規模なWebアプリケーションでも使われています。Djangoで開発されたWebアプリケーションとして有名なものには、画像共有サービスのInstagram、音楽ストリーミングサービスのSpotifyなどがあります。
WebAPIの作成
API(Application Programming Interface)とは、ソフトウェアやプログラム、Webサービスの間をつなぐインターフェースです。WebAPIとも呼ばれます。AサービスがBサービスを使いたいときには、Bサービスから提供されているAPIをAサービスが呼び出しデータのやり取りをすることによって、Bサービスの利用を可能にします。
Djangoでは、API開発のためのライブラリを集めた「Django REST framework」を用いてAPIを作るケースがあります。これにより、RESTの設計原則に基づいたAPIをスピーディーに作成できます。
Djangoが提供している機能
Djangoが保有する主な機能をご紹介します。
TECH STOCKでは、Pythonエンジニアのキャリアアップのヒントを紹介する資料を配布しています。フリーランスとして、年収アップを目指す方はぜひご覧ください。
管理画面の自動生成
Webサイトを作るにあたっては、設定変更や状況確認を行うための管理画面が必要です。Djangoでは、管理画面は開発するWebアプリケーションに標準で搭載されます。日本語化するなどのカスタマイズも可能です。
ユーザー認証機能
Djangoにはパスワードの変更やログイン・ログアウトといったユーザー認証機能が標準で搭載されています。また、ユーザーごとの権限機能も共に提供しています。
その他にユーザー認証に使えるパッケージとして、ユーザー登録やSNSアカウントとの紐づけまでカバーしているdjango-allauthが代表的です。
ORM (Object-Relational Mapping)
ORM(Object-Relational Mapping:オブジェクト関係マッピング)とは、オブジェクトとデータベースをマッピングすることで、データベースを操作する手法です。O/Rマッパー、O/Rマッピングという別名もあります。
DjangoではORMでデータベースを操作するため、リレーショナルデータベースの操作に必要となるSQLを記述する必要がありません。
サイトマップ
サイトマップとは、Webサイトの全体構成をリストにしたものです。XMLファイルなどの形式で、最終アップロード日、通常の更新頻度などの情報を含みます。Googleなどの検索エンジンは、効率的なクロールのためにこのサイトマップを読み込みます。
そのため、Webサイトを作成する際にはサイトマップがあると検索に有利となる場合があります。特に、大規模なサイト、新しいために外部からのリンクが少ないサイト、動画や画像が多いサイトでは、サイトマップがあるほうが検索されやすくなります。
Djangoではこのサイトマップを自動生成できるツールを備えています。
RSSフィード
RSSとは、Webサイトのニュースやブログなどの更新情報を配信するためのXMLデータフォーマットです。RSSフィードは、RSS形式でWebサイトの更新情報を配信する機能のことです。外部サイトのRSSフィードを受け取ることで、外部サイトのニュース記事を自社のサイトで掲載することが可能となります。RSSフィードはRSSリーダーというツールで受け取ることになります。
DjangoではこのRSSフィードを作成するための機能があります。またRSSリーダーを作成することも可能です。
テンプレートエンジン
テンプレートエンジンとは、ひな形であるテンプレートと入力データを合成して、成果ドキュメントを出力するソフトウェアのことです。テンプレートエンジンを使うと、ダイナミックHTMLを作成できます。
Djangoにはテンプレートエンジンがあり、jinja2が代表的です。
ページネーション(ページング)
ページネーション(ページング)とは、大量の情報を一覧表の形で表示するときに、ページを分けて表示する機能です。一度に表示する数を決めて表を別ページを分けることで、一覧表を見やすくします。
Djangoには、ページネーションの機能が標準で備わっています。
セキュリティ機能
Djangoはセキュリティ機能にも定評があります。Djangoで実現している主なセキュリティ対策をご紹介します。
SQLインジェクションへの対策
SQLインジェクションとはサイバー攻撃のひとつで、データベースを操作する言語SQLを悪用して、データベースに不適切な動作をさせるものです。
Djangoでは、データベースの操作にORMを採用しています。ORMは、データベースドライバー側でクエリの記号や変数を自動的にエスケープする仕組みを持っているため、不審な操作を防げます。
※SQLを直接使用する場合には別途SQLインジェクション対策が必要です。
クロスサイトスクリプティング (XSS)への対策
クロスサイトスクリプティング(XSS)とは、WebサイトのHTMLに悪質なスクリプトを埋め込み、サイトを訪れたユーザーに意図しない動作をさせるサイバー攻撃です。スクリプトを実行した結果、マルウェアへの感染や情報漏えいが引き起こされる場合もあります。
DjangoではHTMLに使われる特定の記号を自動的にエスケープする機能を持っているため、悪質なスクリプトから防御できます。
ただし、DjangoのセキュリティにはXSSが保護されない例も挙げられているため、XSS保護の理解を深めておくといいでしょう。
クリックジャッキングへの対策
クリックジャッキングとは、Webサイト上に隠れた、あるいは偽装したリンクやボタンを設置し、Webサイトへ訪問したユーザーを騙してリンクやボタンをクリックさせる攻撃です。ユーザーは悪意あるサイトに誘導されたり埋め込まれたコードを実行させられたりするなど、被害を受けることになります。
Djangoでは、HTTPレスポンスヘッダーの項目の設定することによって、クリックジャッキングを防いでいます。
クロスサイトリクエストフォージェリ (CSRF)への対策
クロスサイトリクエストフォージェリ(CSRF)は、Webアプリケーションの脆弱性をついたサイバー攻撃のひとつです。
悪意ある第三者がユーザーを騙して意図しないリクエストを送信させ、Webサイト側がそのリクエストが意図したものかどうか検証せずに受け入れてしまうことによって、ユーザーが送金や商品購入など予期しない操作を実行させられるというものです。Djangoでは、CSRF の検証ができる機能を備えています。
Djangoを用いた開発の始め方
では、実際にPythonやDjangoをPCにインストールする方法をご紹介します。
なお、インストールする環境は、OSはWindows11、Pythonのバージョンは3.11.4、Djangoのバージョンは4.2.4です。PCのOSによってインストール手順は若干異なるため、Windows以外のOSへインストールしたい場合は下記のページをご参照ください。
TECH STOCKでは、Pythonエンジニアのキャリアアップのヒントを紹介する資料を配布しています。フリーランスとして、年収アップを目指す方はぜひご覧ください。
Pythonのインストール
1.Pythonのパッケージが保管されている python.org にアクセスします。Pythonをインストールする環境に合わせてパッケージを選択し、ダウンロードします。
2.ダウンロードしたパッケージを実行します。
仮想環境を作る
Pythonの開発において、PythonやDjangoのさまざまなバージョンを使用するケースがあります。ひとつのPCで複数の環境を利用したい場合には、仮想環境を作る方法があります。仮想環境上では用途に応じて、PythonやDjangoをインストールして専用の実行環境を作り、切り替えて使用することが可能です。
ここでは、Python3の標準ライブラリである「venv」を使って、仮想環境をコマンドプロンプトで作成します。
1.コマンドプロンプトで、下記コマンドを実行し、ディレクトリを作成します。(以下、Cドライブの直下にsample1というディレクトリを作成しています)
mkdir sample1
2.作成したディレクトリに移動します。
cd sample1
3.次のコマンドを実行します。
python -m venv .venv
※「.venv」は仮想環境のディレクトリ名です。任意の文字列を設定できます。
4.作成した仮想環境 .venvディレクトリの下にある Script\activate.bat を実行します。
.venv\Scripts\activate.bat
成功すると、コマンドプロンプトの先頭に「(.venv)」が付きます。この状態が、仮想環境が起動しているということになります。
pipをアップグレード
pip は、「The Python Package Index(PyPI)」に公開されているPythonパッケージのインストールなどを行うユーティリティです。PyPIにはサードパーティが作成・配布したパッケージがまとめられており、これらのパッケージを使う際には別途インストールが必要となります。このインストールに使うのがpipです。
pipは、Djangoのインストールの前に最新バージョンにアップデートしておきます。下記のコマンドで、pipを最新バージョンにアップデートできます。
python -m pip install –upgrade pip
Djangoのインストール
1.仮想環境ディレクトリ(sample1)の直下に、requirements.txtというファイルを作成します。そのファイル内に下記を記載し、保存します。(※requirements.txtでは、インストールするDjangoのバージョンを示しています)
Django~=4.2
2.下記のコマンドで、Djangoをインストールします。
pip install -r requirements.txt
Successfull installed……と表示され、Djangoがインストールされました。
インストール後の確認
ここまで完了したら、インストールの確認のため、Djangoのバージョンを表示させてみましょう。
python -m django –version
を実行すると、Djangoのバージョンが表示されます。
インストール済みのDjangoのバージョンが、4.2.4であることを確認できました。
Djangoの学習方法
Djangoの学習方法について、ご紹介します。
Djangoはフルスタック・フレームワークであり、機能が多岐にわたりますが、全ての機能を網羅するのは時間がかかります。またPythonのフレームワークは英語の資料が多く、日本語の資料は少ない傾向にあります。Djangoには学習コストがかかると考えておくと無難です。
ただ、「Flask」「FastAPI」「Streamlit」などの他のPythonのフレームワークと比較すると、Djangoは日本語の資料や書籍が充実しているため、学習の負荷はそれらよりも少ないと言えます。
Djangoを学ぶ上で参考になるWebサイトや書籍をご紹介します。
Webサイト・参考ドキュメント
Django ドキュメント
Django Software Foundationが公開している、Djangoの公式ドキュメントです。入門レベルの人向けのチュートリアル、重要なトピックや概念について書かれたトピックガイド、技術的な仕組みについてのリファレンスガイド、よくある問題に対しての解決策が書かれたHow-toガイドなどが日本語に翻訳されています。Djangoは公式ドキュメントの内容が充実しています。
Django Girls
アメリカで女性向けの講習に使われていたテキストの、日本語版が掲載されているサイトです。PythonとDjango、GitやGitHubなどについて、非常に丁寧で分かりやすい言葉で説明されています。
書籍
Djangoのツボとコツがゼッタイにわかる本[第2版]
著者:大橋 亮太、古田 薫
出版:秀和システム
Djangoに興味があるながらも何から始めればよいかわからない人、あるいは過去に習得が難しかった人に向けた初心者向けの書籍です。環境設定からアプリ公開まで、簡易なアプリケーションを作りながら学べる一冊となっています。
実践Django Pythonによる本格Webアプリケーション開発
実践Django Pythonによる本格Webアプリケーション開発
著者:芝田 将
出版社:翔泳社
「業務で必ず役に立つ」と銘打った実践的な解説書です。Webアプリケーション開発に最低限必要な内容だけでなく、データベースのチューニングに関わる事項やセキュリティ対策など、高度かつ重要なトピックも扱っています。
まとめ
Djangoについて、基本から学習のヒントとなることまでをご紹介しました。DjangoはPythonのフレームワークの中では比較的著名な部類に入りますが、機能をすべて把握するには時間がかかりがちです。Djangoは大規模プロジェクト向けのフレームワークと認識し、これから開発するサイト・サービスにDjangoが適しているかどうか、見極めることが肝要です。
監修者プロフィール
永井 琢也
株式会社 Macbee Planet 入社後、データ解析プラットフォーム「ハニカム」の開発や、リバースETLツール「DATAHIVE」の新規開発に関わる。同社開発部門のプリンシプルでもある「Impact-driven(技術によって事業成長にインパクトをもたらそう)」をモットーに、技術選定から設計・開発まで幅広くこなす。
【株式会社 Macbee Planet HP (https://macbee-planet.com/)】
【永井 琢也 wantedlyプロフィール (https://www.wantedly.com/id/takuya_nagai_s )】