Djangoとは?

このページでは、Python における「Django」について解説していきます。

まず、Django がどういったソフトウェアであるかについて解説し、その後 Django が提供する機能や Django を利用するメリットやデメリット等について説明していきます。

Django がウェブアプリケーションフレームワークであることは知っていても、フレームワークがどういったものかを理解していない方も多いのではないかと思います。このページでは、フレームワークがどういうものであるのかについてもスッキリ理解していただけるよう、詳しく説明していきます!

Django とは

では、早速 Django がどういったものであるのか?について説明していきたいと思います。

Django とは

冒頭でも少し触れましたが、Django とは Python におけるウェブアプリケーションフレームワークになります(以降、ウェブアプリケーションをウェブアプリと略します)。

スポンサーリンク

ウェブアプリフレームワークとは

ウェブアプリフレームワークはウェブアプリの標準的・共通的な構造を実装するための枠組みであり、ウェブアプリの標準的・共通的な構造を実装するために必要となる機能を提供します。このフレームワークを利用することで、ウェブアプリの開発効率を向上させることができます。

Djangoの説明図

ウェブアプリの共通的機能

世界中には様々なウェブアプリが存在します。例えば Twitter や Facebook、Instagram などは有名ですね!皆さんも使用したことがあるのではないでしょうか?

これらのウェブアプリは全然違うように見えて、実はアプリのソフトウェア構造や内部的な機能はかなり似ています

まず、これらのウェブアプリは全てログインをして使用するアプリになります。このログインを行うためには認証機能が必要です。つまり、これらのアプリは全て認証機能を備えています。

ウェブアプリが共通して認証機能を備えている様子

例えば Twitter を利用するためにはログインをする必要があり、ログインすることで、ツイートしたり、あなたがフォローしているユーザーのツイート一覧を表示したりすることが可能になります。同様に、Facebook や Instagram でもログイン機能を備えており、ログインすることでウェブアプリを利用することができるようになっています。

また、これらのウェブアプリは全てデータベース操作機能を備えています。このデータベースを操作することで、ユーザーの情報や投稿されたツイートやコメント、画像などが管理されています。

ウェブアプリが共通してDB操作を備えている様子

例えば Twitter であれば、ユーザー登録を行うことでユーザーの情報がデータベースに保存されますし、ツイートした情報や「いいね」をした情報、さらにはフォロワーなどの情報もデータベースに保存されています。

そして、あなたが Twitter を利用する際には、データベースからツイートした情報やフォロワーなどの情報が取得され、その情報を利用してウェブアプリの画面が表示されることになります。

ツイートがデータベースに保存されたりツイートがデータベースから取得されたりする様子

もちろん、扱うデータは異なるものの、データベースを利用すると言う意味では Facebook や Instagram などでも同様です。

共通的構造をウェブアプリフレームワークで実現

ここでは代表的な機能についてのみ紹介しましたが、ウェブアプリを実現する上で必要な機能やソフトウェアの構造は実は似通っています。

ウェブアプリの機能や構造が似ていることを示す図

そして、これらの似通った共通的な機能・構造を提供するのがウェブアプリフレームワークとなります。

ウェブアプリフレームワークの役割を示す図

前述の通り、Django はこのウェブアプリフレームワークの1つになります。Django フレームワークのイメージを表せば下の図のようになり、青色部分にウェブアプリにおける共通的な機能が存在するイメージとなります。

Djangoフレームワークのイメージ図

スポンサーリンク

Django フレームワークとプロジェクト

さらに、Django ではプロジェクトを作成し、そのプロジェクト内のファイルを編集していくことでアプリを開発していくことになります。これらはファイルとしては別の場所に存在するのですが、動作的に考えた場合は下の図のようにフレームワークの中に存在すると考えられます。

Djangoフレームワークとプロジェクトの関係図1

フレームワークが共通部分であるのとは逆に、プロジェクトはウェブアプリ特有の機能を実現する部分となります。そして、このプロジェクトを作り込んでいくことでて他のウェブアプリとの差別化を図り、世の中に1つだけのアプリに仕上げていくことになります。

また、前述の通り Django フレームワークは機能(ウェブアプリにおいて共通的な機能)を提供するため、それらの機能をプロジェクト内のファイルから利用することができます。その一方で、プロジェクト内のファイルは Django フレームワークから読み込まれたり利用されたりもします(プロジェクトのファイル内で定義した関数やメソッドが実行される)。

