- Djangoとは
- DjangoとほかのPythonフレームワークとの違い
- Djangoでできること
- Djangoが持つ機能一覧
- Djangoのメリット
- Djangoのデメリット
- Djangoに関するよくある質問
- まとめ
Djangoとは
Djangoとは、PythonのWeb開発用フレームワークです。2003年頃に新聞のWebメディア構築・保守運用を担当するチームによって開発されました。その後いくつかの改良を経て、2005年7月にオープンソース化され、Web開発用フレームワークの基礎が出来上がります。
Djangoの最初の正式バージョン(1.0)を公開したのは2008年9月で、その後はバージョンアップを重ねながら発展を続けています。Djangoには「複数のデータベースを活用した複雑でWebサイト・アプリケーション開発を容易にする」という目的があり、比較的大規模な開発に向いているフレームワークです。PythonのWeb開発用フレームワークとしては非常に汎用性が高く、活発なコミュニティを持つことでも知られています。
Djangoを使うと簡単なWebアプリだと数分で作成でき、機能を拡張すれば複雑なシステムも作成可能です。無料のオープンソースで公開されているため、誰でも利用できます。
Djangoの特徴
Djangoが持つ特徴としては以下5つが挙げられます。
管理画面が自動生成される
Djangoは、機能の作成・読み込み・更新などを行う管理画面が自動で生成されます。一般的なフレームワークでは管理画面を作成する機能は持っていても、自動生成できるものは限られています。
Djangoでは、管理者を作成したあとに「localhost:8080/admin/」にアクセスすることで「Django管理サイト」にログインできるようになります。また、管理画面からはデータベースの閲覧・データ投入・検証作業などを行うことも可能です。さらに自動生成された管理画面はカスタマイズも可能で、開発作業の効率化にも役立ちます。
汎用性が高い
Djangoは、いわゆる「フルスタックフレームワーク」です。Webサイト・アプリケーションの開発・保守運用に必要な機能をほぼ全て網羅しています。一般的なフレームワークに搭載されている機能(URLディスパッチャー、O/Rマッパー、テンプレートエンジン)はもちろんのこと、豊富な便利機能を含むのがDjangoの強みです。また、機能追加やコンポーネントの再利用性の面でも優れています。
セキュリティが高い
DjangoはWebサイト・アプリケーションに対するサイバー攻撃(クロスサイトスクリプティングやSQLインジェクション)に対応するため、セキュリティ強度についても考慮されています。
Pythonの豊富なライブラリを流用可能
Djangoでは、Pythonがもつ機械学習・データ解析用のライブラリを流用することができます。
関連記事:Pythonとは?できること・市場価値について詳しく解説!
Djangoを使用しているサイト
Djangoを使用しているサイト例を以下にまとめました。
-
・YouTube・Instagram
・Spotify
・DropBox
・Mozilla など
海外から発信された有名サイトにはDjangoが活用されているケースは多いです。
DjangoとほかのPythonフレームワークとの違い
PythonのWeb開発用フレームワークとしては「Flask」「Bottle」「Tornado」などが有名です。Djangoとこれら主要フレームワークとの違いをまとめました。各フレームワークの特徴とあわせて見ていきましょう。
Flaskは中小規模の開発向き
Flaskは非常に軽量でシンプルなフレームワークで、どちらかといえば中小規模の開発に向いています。豊富な機能を持つフルスタック型のDjangoは大規模開発に向いているため、この点で違いがあります。
Bottlekは軽量かつシンプルで学習向き
Bottleは、Python用Webフレームワークの中では最も軽量かつシンプルです。しかし、それだけに機能面はやや貧弱といわざるを得ません。商業ベースの開発よりは、エンジニア個人のキャッチアップや学習に向いたフレームワークといえるでしょう。一方のDjangoは、実際の開発作業にフォーカスしたつくりが特徴です。
Tornadokは高速なWebサーバー機能が魅力
Tornadoは、フレームワークの機能に加えてWebサーバーとしても活用されています。特に静的コンテンツの配信は非常に高速です。Djangoとは用途の面で若干の違いがあるといえます。
関連記事:Pythonのフレームワークとは?種類や分野別のおすすめを紹介
Djangoでできること
Djangoと他フレームワークとの違いを押さえた上で、Djangoでできることを紹介します。まずは大枠となる機能をまとめました。
Webアプリケーションの作成
Djamgoでできるのは、まずWebアプリケーションの開発が挙げられるでしょう。Djangoを活用しているサイト例でもご紹介したように、ニュースサイト・コンテンツ管理システム・動画サイトなどさまざまなWebアプリを作成できます。
複雑なコードに対応できる特徴のあるDjangoですが、比較的少ない記述量でアプリ開発が可能です。初心者向けのシンプルなWebアプリから大規模な開発まで網羅できるのが特徴の一つです。
WebAPIの作成
利用例のひとつにWebAPIの作成も挙げられます。「Django REST framework」というライブラリが含まれているため、RESTの設計原則を満たしたRESTful APIならスピーディに作成できます。分散システムにおいて複数のソフトウェアを連携できるため、より高度な開発も可能です。
関連記事:Pythonエンジニアが担当する仕事内容やその開発分野とは
管理(admin)サイト構築
前述したように、Djangoでは、管理者ユーザーを作成すると管理画面が自動的に生成されます。この管理画面は「Django管理サイト(django.contrib.admin)」と呼ばれ、データベース管理機能やユーザーアカウントの権限管理機能などを有しています。また、独自にカスタマイズした管理画面も作成可能です。
サイトマップページの作成
Djangoはサイトマップも簡単に作成できます。サイトマップを作成すると、SEO対策に繋がり、検索順位の向上に役立ちます。また、ユーザーの回遊性が上がりやすくなったり、サイト構造が明確になったりするなどの利点もあるため、大規模サイトや商用サイトに必要不可欠です。
サイトマップを作成する際には多くのページのテンプレやリンクを洗い出す必要があります。Djangoを用いたWebサイトは1つの言語で簡潔するため簡単に作成可能です。
Djangoが持つ機能一覧
前述の通り、Djangoはフルスタックフレームワークですので、提供している機能が豊富です。ここからは、Djangoが持つ機能を14つ紹介します。紹介するのは以下の14つです。
-
・ユーザー認証
・RSSフィード
・URLディスパッチャ
・O/Rマッパー
・テンプレートエンジン
・キャッシュシステム
・ロギング機能
・メール送信
・ページネーション(ページ分割)
・データの検証
・サイトマップ
・セキュリティ機能
・開発者用機能
それぞれについて詳しく見ていきましょう。
ユーザー認証
Djangoには標準でユーザー認証機能(django.contrib.auth)が搭載されています。さらに、追加パッケージ(django-allauth)を導入すれば、パスワード再設定やソーシャルログイン機能を利用することもできます。
RSSフィード
Djangoに付属している機能を活用し、簡単にRSSフィードを作成することができます。手順としては、Feedクラス作成・ファイル(feed.py)の配置とクラス定義・URLconfの編集という3ステップで完了します。
URLディスパッチャ
URLディスパッチャとは、URLに応じてページの表示形式を決定する制御機能です。Djangoには標準でURLディスパッチャーが搭載されており、URLconf(urls.py)に指定された内容に基づいて表示を制御します。
O/Rマッパー
O/Rマッパーは、オブジェクト指向プログラミングにおいて、オブジェクトとRDB間のデータ形式をマッピング(相互互換)する機能です。DjnagoにはO/Rマッパーが標準搭載されているため、O/Rマッパー経由でRDBにアクセスすることができます。
テンプレートエンジン
テンプレートエンジンとは、ひな形(テンプレート)とひな形を利用したデータ加工・出力工程を、ひとつにまとめたソフトウェアです。テンプレートエンジンを活用することで、プログラムとHTML部分を分離させられるため、Webサイトやアプリケーションの保守性が向上します。Djangoには標準のテンプレートエンジン(DjangoTemplates)が用意されているほか、外部テンプレートエンジンも追加することができます。
キャッシュシステム
Djangoにはキャッシステムが付属しており、動的なページを保存しリクエストごとに計算する必要がないようにできます。キャッシュのバックエンドはmemcachedlやdatabase、filesystem、local-memoryなどから選ぶことができ、キャッシュシステムを構築するレベルに合わせて作成できます。また機能を拡張すれば他バックエンドも選択可能です。
ロギング機能
Djangoのカスタムコマンドを利用しバッチ処理などをする場合、処理結果がログで残ると便利です。Djangoソース内にはロギング機能がデフォルトで設定されており、設定ファイル(setting.py)でログ出力のフォーマット・ハンドラ設定が可能です。
また出力されるログが見づらい場合、ログの重要度を変更したい場合や日付、時刻などを付与したいケースがあれば自分でカスタマイズできます。
メール送信
TwitterなどのSNSでメッセージの発信を行う場面は増えつつありますが、メールでのコミュニケーションは今でも見られます。Webサイト構築においてユーザーにメールを送信したい場合は「Email Multi Alternatives」を使います。
テキスト・HTML両方を含んだメッセージが作成できるため、あらゆる発信シーンで役に立つでしょう。
ページネーション(ページ分割)
ページネーション、ページングとは大量のデータ一覧を表示する場合に複数ページに分けて表示することをいいます。Webアプリケーションでユーザー一覧を表示する場合、規模によってはユーザー数が数百人にのぼることもあるでしょう。ブログの記事一覧でも1ページにすべての記事を収めるのではなく、数十件単位で表示させていることがほとんどです。この場合ページ分割を行い、使い勝手と見やすさを向上させます。
ページネーションをDjangoで行うためにはサポート機能がデフォルトで実装されているため、view.pyにあるDjango.core.paginatorモジュール内「Paginator」「EmptyPage」「PageNotAnInteger」を使います。
データの検証
入力フォームなどを実装した場合、ユーザーから入力されたデータが求めているものと一致しているかどうかを検証したいシーンは多いです。例えばメールアドレスを記入するフォームにアドレス以外の文字列が含まれている・利用できないドメインが含まれているなどの場合に、データの検証を行ってユーザーに警告文を表示します。そのほか入力されたデータの中から求めている結果のみを抽出するといったものを「バリデーション」といい、Djangoではバリデーション機能を持たせることもできます。
データの検証を行うには「forms.py」「urls.py」「views.py」、formを表示するhtmlファイルの4つを編集します。
サイトマップ
サイトマップとは、Webサイトがどんなページなのかを検索エンジンに知らせるファイルです。WebサイトをGoogleなどの検索エンジンに登録する作業では、サイトマップ作成は欠かせません。
サイトマップは作成ツールやWebサービスも豊富ですが、Djangoでは自動生成する機能が標準で組み込まれています。
セキュリティ機能
Djangoは高いセキュリティ機能を有しています。ここからは、具体的にどのようなセキュリティ機能が実装されているか4つの機能を紹介します。紹介するのは以下の4機能です。
・クロスサイトスクリプティング (XSS) 保護
・クロスサイト リクエスト フォージェリ (CSRF) 保護
・SQLインジェクション保護
・クリックジャッキング保護
それぞれについて詳しく見ていきましょう。
クロスサイトスクリプティング (XSS) 保護
クロスサイトスクリプティングとは、標的となるWebサイト上でリンク誘導などを行い、脆弱性のあるサイトでスクリプトを実行させ、マルウェア感染や個人情報を抜き取るといった攻撃を指します。
Webサイト作成者はXSSに対して有効な対策が必要ですが、Djangoにはデフォルトでセキュリティ対策が含まれています。ただしDjangoのセキュリティにはXSSが保護されない場合もあるため、実装する場合はXSS保護の理解を深めておく必要があります。
クロスサイト リクエスト フォージェリ (CSRF) 保護
クロスサイトリクエストフォージェリとは、特定のサイトに接続すると意図しないアクションを強制的に取らされる被害をいいます。例えば被害者のアカウントでなりすまし投稿が行われたり、パスワード変更されたりアカウント削除されたりといった行為が一般的です。いわゆる「乗っ取り行為」を防ぐため、Web開発においてCSRF対策は重要です。
Djangoでは対策としてCSRFクッキーをランダムに生成し、他サイトがアクセスできないようにするなどがテンプレートエンジンに標準搭載されています。
SQLインジェクション保護
SQLインジェクションとはサイト上の脆弱性を指します。メジャーな脆弱性のひとつで、外部からSQLを送信しWebアプリのデータベースを不正に操作し攻撃する行為をいいます。インジェクションとは「注入」の意味を持ち、不正なSQLを検索ボックスや入力ホームなどから注入されないために対策が必要です。
DjangoではORM(Object-relational mapper)によって対策されています。プログラム内のシステム間では非互換データによってやり取りが行われ、オブジェクトを操作することでデータ管理が可能です。するとクエリのパラメータ化が行われ、データベースドライバーによってエスケープすることでSQLインジェクションを保護できます。
クリックジャッキング保護
Webサイト上に隠蔽・偽装したリンクやボタンなどを設置し、サイト訪問者や利用者を騙してクリックさせるサイバー攻撃をクリックジャッキングと呼びます。最近ではメールアドレスにクリックジャッキングを施したページURLを添付したり、SNSのダイレクトメッセージなどでもリンクに誘導するなどの手口がよく見られます。
Djangoではこうした攻撃に対する防御を簡単に使える形で対策が可能です。
開発者用機能
Djangoは大規模Webアプリの開発を想定して作成されたフレームワークのため、開発者を支援する機能も提供しています。ここからは開発者用の機能を3つ紹介します。紹介する機能は以下の3つです。
-
・設定機能・テストの作成と実行機能
・アプリケーションの展開
それぞれについて詳しく見ていきましょう。
設定機能
Djangoの基本的なファイルである「setting.py」内でDjangoフレームワークの動作設定が行えます。このフレームワークはデータベースの変更などもでき、フレームワーク側のスクリプトを直接変更しなくてもsettings.pyで一括設定できます。
ただし、スタートプロジェクト実行直後のsettings.pyには必要最低限の項目しか設定されていません。settings.pyに設定が記述されていない項目も多数あるため、必要項目を搭載する必要があります。
テストの作成と実行機能
Django内の機能に自動テストがあります。これはコードの動作チェックを行うルーチンで、小さな機能からソフトウェア全体の動作に対して行われるものまで、さまざまなレベルで実行できます。
ほかのフレームワークにもテストと実行機能が搭載されていますが、Djangoがほかと違うのはテスト作業がシステムによって実行される点です。一度テストセットを作成すると、アプリに変更を加えるたびにコードの動作チェックが入ります。手動でテストする時間を省き、開発に時間を多く使えるでしょう。
アプリケーションの展開
別途展開ソフトを使用することなく、Django内でアプリケーションを展開できます。繰り返しになりますがさまざまなWebアプリケーションの作成が可能なため、拡張機能を使い機能を展開することで使用用途の幅を広げられます。
Djangoのメリット
これまでも述べたように、Djangoには、開発に必要なツール、機能を揃える手間が必要ないというメリットがあります。大規模なWebサイト・アプリケーション開発であっても、Djangoのみを準備すれば大抵の作業はすぐに開始できるでしょう。
そのほかにも、以下のようなメリットがあります。
フロントエンドからバックエンドまで幅広い機能を網羅
Djangoの特徴として挙げられるのは、Webアプリケーションの幅広い機能を開発できる点です。よく使われる機能はあらかじめパッケージに含まれているため、手軽に活用できるのもメリットの一つでしょう。
開発にはコストがかかりますが、Djangoを使うことである程度削減が見込めます。低コストで高性能なアプリを開発できる、さまざまな機能を網羅できることがDjangoを習得するメリットです。
Python経験者であれば学習コストが非常に小さい
Djangoの設定ファイルやコマンドは、全てPythonで記述されています。そのため、Pythonの経験者であれば使い方を理解するまでのコストが非常に小さいです。
デメリットでもご紹介しますが、Djangoを習得したい方にとって「難しそう」というのは最初に感じる懸念点でしょう。その部分をカバーできるメリットには着目したいものです。
保守・運用が楽になる
Djangoは「Mazzanine」などのCMSツールを利用して、複数のサイトを共存・管理することができます。また、マルチテナント機能(django-tenants)を使い、単一のシステムの中に複数の企業のサービスを同居させることも可能です。こうした機能を使うことで一元化が進み、保守・運用コストの削減が期待できます。
MTVモデルでアプリ開発ができる
Djangoは、MTVモデルと呼ばれる手法でアプリを開発できます。
MTVモデルとは、Model、Template、Viewの頭文字をとって名付けられた手法で、処理ごとにファイルを分けて記述する手法です。Ruby on railsのMVCモデルと同様の考え方です。それぞれ以下のような機能を記述できます。
Model
Modelはデータベースの構造を定義するファイルです。Model.pyで記述されたデータの形状やデータ間の関係に従ってデータを処理します。たとえば、ログイン機能を用いたWebアプリを開発する場合、ユーザーID、ログインパスワードを格納するためのデータ構造を記述するファイルです。
Template
Templatesというフォルダに格納されたHTMLファイルです。HTMLファイルという点から分かる通り、ページに表示されるデザインを指定します。Templates内のHTMLをブラウザが読み込むことで、Webアプリが表示されます。
View
Model.pyとやりとりして得た情報をtemplateに反映するファイルです。たとえば、ログインしたユーザー名をmodel.pyから取得し、templateの決められた箇所にユーザー名を埋め込む処理を行います。
迅速なプロトタイプ開発が可能
Djangoは「Batteries included(バッテリー同梱)」の哲学を採用しています。Batteries includedとは、Webアプリ構築後すぐに起動できるものを指している単語です。
Djangoはプロジェクトを作成するとすでにWebアプリが作成されており、既存のWebアプリを変更していく形式で構築します。つまり、Batteries includedに従ってプロジェクト立ち上げ後すぐにWebアプリが作成されます。
メンテナンスが簡単
DjangoはPythonの文法で記述されているため、可読性が高く修正箇所が分かりやすいです。また、前述のMTVモデルを採用しているため、構造がはっきりしています。
そのため、メンテナンスが簡単なだけでなく、新しい開発者が既存プロジェクトに参加しやすいなどのメリットがあります。
セキュリティ機能が多い
Djangoでは前述したXSSやCSRF、SQLインジェクションなどの一般的なWeb攻撃から守るセキュリティ機能が標準搭載されています。そのため、セキュリティに詳しくない方でも多くの対策が実装できるだけでなく、セキュリティ対策に時間を割く必要がありません。
情報が多く学びやすい
Djangoは海外のコミュニティが活発で、英語圏の情報にアクセスできれば豊富なノウハウを得られます。操作や開発でつまづいたとしても、解決できる手段が多いのはメリットの一つといえるでしょう。
Djangoのデメリット
Djangoはメリットの多いフレームワークですが、当然デメリットも存在します。Djangoで開発を検討している方はデメリットを把握しておきましょう。紹介するデメリットは以下の3点です。
-
・多機能な分学習コストがかかる・日本語の情報はやや少なめ
・処理速度が若干遅い
それぞれについて詳しく見ていきましょう。
多機能な分学習コストがかかる
ほかのフレームワークより機能が多いDjangoは、その分学習コストも相当かかります。各機能の使い方や概念を学習するには、Python未経験者だと時間がかかる点に注意しなくてはなりません。
小規模なアプリケーションを作成するのであれば、学習コストが比較的少ないFlaskやBottleなどのフレームワークを使うエンジニアも多いです。とはいえDjangoを習得するメリットも多いため、あらかじめ自分が何につまづくかを理解しながら学習を進めていくとよいでしょう。
Pythonから先に触れてみて、Djangの習得を始める方法もあります。
日本語の情報はやや少なめ
Djangoの海外コミュニティが活発であるのに比べると、日本語の情報はやや少ないといえるでしょう。とはいえDjangoに翻訳フレームワークを使えば翻訳機能を実装することができますし、翻訳された解説記事・動画や本もあります。
ある程度の英文に慣れている方なら日本語情報の少なさは気にならないかもしれません。
処理速度が若干遅い
DjangoはWebフレームワークの中で処理足が若干遅いとされています。理由は以下の2点です。
-
・Pythonはほかのコンパイル言語(C++やJava)と比較して処理が遅い・Batteries included(バッテリー同梱)に準じてアプリが開発されるため、場合によっては不要な機能が実装されてしまう
特に1点目のPythonの処理が他言語と比較して遅い点がDjangoの処理速度に影響しています。
Djangoに関するよくある質問
Djangoに関するFAQで、本記事でお伝えした情報をまとめます。
Q1. Djangoでは何ができますか?
DjangoはWebアプリケーション開発フレームワークです。主にできるのはWebアプリケーションを作成やWebAPIを作成の2点です。フルスタックであるために高機能で、幅広い作成・開発ができます。
Q2. Djangoの良いところ(メリット)を教えてください。
Webアプリケーション開発に必要なツールや機材、保守・運営に必要なシステムほぼ全てを網羅しているため、Djangoを使いこなせると「エンジニアとしてできることの幅が広がる」のが最大のメリットです。
Q3. Djangoに弱点(デメリット)はありますか?
フルスタックであるため習得に時間がかかり、特にPython未経験者だと相当な時間を学習に費やさなくてはならないことです。
また処理速度が若干遅く、多機能な分コードベースも大きいです。他フレームワークと比べると処理・応答が遅くなるので、ネックに感じるかもしれません。
Q4. Djangoの標準機能は何ですか?
管理画面やユーザー認証、セッション管理、静的ファイルの公開などが主なDjangoの標準機能です。
Q5. Djangoの入門としておすすめの本はありますか?
「Python Django3超入門 掌田津耶乃著」「Djangoのツボとコツがゼッタイにわかる本 大橋 亮太著」などがおすすめです。同じ著者でも発行年数が異なっていたり、古いノウハウが含まれたりする場合もあります。本で学ぶ場合は最新の情報かどうかに注意が必要です。
まとめ
DjangoはPythonの主要なフレームワークの一つであり、主にWebの分野で活用されています。
Pythonというと機械学習やデータ解析などに用いる印象を持つ方が多いと思われますが、Djangoを使うことでWeb関連の開発効率を上げることが可能です。Djangoでできることを知った上で、自分にとって習得メリットが多いなら学習を始めてみてもよいかもしれません。
ITエンジニアの転職ならレバテックキャリア
レバテックキャリアはIT・Web業界のエンジニア職を専門とする転職エージェントです。最新の技術情報や業界動向に精通しており、現状は転職のご意思がない場合でも、ご相談いただければ客観的な市場価値や市場動向をお伝えし、あなたの「選択肢」を広げるお手伝いをいたします。
「将来に向けた漠然とした不安がある」「特定のエンジニア職に興味がある」など、ご自身のキャリアに何らかの悩みを抱えている方は、ぜひ無料のオンライン個別相談会にお申し込みください。業界知識が豊富なキャリアアドバイザーが、一対一でさまざまなご質問に対応させていただきます。
「個別相談会」に申し込む
転職支援サービスに申し込む
※転職活動を強制することはございません。
レバテックキャリアのサービスについて