このページでは、Python における「Django」について解説していきます。
まず、Django がどういったソフトウェアであるかについて解説し、その後 Django が提供する機能や Django を利用するメリットやデメリット等について説明していきます。
Django がウェブアプリケーションフレームワークであることは知っていても、フレームワークがどういったものかを理解していない方も多いのではないかと思います。このページでは、フレームワークがどういうものであるのかについてもスッキリ理解していただけるよう、詳しく説明していきます!
Contents
Django とは
では、早速 Django がどういったものであるのか?について説明していきたいと思います。
Django とは
冒頭でも少し触れましたが、Django とは Python におけるウェブアプリケーションフレームワークになります(以降、ウェブアプリケーションをウェブアプリと略します)。
スポンサーリンク
ウェブアプリフレームワークとは
ウェブアプリフレームワークはウェブアプリの標準的・共通的な構造を実装するための枠組みであり、ウェブアプリの標準的・共通的な構造を実装するために必要となる機能を提供します。このフレームワークを利用することで、ウェブアプリの開発効率を向上させることができます。
![]()
ウェブアプリの共通的機能
世界中には様々なウェブアプリが存在します。例えば Twitter や Facebook、Instagram などは有名ですね!皆さんも使用したことがあるのではないでしょうか?
これらのウェブアプリは全然違うように見えて、実はアプリのソフトウェア構造や内部的な機能はかなり似ています。
まず、これらのウェブアプリは全てログインをして使用するアプリになります。このログインを行うためには認証機能が必要です。つまり、これらのアプリは全て認証機能を備えています。
![]()
例えば Twitter を利用するためにはログインをする必要があり、ログインすることで、ツイートしたり、あなたがフォローしているユーザーのツイート一覧を表示したりすることが可能になります。同様に、Facebook や Instagram でもログイン機能を備えており、ログインすることでウェブアプリを利用することができるようになっています。
また、これらのウェブアプリは全てデータベース操作機能を備えています。このデータベースには、ユーザーの情報や投稿されたツイートやコメント、画像などが管理されており、このデータベースを操作することで、それらのデータをウェブアプリから保存したり検索(取得)したりすることができるようになっています。
![]()
例えば Twitter であれば、ユーザー登録を行うことでユーザーの情報がデータベースに保存されますし、ツイートした情報や「いいね」をした情報、さらにはフォロワーなどの情報もデータベースに保存されています。
そして、あなたが Twitter を利用する際には、データベースからツイートした情報やフォロワーなどの情報が検索されて取得され、その情報を利用してウェブアプリの画面が表示されることになります。
![]()
もちろん、扱うデータは異なるものの、データベースを利用すると言う意味では Facebook や Instagram などでも同様です。
共通的構造をウェブアプリフレームワークで実現
ここまで説明してきたように、全然違うように見えても、実はウェブアプリを実現する上で必要な機能やウェブアプリのソフトウェア的な構造は似通っています。
![]()
そして、これらの似通った共通的な機能・構造を提供するのがウェブアプリフレームワークとなります。
![]()
前述の通り、Django はこのウェブアプリフレームワークの1つになります。Django フレームワークのイメージを表せば下の図のようになり、青色部分にウェブアプリにおける共通的な機能が存在するイメージとなります。
![]()
Django フレームワークとプロジェクト
ここまで説明してきたように、Django を利用すれば、Django フレームワークによりウェブアプリで共通的な機能が提供されることになります。なので、この部分に関しては、開発者が設定等を行う必要はありますが、開発すること自体は不要となります。Django をインストールするだけで既に開発済みの機能が利用可能です。
プロジェクトの役割
Django でウェブアプリを開発する場合、開発者に必要となるのは “プロジェクト” の開発となります。フレームワークが共通部分であるのとは逆に、プロジェクトはウェブアプリ特有の機能を実現する部分となります。そして、このプロジェクトを作り込んでいくことで他のウェブアプリとの差別化を図り、世の中に1つだけのアプリに仕上げていくことになります。
Django フレームワークとプロジェクトは、ファイルとしては別の場所に存在するのですが、動作的に考えた場合は下の図のようにフレームワークの中にプロジェクトが存在するような関係と考えることができます。つまり、Django で開発する場合、「ウェブアプリ = Django フレームワーク + プロジェクト」の関係が成立すると考えて良いです。
![]()
“Django フレームワークが期待する” 構造のプロジェクトを開発する
このプロジェクトを開発する時に重要となるポイントが、Django フレームワークが期待する構造のプロジェクトを開発する必要があるという点になります。もう少し違う言い方をすれば、Django のルールに従ってプロジェクトを開発する必要があります。
前述の通り Django フレームワークは機能(ウェブアプリにおいて共通的な機能)を提供するため、それらの機能をプロジェクト内のファイルから利用することができます。その一方で、プロジェクト内のファイルは Django フレームワークから読み込まれたり利用されたりもします(プロジェクトのファイル内で定義した関数やメソッドが実行される)。
![]()
ただし、何も考えずに好き勝手プロジェクトを開発してしまうと Django フレームワークからプロジェクトのファイルを読み込んだり利用したりする時にエラー等が発生する可能性があります。これを防ぐためには、プロジェクト内には Django フレームワークが期待するファイルや関数(クラス)を用意しておく必要があります。
例えば、Django フレームワークから実行される関数は、Django フレームワークの期待する型の引数を受け取り、Django フレームワークの期待する型の返却値を返却するように定義しておく必要があります。
具体的に言うと、Django フレームワークは、後述で説明する View で定義された関数を実行するときに HttpRequest のサブクラス のインスタンスを引数で指定するようになっています。なので、View で定義する、Django フレームワークから実行される関数は、HttpRequest のサブクラス のインスタンスを引数で受け取れるようにしておく必要があります。また、この View の関数から返却されたデータを、Django フレームワークは HttpResponse のサブクラス のインスタンスとして扱うようになっています。なので、その View の関数は、HttpResponse のサブクラス のインスタンスを返却する必要があります。
![]()
もし、その View の関数が異なる型のデータを返却したとしても、Django フレームワークは返却されたデータが HttpResponse のサブクラス のインスタンスであることを前提に既に作られているため例外等が発生することになります。
つまり、Django フレームワークは第三者によって既に開発済みであるため、それに合わせてプロジェクトを開発する必要があります。なので、いくら Python に詳しくても、それだけでは Django を利用したウェブアプリの開発には不十分で、Django を利用したウェブアプリを開発するためには Django フレームワークの理解も必要となります。
こういう意味で、ライブラリと Django フレームワークは異なるものになります。ライブラリの場合、自身で開発したスクリプトは基本的にライブラリを利用するのみになります(ライブラリからコールバック関数が呼ばれたりすることもありますが)。なので、基本的にはライブラリの使い方のみを意識して開発すれば良かったことになります。
![]()
ですが、Django フレームワークを利用する場合は、自身が開発したスクリプトが Django フレームワークから利用されることになります。そのため、Django フレームワークからの使われ方を意識し、Django フレームワークの期待するファイルやルールに従って作成する必要があります。
![]()
上記のような理由から、Django はライブラリではなく枠組みという意味のフレームワークという位置付けものになります。そして、Django の枠組みにハマるように、Django フレームワークのことを理解してプロジェクトを開発していく必要があります
逆に言えば、Django を利用すれば、プロジェクトとして必要なファイルや関数のみを Django フレームワークの期待する形に合わせて用意するだけでウェブアプリが完成することになります。これらを用意しておけば、あとは Django フレームワークがそれらを上手く利用してウェブアプリとして動作するようになっています。ウェブアプリ全体の制御等を考慮せず、プロジェクトとして必要なファイルのみを単に作成すれば良いため、簡単にウェブアプリを開発することが出来ることになります。なので、最初は Django フレームワークを理解することが大変だとは思いますが、Django フレームワークに慣れることさえできれば、ウェブアプリの開発効率的を向上させることができます。
ちょっと説明が曖昧になってしまいましたが、まずはプロジェクトは Django フレームワークの期待する構造で開発することを覚えておきましょう!
具体的なプロジェクトの作り方に関しては、本サイトの Django 入門 のカテゴリの記事で詳しく説明していきます!
MTV モデル
次は、プロジェクト内の構成について説明していきたいと思います。このプロジェクト内で主に開発していく主な対象は、Model と Template と View の3つとなります。
Django の特徴の1つに MTV モデルであることが挙げられます。この MTV が Django で開発するウェブアプリの標準的・共通的な構造となります。この MTV とは、Model、Template、View の頭文字であり、これらを開発していくことで、そのウェブアプリ特有の機能や動作を実現していくことになります(プロジェクト内では他にもいろんなファイルを作成していくことになりますが、ウェブアプリの基本部分はこれらの3つによって構成されることになります)。
Model と Template と View
Model と Template と View については別途解説記事を設けていますので、詳細に関しては下記ページをご参照ください。もし可能であれば、この Django 入門 のカテゴリの記事を順番通り読んでいっていただくのが一番理解しやすいと思います。
とりあえず、これらの Model と Template と View それぞれの役割を大雑把に&簡単に表せば下記のようになります。まずは、Django のプロジェクトでは主に MTV モデルのものであること、さらには下記の役割があることを覚えておいてください。
Model:- データベースで扱うデータの定義とデータベースの操作を行う
Template:- レスポンスデータの HTML の雛形を定義する
View:- リクエストを受け取り、
ModelとTemplateを利用してリクエストに応じた処理の実行やレスポンスデータの作成を行う
- リクエストを受け取り、
MTV モデルの基本的動作
次は、これらの MTV の関連性について、ウェブアプリの動作を踏まえながら簡単に説明していきたいと思います。
まず、ウェブアプリとは、一言で言ってしまえば「リクエストを受け取り、そのリクエストに応じた機能を実行し、その機能から得られた結果に応じたレスポンスを返却するアプリ」となります。つまり、リクエストとはウェブアプリに備えられた機能を利用するための要求です。このリクエストとは、より具体的には「HTTP リクエスト」であり、レスポンスとは「HTTP レスポンス」となります。
![]()
そして、Django で開発したウェブアプリの場合、このリクエストは Django フレームワークが受け取り、そのリクエストは Django フレームワークを経由して View に渡されることになります。そして、View がリクエストに応じた機能を実行し、その機能によって得られた結果に応じたレスポンスを Django フレームワークに返却します。このレスポンスは、Django フレームワークを経由してクライアントに返却されることになります。ウェブアプリの場合、ここで返却されるレスポンスは HTML となることが多いです。
![]()
つまり、MTV において、View がウェブアプリとして必要な役割のほとんどを担っていることになります。ただ、View だけで全ての役割果たすのは大変なので、ここで Model や Template が利用されることになります。
![]()
Template は、レスポンスとなる HTML の “テンプレートファイル (雛形)” を提供します。このテンプレートファイルとは、簡単なプログラムが記述可能な HTML です。例えば、テンプレートファイルでは変数を扱うことができ、このテンプレートファイルの変数部分にデータを埋め込むことで HTML が完成することになります。そして、この埋め込むデータをリクエストに応じて動的に変化させることで、様々な HTML を生成することが可能となります。
![]()
また、様々な構造のページの表示(画面表示)が実現できるよう、Template からは複数のテンプレートファイルが用意されていることが多いです。
![]()
Model はデータベースの操作を行います。より具体的には、データベースからのレコードの取得であったり、データベースへのレコードの記録等を行います。データベースの操作自体は Model からの指示によって Django フレームワーク側で行われることになるので、データベースの操作部分を開発者が実装する必要はありません。ただ、ウェブアプリによって扱うデータは異なるため、どんなデータをデータベースで管理する必要があるかを検討し、それに合わせたテーブルの定義等を Model で行っておく必要はあります。
![]()
そして、これらの Model と Template を利用してリクエストに応じた機能を実現するのが View となります。要は、Django においては機能を実装するのは View です。そして、この機能を実現するために Model と Template を利用します。
具体的には、View は Django フレームワークから受け取ったリクエストの内容に応じたデータベースの操作を Model に依頼します。さらに、View はリクエストの内容応じて Template から提供される複数の雛形から利用する雛形を選択します。そして、Model から得られた結果を、その雛形に埋め込んで HTML を生成します。最後に、それを Django フレームワークに返却することになります。
![]()
こんな感じで、View はリクエストの内容に応じて適切に Model と Template を利用して機能を実現することが必要となります。ウェブアプリには複数の機能が備えられるはずなので、複数の機能を View に実装する必要があります。また、Model は、それらの機能を実現するために必要なテーブルを定義する必要があります。そして、Template は、それらの機能を実現するために必要なテンプレートファイルを提供できるように開発していく必要があります。
Django で開発するウェブアプリでは上記のような役割を持つ Model と Template と View から構成されることになります。これは、基本的には全ウェブアプリで共通となります。もちろんデータベースを利用しないような場合は Model が不要であったりもするのですが、基本的には全ウェブアプリで共通と考えて良いです。
![]()
ツイート一覧履歴を表示するときの MTV の動作
次はもう少し具体的に、Django で Twitter における、特定のユーザーのツイート履歴の一覧を表示する機能を開発することを考えたいと思います。
![]()
こういったデータの表示を行う機能を実現するためには、そのデータをデータベースのテーブルに記録していく必要があります。なので、データベースのテーブルには、少なくともユーザー名とツイートを記録していくフィールドが必要となります。そのため、Model では、下図のようなユーザー名とツイートをフィールドに持つテーブルを定義しておく必要があります。
![]()
また、こういったデータの一覧を表示するためには、複数のデータのリストを表示するような構造のページを表示する必要があります。そのため、Template では、下図のようなテンプレートファイルを用意しておく必要があります。この XXX 部分には任意の “ユーザー名” が、YYY 部分には任意の “ツイート” が埋め込み可能となっています。
![]()
このように Model でテーブルの定義を行い、さらに Template でテンプレートファイルの用意を行っておけば、View は Django フレームワークから「Hanako のツイート履歴の一覧を表示したい」というリクエストを受け取った時には次のように処理を行えば良いことになります。
まず、View は Model に対し、先ほど定義したテーブルからの「ユーザー名が Hanako と一致する全レコードの取得」を依頼します。
![]()
続いて、Template で先ほど用意したテンプレートファイルを選択し、その XXX 部分に Hanako を、YYY 部分に取得したレコードのツイートフィールドを1つ1つ埋め込んでやれば、Hanako のツイート履歴の一覧を表示する HTML が出来上がることになります。
![]()
あとは、View が Django フレームワークに対して出来上がった HTML を返却してやれば、Django フレームワーク経由でレスポンスが返却されることになります。
上記では、「Hanako のツイート履歴の一覧を表示したい」というリクエストを受け取った時の動作を説明しましたが、「Taro のツイート履歴の一覧を表示したい」というリクエストを受け取ったのであれば、Model に対して行う依頼を「ユーザー名が Taro と一致する全レコードの取得」に変更してやれば良いだけです。このように、特定のユーザーのツイート履歴の一覧を表示するような機能は、上記のように Model と Template と View を開発してやれば実現できることになります。
また「ツイートする機能」の実現も、これらの Model と Template と View それぞれの作りは異なるものの、Model と Template と View とが連携して動作することで実現可能です。
こんな感じで、Twitter の各機能は Model と Template と View によって実現可能です。そして、他のウェブアプリも同様で、Model と Template と View によって実現可能です。例えば、Instagram の場合、特定のユーザーが投降した画像の一覧を表示するのであれば、データベースにはユーザー名と画像を管理するためのテーブルが必要となりますが、それ以外に関しては Twitter のツイート履歴一覧の表示と同様の動作で機能を実現することが可能であることは、なんとなく想像がつくのではないかと思います。
MTV を作り込んでウェブアプリ特有の機能を実現
ここまで説明してきたように、Django で開発するウェブアプリでは Model・Template・View は共通的な構造となります。
ただ、ウェブアプリによって出来ることや表示内容は全然違いますね!
これは、Model・Template・View の3つの構造でウェブアプリが実現されていることは共通ではあるものの、Model・Template・View それぞれの作りがウェブアプリごとに異なるからです。
例えばウェブアプリに応じて扱うデータが違っていたりします。例えば Twitter の場合はツイートが扱われますが、クックパッドの場合はレシピが扱われていたります。この違いは Model の定義によって生じています。 Model はウェブアプリで扱うデータの定義を行います。この Model が違えば、ウェブアプリで扱うデータも異なることになります。
また、Twitter とクックパッドではページに表示される内容が大きく異なりますね!
この1つの要因は Template の違いになります。Template はページ表示時に使用される HTML の雛形部分であり、これが異なればページに表示される内容も異なることになります(もちろん扱うデータが異なる点も、ページに表示される内容が異なる要因にもなります)
このように、ウェブアプリの共通的な構造は Model・Template・View の3つから構成されるものの、ウェブアプリによって Model・Template・View の作りを変えることで他のウェブアプリとの差別化を行うことができます。
ですので、あなたが Django でウェブアプリを開発する際には、この MTV の構造を守りつつ、あなたが開発したいウェブアプリに合わせて Model・Template・View それぞれを作り込んでいくことになります。
![]()
補足しておくと、他のウェブアプリフレームワークには共通的な構造として MTV モデルではなく MVC モデルを採用しているものがあります。MVC モデルは Model・View・Controller の3つから構成されます。それぞれの意味合いも MTV モデルと異なるのですが、MTV モデルも MVC モデルも目的は同じで、その目的はウェブアプリの共通的な構造を定義することになります。
少し説明が長くなりましたが、まずは Django で開発するウェブアプリ(のプロジェクト)は MTV モデルとなっていることと、これらの役割のイメージを覚えておいていただければと思います。前述の通り、Model・Template・View の詳細については、Django 入門 のカテゴリにおける下記ページで解説します。
スポンサーリンク
Django が提供する機能
ここまで解説してきた通り、Django はウェブアプリフレームワークであり、ウェブアプリにおける共通的な機能・構造を提供します。Django における共通的な構造とは MTV モデルでしたね!
では、Django における共通的な機能とはどんなものになるでしょうか?
ここでは、Django から提供される機能の代表例を紹介していきたいと思います。
データベース操作
Django から提供される機能の代表例の1つはデータベース操作になります。
Django を利用することで、下記のようなデータベース操作をメソッドの実行により実現することができます。
- レコードの保存
- レコードの検索
- レコードの削除
これらに関しては、別に Django を利用しなくても SQL 文を書いてクエリを発行することで実現可能です。ですが、そのためには SQL 文の知識が必要になります。それに対し、Django を利用すればメソッドの実行でクエリを発行することができるため SQL 文を書く必要がなくなり、SQL 文のことを知らなくてもデータベース操作を簡単に行うことができます。
また、MTV モデル でも解説したように、データベースの操作を行うのは MTV の中の Model であり、基本的には Model から Django フレームワークのデータベース操作機能が利用されることになります。
テンプレートエンジン
次に紹介する機能がテンプレートエンジンです。
テンプレートエンジンとは HTML の雛形となるテンプレートファイルに対してデータを埋め込む機能・ソフトウェアのことを言います。Django の場合、このテンプレートファイルが MTV における Template から提供されます。
例えば、ログイン機能を有するウェブアプリでは、アプリで表示されるページがログインユーザーに応じて動的に変化するようになっています。つまり、ログインユーザーごとに異なるページが表示されるようになっています。
![]()
ただし、ページ内でユーザーによって異なるのは一部のみで、他のページの大枠部分は毎回共通であることが多いです。このようなページは、ページ毎に HTML を別々に用意しておくことで実現することも可能ですが、用意するのに手間がかかります。
そこで、Django ではあらかじめ毎回共通して同じ表示を行う部分を Template ファイルとして用意しておき、テンプレートエンジンによって Template ファイル内の動的に変化させたい部分にデータを埋め込むことで HTML を生成するようになっています。
![]()
これにより、1つの Template ファイルから無数のページ表示を行うことができ、上記の例で言えば各ユーザーに応じたページ表示を実現することができます。
スポンサーリンク
管理画面
また、Django では標準で管理画面生成機能が搭載されています。
この管理画面ではデータベースに保存されているレコードの更新や削除等を行うことができます。
![]()
例えばユーザーの情報もデータベースに保存されますので、ユーザーの削除(強制退会)なども管理画面から行うことが可能です。また、この管理画面は管理者権限を持ったユーザーのみが利用できるように作られているため、Django を利用してアプリを開発することでセキュリティの高い管理画面がデフォルトで利用できることになります。
認証
また、Django が提供する重要な機能の1つが認証となります。
ウェブアプリはログイン機能を有し、ログインユーザーに応じた動作を行うことが特徴となるものが多いです。
こういったログイン時に行われるのが認証で、Django は認証機能を提供するため、ログイン等もお手軽に実現することができます。ログイン時にはパスワードを利用することが多いですが、Django の認証機能を利用すればパスワードも自動的に暗号化され、セキュリティの高いウェブアプリが実現しやすくなります。
また、ウェブアプリによってはログインしないと利用できないものもあります。Django にも非ログインユーザーからのアクセスを禁止する機能がありますので、そういったウェブアプリも簡単に実現できます。
![]()
開発用ウェブサーバー
ここからは開発用に用意された Django の機能について紹介していきます。
Django の機能で便利なものの1つに開発用ウェブサーバーが挙げられます。
ここまで説明を省略してきましたが、正確にはウェブアプリは単体で動作するものではなく、ウェブアプリを動作させるためには下の図のように Apache や Nginx 等のウェブサーバーや、さらには uWSGI などの AP サーバー(アプリケーションサーバー)等のソフトウェアも動作している必要があります。したがって、本来であれば開発したウェブアプリの動作確認を行う際にも、これらのソフトウェアを動作させておく必要があります。
![]()
補足しておくと、上の図のウェブアプリ公開時の構成の1例であり、異なる構成の場合もあります。
サーバーと聞くと難しく感じるかもしれませんが、ここで感じとっていただきたいことは、ウェブアプリの動作確認を行うために本来であれば「他のソフトウェア(ウェブサーバーやアプリケーションサーバー)を準備する」という作業が必要であり、面倒であるという点になります。
ですが、Django には「開発用ウェブサーバー」が用意されており、これが上記のソフトウェアの役割を果たしてくれるため、これらの準備を行うことなくウェブアプリの動作確認を行うことができるようになっています。
![]()
つまり、この開発用ウェブサーバーのおかげで、Python と Django さえインストールしておけばウェブアプリの動作確認が出来るようになります。また、開発者の PC でウェブブラウザから開発用ウェブサーバーにリクエストを送信することもできるため、上図のように開発者の PC のみでウェブアプリの開発および動作確認を行うことができます。
開発用ウェブサーバーを利用しない場合でも、ウェブサーバーやアプリケーションサーバーを開発者の PC 内で動作させてやれば、開発者の PC 1つでウェブアプリの開発および動作確認を行うことは可能です
ただ、前述の通り、この場合は別途サーバーのソフトウェアの準備(インストールや設定など)が必要になります
ちなみに、Django でウェブアプリを開発した経験のある方なら下記コマンドを実行したことがあると思いますが、下記コマンドが開発用ウェブサーバーを起動するためのコマンドになります。
% python manage.py runserver
ただし、このサーバーは名前の通り開発時の動作確認用のものであり、実際にウェブアプリを公開する際には、ウェブサーバー等の他のソフトウェアの準備が必要となります。
スポンサーリンク
オートリロード
また、Django の開発用サーバーにはオートリロード機能があります。
まず前提として、プログラムは実行開始タイミングのソースコードの内容に従って動作します。つまり、プログラム実行中にソースコードを変更しても即座にその変更はプログラムの動作に反映されません。
ですので、プログラムの動作確認中にソースコードを修正したとしても、その修正をプログラムの動作に反映させるためにはプログラムを一旦終了させ、再度プログラムを実行する必要があります。ただ、毎回手動でプログラムの終了と実行を行うのは面倒ですね…。
これを解決するのがオートリロード機能で、Django ではソースコードを修正した際に自動的にプログラムの終了と実行が行われるようになっています。
このオートリロード機能が搭載されているため、ソースコード修正後の動作確認をお手軽に行うことができ、開発効率が向上します。
Django のメリット・デメリット
続いて、このウェブアプリフレームワークを利用するメリットとデメリットについて解説していきます。
開発効率を向上させることができる
これは Django というよりウェブアプリフレームワークを利用するメリットになりますが、メリットの1つ目としてウェブアプリの開発効率がアップする点が挙げられます。
前述の通り、Django(ウェブアプリフレームワーク)によってウェブアプリを実現する上で必要な共通的な機能が提供されることになります。そのため、ウェブアプリ開発者は Django によって提供される機能に関しては自身で開発する必要が無くなります。
![]()
例えば、ウェブアプリでデータベースを操作する必要があるからといって、データベースを操作するための処理や機能を自身で実装する必要はありません。Django によって提供されるモジュールを利用してデータベースを操作すれば良いだけになります。
自身で実装を行なった場合、バグが発生する可能性が高いです。そのため、そのバグを見つけるためにテストや評価などを行う必要があるのですが、Django によって提供されるモジュールを使用することで、それらのテストや評価も不要となります。
つまり、Django によって提供される機能に関しては、ウェブアプリ開発者は実装したりテストしたりする必要がなくなるのです。そして、その分開発効率を向上させることができます。
スポンサーリンク
ウェブアプリの差別化に注力できる
また、これもウェブアプリフレームワークを利用するメリットになりますが、ウェブアプリ開発者が他者が開発するウェブアプリとの差別化に注力できるという点もメリットになると思います。
前述の通り、ウェブアプリを実現する上で必要となる共通的な機能は Django によって提供されるため、これらの機能を開発する必要もありません。そのため、当然開発時間は減らすことができますし、これらの機能を開発する知識やスキルも不要となります。
また、これらはウェブアプリで共通的な機能なため、これらの機能は自身で開発しても他のウェブアプリと差別化が図りにくい部分でもあります。
こういった共通的な機能は Django フレームワークによって提供されるため、それらを開発するための時間やそれらに関する知識を身につけるための時間を省き、その分の時間を他のウェブアプリと差別化を図るための時間に当てることができます。
![]()
Django でのウェブアプリ開発において、他のウェブアプリとの差別化を図る部分がプロジェクトになります。特に、このプロジェクト内の MTV モデルに関する部分を作り込むことで、世の中にない新しいウェブアプリを生み出していくことができます。
Python で開発できる
また、他のウェブアプリフレームワークではなく、Django を利用するメリットとしては、やはり Python で開発ができるという点が挙げられるのではないかと思います。
現時点で Python は人気ナンバーワンのプログラミング言語であると言っても良いでしょう。Python を使用したことのある方も多いと思います。そういった方にとって、慣れ親しんだ Python でウェブアプリを開発できるという点は、やはりメリットであると思います。
また、Python にはウェブアプリフレームワークだけでなく、様々なモジュールが用意されていますので、Django を利用することでウェブアプリの機能拡張もしやすくなります。分かりやすい例を挙げれば、Python は AI や機械学習等も得意ですので、AI や機械学習を利用したウェブアプリも実現しやすいです。
提供される機能が多い
ただし、Python にも Django 以外のウェブアプリフレームワークが存在します。有名どころで言えば Flask が挙げられると思います。Python のウェブアプリフレームワークに関して言えば、人気が高いのは Django と Flask が挙げられるのかなぁと思います。
その Flask に比べれば Django の方が提供される機能が多いというメリットが挙げられます。例えば Django では管理画面が標準で用意されていますが、Flask では用意されていないため、管理画面を利用できるようにするためには別途拡張を行う必要があります。
スポンサーリンク
慣れるまでが大変
ここまで Django を利用するメリットを中心に解説してきましたが、デメリットもあるので、その点も解説していきたいと思います。
1言で言えば、Django のデメリットは慣れるまでが大変であることになります。特に Django 初心者の方には Django を利用するのが難しく感じるのではないかと思います。
その最大の理由は Django がフレームワークである点にあります。Django が定めるルール(枠組み)に従ってウェブアプリの開発を行なっていく必要があるため、そのルールに慣れるまでが大変です。
Django のルールを理解する必要がある
Django とは で解説したように、Django フレームワークはウェブアプリを実現する上で必要となる共通的な機能を提供します。この機能の利用の仕方にもルールがあるので、このルールに従って開発を行う必要があります。例えば、このルールとしては、機能利用時に実行する関数やメソッドの引数や実行タイミングなどが挙げられると思います。
![]()
機能を提供するという意味ではライブラリも同じで、ライブラリの場合もライブラリのルールに従って機能を利用する必要があります。が、ライブラリと異なり、フレームワークは構造も提供します。
その構造とは、Django とは で紹介した MTV モデルになります。Django フレームワークを利用して開発したウェブアプリは MTV モデルの構造に合わせて動作するため、機能の使い方だけでなく構造についてのルールも理解し、それに合わせてウェブアプリを開発していく必要があります。
![]()
また、Django フレームワークを利用した場合、自身で開発したスクリプト(プロジェクト内のスクリプト)は Django フレームワーク側から実行されることになります。
これはつまり、 Django フレームワークのルールに従って、開発者がプロジェクト内で定義する関数やメソッドを設計・実装する必要があるということになります。
もう少し具体的に言うと、Django フレームワークからどういった名前の関数やメソッドが実行されるのか、さらにどういった引数が指定されるのかを理解していなければ、開発者が用意した関数やメソッドが実行されなかったり、実行時に引数の話が合わなくて関数やメソッド実行時に例外が発生したりすることになります。
![]()
慣れてしまえば楽に開発できる
こういったルールが多く、ルールに合わせて開発を行う必要があるため、Django フレームワークを使いこなすためには Django フレームワークのルールを理解しておく必要があります。そして、このルールを理解し、ルールに慣れるまでが結構大変です。
ライブラリの場合はライブラリ利用時のルールさえ理解すれば良いですが、フレームワークの場合は決められた構造に合わせたり、フレームワークから利用される際のルールも理解する必要がある分、ライブラリより慣れるまでが大変だと思います。
また、ルールが厳しいので開発者は窮屈さを感じるかもしれませんし、特に既に開発済みのスクリプト(Django フレームワーク内のスクリプト)から自身が開発したスクリプトが実行されるという点は、フレームワークを利用したことのない方からすると戸惑うかもしれないです。
ただ、慣れるまでが大変だとは思いますが、ルールを理解するという点ではそこまで難しくないので安心してください。例えば、ユーザーからのページ表示等のリクエストがあった際に、最初に実行される関数やメソッドはプロジェクト内の urls.py というファイルで開発者が設定することができます。
また、この urls.py や、View や Model を構成するファイル(views.py や models.py)などのプロジェクト内で必要となる最低限のファイルはプロジェクト生成時に自動的に作成されます。ですので、その自動的に作成されたファイルをカスタマイズしていくことで、Django のルールにしたがったプロジェクトを作成していくことができます。
ルールに従ったプロジェクトを開発することができれば、後は開発者が用意した関数やメソッドを適切なタイミングで適切な引数を設定して Django フレームワークが実行してくれるようになるため、フレームワークを利用しないときに比べて楽に開発を行うことができるようになります。
![]()
要は Django フレームワークのルールに沿って関数やメソッドを用意してやれば良いだけになります。
また、Django フレームワークが提供する機能を理解して使いこなせば、より高機能なウェブアプリも作りやすくなります。
こういった背景があるため、Django を初めて利用する場合は戸惑うことも多く、慣れるまでが大変ですが、慣れてしまえばこっちのもので、Django を利用しない場合に比べて確実に楽に開発を進めることができます。
本ウェブサイトにおいては、こういった Django に慣れるための知識を共有するため、Django の全体像や仕組みを解説するページも公開していきたいと思います。
また、書籍やウェブサイトで公開されているウェブアプリを実際に作成し、それを動作させてみたりカスタマイズしたりしてみることで Django に慣れることもできると思います。
Django でのウェブアプリ開発に必要な知識
最後に、Django でウェブアプリを開発する際に必要になる知識について紹介しておきます。
ウェブアプリを公開するためには、ウェブサーバーやデプロイの知識も必要になるのですが、ここではウェブアプリを作る際に必要になる知識のみを紹介しています。
また、これらの知識を全て身につけないとウェブアプリを開発してはいけないというものではありません。全項目に対して深い知識を身につけてからウェブアプリを開発しようと思うと、それだけで何年もかかってしまいます…。
まずは、ここで挙がっている項目がどういった概念のものであるかを浅く知っておけば良いと思います。そして、ウェブアプリを実際に作ってみながら足りない知識を補っていけば良いです。もちろん、知識を身につけていくにつれて「これについてはもっと深く理解しておきたい」と思う点が出てきたのであれば、その知識を深めていけば良いと思います。
リクエスト
まず身につけておきたいのが HTTP リクエストについての知識になります。
最低でも、HTTP リクエストには GET メソッドと POST メソッドが存在することは知っておいた方が良いです。ウェブアプリでは、リクエストに応じた処理の実行とレスポンスの返却を実現する必要があります。そのため、ウェブアプリ開発者はリクエストのメソッドについて理解し、そのメソッドに応じてウェブアプリの動作を切り替えるような実装を行う必要があります。
大雑把に説明しておくと、リクエストはウェブブラウザ等から送信されるもので、GET メソッドでのリクエストは特定のページの表示を行うためのデータを取得するためのリクエストとなります。例えばこのページがウェブブラウザで表示されているのは、ウェブブラウザから https://daeudaeu.com/what-is-django/ という URL に対して GET メソッドでのリクエストが送信されたからになります。
そして、そのリクエストを受け取ったウェブアプリがレスポンスとして HTML / CSS / JavaScript / 画像などのデータを返却し、それにしたがってウェブブラウザがページ表示を行なっています。
開発用サーバー でも説明したように、実際にはリクエストを受け取ったりレスポンスを送信したりするのはウェブサーバーの役割となります
が、ここでの解説では簡単のためウェブサーバーの説明に関しては省略しています
Django で開発するウェブアプリでは、この返却する HTML は動的に生成され、さらにこの HTML はデータベースから取得したデータに基づいて生成されることが多いです(テンプレートエンジンによって生成)。
![]()
それに対し、POST メソッドはウェブブラウザ等からウェブアプリに対してデータを送信するためのリクエストになります。POST メソッドのリクエストを受け取った際には、送信されてきたデータをデータベースに保存することが多いと思います。
![]()
例えばユーザー登録フォームで「送信」ボタンを押した際には、ウェブブラウザから POST メソッドのリクエストがウェブアプリに対して送信されることになります。そして、このリクエストにはフォームに入力されたデータが一緒に送信されます。
そして、そのデータをウェブアプリがデータベースに保存することでユーザー登録が行われることになります。
![]()
このように、リクエストのメソッドに応じてウェブアプリの動作が変わります。開発者目線で考えると、メソッドに応じて処理を切り替えるようにウェブアプリを開発する必要があるということになります。そのため、上記で解説した GET メソッドと POST メソッドの大まかな違いは理解しておいた方が良いです。
スポンサーリンク
HTML
先程の解説の中でも少し登場しましたが、HTML の知識も持っておいた方が良いです。
HTML はウェブアプリのページ(画面)に何を表示するのかを記述するファイルになります。より具体的には、ページに表示する要素(見出し・段落・画像など)を指定するファイルになります(ヘッダーなども必要)。
例えば、自身のウェブアプリで下の図のようなページを表示したいのであれば、ページの見出しやユーザー名、ユーザーの画像等を表示することを HTML で指定する必要があります。
![]()
HTML の知識がないと、自身のウェブアプリで「こういうページ表示を行いたい」という願望があっても、それを実現することができません。
Django においては、この HTML をそのまま用意するのではなくテンプレートファイルを作成し、そこに必要なデータを埋め込むことで HTML の生成が行われます。このテンプレートファイルはデータの埋め込みができるよう HTML を拡張したものであり、テンプレートファイルを作成するためには HTML の知識が必要となります。
CSS / JavaScript
HTML がページに “何を表示するのか” を指定するファイルであるのに対し、CSS はページを “どのように表示するのか” を指定するファイルになります。
より具体的には、HTML の各要素の見た目を指定するファイルになります。例えば、文字の大きさ・文字の色・背景の色・余白のサイズなどを指定することができます。
とりあえずウェブアプリを動作させたいだけなのであれば CSS の知識は必要ないのですが、より見た目の良いウェブアプリを開発したい場合には CSS の知識が必要となります。
CSS を利用しない場合、ウェブアプリで表示されるページが白背景に黒文字という素っ気ないものになってしまいますので、開発していて味気ないと感じることが多いと思います。CSS を利用することで、見た目が綺麗になり、よりウェブアプリっぽく仕立てることができてウェブアプリ開発がより楽しくなります。
また、ページに動きを持たせたいような場合は JavaScript の知識も必要となります。
Python
また、Django でウェブアプリを開発する際には基本的には Python で処理を記述することになります。
そのため、Python の知識は必須です。もちろん深い知識は必要はありませんが、ウェブアプリを開発したいのであれば最低限の知識やスキルは必要となります。
スポンサーリンク
クラス
オブジェクト指向の知識もあった方が良いです。
特に必要なのがクラスの知識です。Django が提供する機能を利用する上で、Django フレームワークに用意されたクラスを継承する必要がある場合があります。
例えばデータベース操作を行う際には、あらかじめクラスを定義し、そのクラスのインスタンスにメソッドを実行させることでデータベース操作を行うことになります。
ただし、データベース操作が可能なクラスを実現するためには単にクラスを定義すれば良いというわけではなく、Django フレームワークに用意された Model というクラスを継承するクラスとして定義する必要があります(つまり Model のサブクラスとして定義する)。
この Django フレークワークに用意されたクラスを継承する機会は多いので、継承の仕方や、継承の意味合いについては知っておいた方が良いと思います。
データベース
また、データベースについての知識もあった方が良いです。
ウェブアプリではデータベースを利用する機会が多いです。ユーザーから送信されたデータをデータベースに保存し、それを上手く利用することで様々なウェブアプリが実現されています。
前述の通り、SQL 文が記述できるレベルの知識はなくても良いですが、データベースに対してどんな操作が行えるのかについては知っておいた方が良いと思います。
また、特にデータベース関連で必要になる知識がリレーションになると思います。簡単に言えば、リレーションとはデータ同士の関連付けです。
例えば Twitter であれば、あるユーザーがツイートした内容に対して他のユーザーが「いいね!」をすることができます。そして、ユーザーは自身のツイートに「いいね!」したユーザーを確認することができます。さらに、それらのユーザーのプロフィールや今までツイートした内容、他に「いいね!」したツイートなどを辿って調べることができます。
![]()
このように情報を辿りながら他の情報を調べるようなことができるのはデータ同士が関連付けられているからです。このような関連付け(リレーション)を上手く行うことで、より高機能・より面白いウェブアプリを実現することもできるようになります。
Django
また、当然ですが、Django でウェブアプリを開発するためには Django の知識が必須となります。
ただ、Django 全てについて理解しておく必要はないです。最低限、プロジェクト内の各ファイルの役割を理解しておけば、ウェブサイトや書籍等で紹介されているウェブアプリを真似て作成し、不明点を調べたり、自分なりにカスタマイズしていくことで自然と Django の知識も深まると思います。
スポンサーリンク
まとめ
このページでは Django について解説しました!
Django はウェブアプリフレームワークの1つであり、Django を利用することでウェブアプリを効率的に開発することができます。これは、Django がウェブアプリを実現する上での共通的な機能・構造を提供してくれるからです。
Django を利用するメリットは多くあるものの、慣れるまでが大変という点が Django の最大のデメリットになると思います。Django におけるルールを理解した上で開発を進める必要があります。
ただし、慣れてしまえばウェブアプリフレームワークのメリットが発揮され、効率的にウェブアプリの開発を進めていくことができます。慣れるためには、やっぱりウェブアプリ開発を実際に行ってみるのが一番良いと思います。
このページでは、特に Django をご存知ない方向けに、Django 自体や Django を利用するメリット等について解説しました。それに対し、下記ページでは、Django を使ってみたいという方向けに、Django の詳細が知れるよう、Django の全体像や動作の仕組み・ファイル構成等について解説していきたいと思います。Django に興味を持たれた方は是非下記ページも読んでみてください!