Djangoフレームワークからプロジェクト内のファイルが読み込まれたり利用されたりする様子

ただし、何も考えずにプロジェクト内のファイルを作成してしまうと Django フレームワークからの読み込みや利用時にエラー等が発生する可能性があります。これを防ぐためには、プロジェクト内のファイルを Django フレームワークに合わせて作成する必要があります。要は Django フレームワークのルールに従って作成する必要があるということです。

こういう意味で、ライブラリと Django フレームワークは異なるものになります。ライブラリの場合、自身で開発したスクリプトは基本的にライブラリを利用するのみになります(ライブラリからコールバック関数が呼ばれたりすることもありますが)。

ですが、Django フレームワークを利用する場合は、自身が開発したスクリプトが Django フレームワークから利用されることになります。そのため、Django フレームワークから利用可能となるように、Django からどのように利用されるのかを意識して実装する必要があります。

こういった理由から、Django はライブラリではなく枠組みという意味のフレームワークという位置付けものになります。そして、Django の枠組みにハマるようにプロジェクトを開発していく必要があります。

MTV モデル

また、Django の特徴の1つに MTV モデルであることが挙げられます。M は Model、T は Template、V は View の頭文字となっています。

プロジェクト内では、この ModelTemplateView を開発していくことで、そのウェブアプリ特有の機能や動作を実現していくことになります(プロジェクト内では他にもいろんなファイルを作成していくことになりますが、ウェブアプリの基本部分はこれらの3つによって構成されることになります)。

ModelTemplateView

MTV については別途解説記事を用意しようと思っていますが、これらを大雑把に&簡単に表せば下記のようになります。

  • Model
    • データベースで扱うデータの定義とデータベースの操作を行う
  • Template
    • レスポンスデータの HTML の大枠を定義する
  • View
    • リクエストされたデータを受け取り、ModelTemplate を利用してリクエストに応じた処理の実行やレスポンスデータの作成を行う

MTV が Django における共通的な構造

ウェブアプリフレームワークとは の節で、ウェブアプリフレームワークはウェブアプリの標準的・共通的な構造を実装するための枠組みであると解説しました。ただ、ここまでの解説では構造的な話は説明していません。

Django において、この標準的・共通的な構造が MTV モデルとなります。

多くのウェブアプリは共通して MTV モデルの構造で構成されています。これは、あなたが利用したことのあるウェブアプリの動作を思い浮かべてみると納得いくと思います。

まず、ウェブアプリはウェブブラウザから使用することができ、ウェブブラウザからのリクエストに応じてウェブアプリが動作することになります。

プロジェクト内のファイルにおいて、そのリクエストを受け取るのが View になります。もう少し具体的にいうと、View に対応するファイルで定義された関数(もしくはメソッド)が引数としてリクエストを受け取ることになります。この View で定義された関数は Django フレームワークから実行されることになり、引数としてリクエストのデータが Django フレームワークから渡されます。

DjangoフレームワークからViewにリクエストが渡される様子

そして、View はそのリクエストに応じて Django フレームワークに対してレスポンスを返却します。ウェブブラウザのページを表示する際には HTML が利用されますので、HTML がレスポンスのデータとして返却されることになります(他にも CSS なども返却されますが、詳細な説明は省略します)。

この返却する HTML を生成するために、ViewModelTemplate を利用します。

リクエストを受けた際にMTVの動作を示す図

例えば Twitter でユーザーのツイート履歴を表示するリクエストを受けとった際には、View はリクエストのデータ等からユーザーを特定し、そのユーザーが今まで行ったツイートの情報をデータベースから取得します。このデータベースの操作は Model によって行われるため、この際に Model を利用します。要は Model に対し、あるユーザーのツイート履歴の取得を依頼することになります。

ViewがModelを利用する様子

今まで行ったツイートの情報が取得できれば、続いてあらかじめ用意しておいた下の図のようなページを構成する HTML の大枠に対しツイートの情報を埋め込みます。

TemplateにModelから取得したデータを埋め込む様子

このページの大枠を構成する HTML は Template となります。要は Template は変数の埋め込み可能なように拡張された HTML です。様々なページ表示(画面表示)が実現できるよう、複数の Templateが用意されていることが多いため、その中からどの Templateを利用するかを View が選択し、それに対してデータベースから取得したデータを埋め込みます。

ViewがTemplateを利用する様子

以上の処理により、ユーザーのツイート履歴を表示するための HTML が生成されたことになるので、この HTML を View の関数の呼び出し元である Django フレームワークに返却します。

このような一連の流れによって、ユーザーのツイート履歴の表示が実現されることになります。

ViewがModelとTemplateを利用してHTMLを生成する様子

次は別のケースとして、特定のツイートに対して「いいね!」したユーザーの一覧を表示する場合に、MTV がどのように作用するかについて考えてみましょう!

この場合も同様で、View がリクエストを受け取って「いいね!」したユーザーの一覧を表示したいツイートを特定します。そして、View がそのツイートに対して「いいね!」したユーザーのリストの取得を Model に依頼します。依頼を受けた Model はデータベースから依頼されたデータの取得を行います。

さらに View は、先ほどとは異なる Template を選択し、それに対して Model に取得してもらったユーザーリストを Template に埋め込んで HTML を生成し、その結果をレスポンスデータとして Django フレームワークに返却します。

ViewがModelとTemplateを利用してHTMLを生成する様子

当然この場合は、ユーザーのツイート履歴を表示した時とは異なるページ表示を行うため、生成される HTML も異なることになります。このように、リクエストに対して、どんなページ表示を行うかを決め、それに応じて Model への依頼内容や利用する Template を決定するのが View の役割となります。

また、この2つの例を見れば分かるように、Model に対する依頼内容や選択する Template は異なるものの、ModelTemplateView それぞれの役割は同じです。

ここまで Twitter の例で説明を行いましたが、他のウェブアプリでも同様の役割で ModelTemplateView が作用することになります。つまり、ウェブアプリにおいて ModelTemplateView は共通的な構造であると言えます。

ウェブアプリの共通的な構造を示す図

MTV を作り込んでウェブアプリ特有の機能を実現

ですが、ウェブアプリによって出来ることや表示内容は全然違いますね!

これは、ModelTemplateView の3つの構造でウェブアプリが実現されていることは共通ではあるものの、ModelTemplateView それぞれの作りがウェブアプリごとに異なるからです。

例えばウェブアプリに応じて扱うデータが違っていたりします。例えば Twitter の場合はツイートが扱われますが、クックパッドの場合はレシピが扱われていたります。この違いは Model の定義によって生じています。 Model はウェブアプリで扱うデータの定義を行います。この Model が違えば、ウェブアプリで扱うデータも異なることになります。

また、Twitter とクックパッドではページに表示される内容が大きく異なりますね!

この1つの要因は Template の違いになります。Template はページ表示時に使用される HTML の大枠部分であり、これが異なればページに表示される内容も異なることになります(もちろん扱うデータが異なる点も、ページに表示される内容が異なる要因にもなります)

このように、ウェブアプリの共通的な構造は ModelTemplateView の3つから構成されるものの、ウェブアプリによって ModelTemplateView の作りを変えることで他のウェブアプリとの差別化を行うことができます。

ですので、あなたが Django でウェブアプリを開発する際には、この MTV の構造を守りつつ、あなたが開発したいウェブアプリに合わせて ModelTemplateView それぞれを作り込んでいくことになります。

ウェブアプリ開発時にMTVの実装が必要であることを示す図

補足しておくと、他のウェブアプリフレームワークには共通的な構造として MTV モデルではなく MVC モデルを採用しているものがあります。MVC モデルは ModelViewController の3つから構成されます。それぞれの意味合いも MTV モデルと異なるのですが、MTV モデルも MVC モデルも目的は同じで、その目的はウェブアプリの共通的な構造を定義することになります。

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 を生成するようになっています。

各ユーザーのページをTemplateにデータを埋め込むことで実現する様子

これにより、1つの Template から無数のページ表示を行うことができ、上記の例で言えば各ユーザーに応じたページ表示を実現することができます。

管理画面

また、Django では標準で管理画面生成機能が搭載されています。

この管理画面ではデータベースに保存されているレコードの更新や削除等を行うことができます。

Djangoにおける管理画面の例

例えばユーザーの情報もデータベースに保存されますので、ユーザーの削除(強制退会)なども管理画面から行うことが可能です。また、この管理画面は管理者権限を持ったユーザーのみが利用できるように作られているため、Django を利用してアプリを開発することでセキュリティの高い管理画面がデフォルトで利用できることになります。

スポンサーリンク

認証

また、Django が提供する重要な機能の1つが認証となります。

ウェブアプリはログイン機能を有し、ログインユーザーに応じた動作を行うことが特徴となるものが多いです。

こういったログイン時に行われるのが認証で、Django は認証機能を提供するため、ログイン等もお手軽に実現することができます。ログイン時にはパスワードを利用することが多いですが、Django の認証機能を利用すればパスワードも自動的に暗号化され、セキュリティの高いウェブアプリが実現しやすくなります。

また、ウェブアプリによってはログインしないと利用できないものもあります。Django にも非ログインユーザーからのアクセスを禁止する機能がありますので、そういったウェブアプリも簡単に実現できます。

非ログインユーザーからの利用を禁止する様子

開発用サーバー

ここからは開発用に用意された Django の機能について紹介していきます。

Django の機能で便利なものの1つに開発用サーバーが挙げられます。

ここまで説明を省略してきましたが、正確にはウェブアプリは単体で動作するものではなく、ウェブアプリを動作させるためには下の図のように Apache や Nginx 等のウェブサーバーや、さらには uWSGI などの AP サーバー(アプリケーションサーバー)等のソフトウェアも動作している必要があります。したがって、本来であれば開発したウェブアプリの動作確認を行う際にも、これらのソフトウェアを動作させておく必要があります。

公開時のウェブアプリの動作環境構成の1例

補足しておくと、上の図のウェブアプリ公開時の構成の1例であり、異なる構成の場合もあります。

サーバーと聞くと難しく感じるかもしれませんが、ここで感じとっていただきたいことは、ウェブアプリの動作確認を行うために本来であれば「他のソフトウェア(ウェブサーバーやアプリケーションサーバー)を準備する」という作業が必要であり、面倒であるという点になります。

ですが、Django には「開発用サーバー」が用意されており、これが上記のソフトウェアの役割を果たしてくれるため、これらの準備を行うことなくウェブアプリの動作確認を行うことができるようになっています。

開発用サーバー利用時のウェブアプリ動作環境の構成

つまり、この開発用サーバーのおかげで、Python と Django さえインストールしておけばウェブアプリの動作確認が出来るようになります。また、開発者の PC でウェブブラウザから開発用サーバーにリクエストを送信することもできるため、上図のように開発者の PC のみでウェブアプリの開発および動作確認を行うことができます。

MEMO

開発用ウェブサーバーを利用しない場合でも、ウェブサーバーやアプリケーションサーバーを開発者の PC 内で動作させてやれば、開発者の PC 1つでウェブアプリの開発および動作確認を行うことは可能です

ただ、前述の通り、この場合は別途サーバーのソフトウェアの準備(インストールや設定など)が必要になります

ちなみに、Django でウェブアプリを開発した経験のある方なら下記コマンドを実行したことがあると思いますが、下記コマンドが開発用サーバーを起動するためのコマンドになります。

% python manage.py runserver

ただし、このサーバーは名前の通り開発時の動作確認用のものであり、実際にウェブアプリを公開する際には、ウェブサーバー等の他のソフトウェアの準備が必要となります。

オートリロード

また、Django の開発用サーバーにはオートリロード機能があります。

まず前提として、プログラムは実行開始タイミングのソースコードの内容に従って動作します。つまり、プログラム実行中にソースコードを変更しても即座にその変更はプログラムの動作に反映されません。

ですので、プログラムの動作確認中にソースコードを修正したとしても、その修正をプログラムの動作に反映させるためにはプログラムを一旦終了させ、再度プログラムを実行する必要があります。ただ、毎回手動でプログラムの終了と実行を行うのは面倒ですね…。

これを解決するのがオートリロード機能で、Django ではソースコードを修正した際に自動的にプログラムの終了と実行が行われるようになっています。

このオートリロード機能が搭載されているため、ソースコード修正後の動作確認をお手軽に行うことができ、開発効率が向上します。

スポンサーリンク

Django のメリット・デメリット

続いて、このウェブアプリフレームワークを利用するメリットとデメリットについて解説していきます。

開発効率を向上させることができる

これは Django というよりウェブアプリフレームワークを利用するメリットになりますが、メリットの1つ目としてウェブアプリの開発効率がアップする点が挙げられます。

前述の通り、Django(ウェブアプリフレームワーク)によってウェブアプリを実現する上で必要な共通的な機能が提供されることになります。そのため、ウェブアプリ開発者は 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 フレームワークのルールを理解しておく必要があります。そして、このルールを理解し、ルールに慣れるまでが結構大変です。

ライブラリの場合はライブラリ利用時のルールさえ理解すれば良いですが、フレームワークの場合は決められた構造に合わせたり、フレームワークから利用される際のルールも理解する必要がある分、ライブラリより慣れるまでが大変だと思います。

また、ルールが厳しいので開発者は窮屈さを感じるかもしれませんし、特に既に開発済みのスクリプト(Django フレームワーク内のスクリプト)から自身が開発したスクリプトが実行されるという点は、フレームワークを利用したことのない方からすると戸惑うかもしれないです。

ただ、慣れるまでが大変だとは思いますが、ルールを理解するという点ではそこまで難しくないので安心してください。例えば、ユーザーからのページ表示等のリクエストがあった際に、最初に実行される関数やメソッドはプロジェクト内の urls.py というファイルで開発者が設定することができます。

また、この urls.py や、ViewModel を構成するファイル(views.pymodels.py)などのプロジェクト内で必要となる最低限のファイルはプロジェクト生成時に自動的に作成されます。ですので、その自動的に作成されたファイルをカスタマイズしていくことで、Django のルールにしたがったプロジェクトを作成していくことができます。

ルールに従ったプロジェクトを開発することができれば、後は開発者が用意した関数やメソッドを適切なタイミングで適切な引数を設定して 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 / 画像などのデータを返却し、それにしたがってウェブブラウザがページ表示を行なっています。

MEMO

開発用サーバー でも説明したように、実際にはリクエストを受け取ったりレスポンスを送信したりするのはウェブサーバーの役割となります

が、ここでの解説では簡単のためウェブサーバーの説明に関しては省略しています

Django で開発するウェブアプリでは、この返却する HTML は動的に生成され、さらにこの HTML はデータベースから取得したデータに基づいて生成されることが多いです(テンプレートエンジンによって生成)。

GETメソッドの説明図

それに対し、POST メソッドはウェブブラウザ等からウェブアプリに対してデータを送信するためのリクエストになります。POST メソッドのリクエストを受け取った際には、送信されてきたデータをデータベースに保存することが多いと思います。

POSTメソッドの説明図

例えばユーザー登録フォームで「送信」ボタンを押した際には、ウェブブラウザから POST メソッドのリクエストがウェブアプリに対して送信されることになります。そして、このリクエストにはフォームに入力されたデータが一緒に送信されます。

そして、そのデータをウェブアプリがデータベースに保存することでユーザー登録が行われることになります。

ユーザー登録時のリクエストの例

このように、リクエストのメソッドに応じてウェブアプリの動作が変わります。開発者目線で考えると、メソッドに応じて処理を切り替えるようにウェブアプリを開発する必要があるということになります。そのため、上記で解説した GET メソッドと POST メソッドの大まかな違いは理解しておいた方が良いです。

HTML

先程の解説の中でも少し登場しましたが、HTML の知識も持っておいた方が良いです。

HTML はウェブアプリのページ(画面)に何を表示するのかを記述するファイルになります。より具体的には、ページに表示する要素(見出し・段落・画像など)を指定するファイルになります(ヘッダーなども必要)。

例えば、自身のウェブアプリで下の図のようなページを表示したいのであれば、ページの見出しやユーザー名、ユーザーの画像等を表示することを HTML で指定する必要があります。

HTMLの説明図

HTML の知識がないと、自身のウェブアプリで「こういうページ表示を行いたい」という願望があっても、それを実現することができません。

Django においては、この HTML をそのまま用意するのではなく Template を作成し、そこに必要なデータを埋め込むことで HTML の生成が行われます。この Template はデータの埋め込みができるよう HTML を拡張したものであり、Template を作成するためには 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 を使ってウェブアプリの開発に挑戦してみてください!

同じカテゴリのページ一覧を表示