PythonのWebフレームワークの代表格であるDjango(ジャンゴ)。名前を聞いたことがある人もいるかもしれません。
でも、そもそもフレームワークって何?とか、PythonでWebシステムを開発することがイメージできない、とかいう方もきっと多いのでは。
実際、PythonはまずAI開発で使われるようになって注目を集めた言語で、他に何ができるのかよく分からない、という方もいるようです。
Pythonは汎用的な言語です。特定の目的のために開発された言語とは違い、ライブラリ(拡張機能)さえあれば何にでも応用ができます。DjangoはそんなPythonでWebシステムを開発できるように設計されたライブラリの一つなのです。
この記事では、Djangoの入門の入門ということで、DjangoのツボをDjangoを全く知らないという人向けに解説していきます。
そもそもDjangoとは?
Djangoとは、前述のとおり、PythonでWebシステムを開発できるように設計されたPythonのライブラリの一つです。
Djangoのコードを記述するには、Pythonを知ったうえで、Djangoの構造を知ってDjangoの作法通りに書かなければなりません。全体の構造が決まっていて、その中ではその作法に従う、というライブラリのことを特にフレームワークと呼びます。
フレームワークにすると、なにがいいのでしょう?
それは、フレームワークが基盤となる部分を全て代替してくれるから便利なのです。Webであれば、ページ間遷移、ログイン/ログアウト、データベースとの連携、表示されるHTMLの種類など、基盤はどれも同じです。その基盤がDjangoには予め組み込んであります。だから、基盤となる部分を拡張するだけで、独自のWebシステムが開発できる、というわけです。
Djangoは中規模~大規模のWeb開発に向いていると言われます。理由は、フルスタックのフレームワークであるからです。WebでできることでDjangoがカバーしていないことはほぼありません。その分初期の学習コストはやや高いです。しかし、一度マスターしてしまえば、同時にWeb開発をマスターしたことになります。
Djangoの求人
時によって変化するので件数はあえて書きませんが、Djangoエンジニアにはかなりの求人があります。Djangoエンジニアであれば当面仕事には困らなさそうです。それも、Djangoの特性を活かした、大規模な開発案件が数多くあります。給料も高めです。
Pythonですので、AIとDjangoの連携と言った高度な求人も見受けられます。AI部分はデータサイエンティストが開発し、Webの部分はエンジニアが開発するというイメージでしょうか。
Djangoでの開発の基本スタイル
Djangoは基盤を提供してくれるから、ディレクトリやフォルダの構成であるとか、基本的なスクリプトとかはすべてDjangoが自動生成します。開発者はそれに沿い、穴を埋めていく感じで開発します。Djangoの作法に沿ってPythonスクリプトを追加していき、JavaScriptを書き、あるいはHTMLやcssやイメージなどと言った静的ファイルを書き、配置します。
あまりにもたくさんのファイルが自動生成されるので、最初は面食らうかもしれませんが、とりあえず下記を押さえておきましょう。
- Djangoではプロジェクトという単位で開発の全体を掌握する。
- プロジェクトの中にアプリという単位があり、同じWebシステム上に複数のアプリを配置できる。同じプロジェクトであれば、他のアプリにアクセスできる。
- データベース連携はmodels.py。
- 画面を直接管理するのはviews.py。
- 画面への値の出力/ユーザからの値の入力はforms.py。
- URLを解釈しviews.pyのどの部分を呼び出したらいいのかのルーティングをパターンを書くだけでDjangoがやってくれる。
- 強力なHTML産出機能がある。HTMLテンプレートと呼ばれる。
以上について、簡単に見ていきます。
models.py
データベースとのやり取りを書きます。DjangoではSQLite、MySQL、PostgreSQLを扱えますが、直接SQLを書くことはほぼありません。models.pyにクラスを定義すると、それがデータベースのテーブルになり、基本的にDjangoが提供する関数を利用してデータベースにアクセスするからです。また、データベースの種別を気にすることはありません。データベースごとの違いはDjangoが吸収してくれます。
だから、Djangoでは煩雑なデータベース操作をやらずにすむのです。
views.py
ビューと言う単位で、画面の管理を書きます。処理の中核はここです。画面遷移や、models.pyとのやり取りもここに書くことが多いです。メールを出したり、エラーを出したり、様々な処理を書きます。
forms.py
フォームという単位で、ユーザーとのやり取りを書きます。フォームが便利なのは、例えば
class SampleForm(forms.Form): choice = forms.ChoiceField( choices = ( (1, 'サンプル1'), (2, 'サンプル2'), (3, 'サンプル3'), ), label='sample', widget=forms.RadioSelect )
と書き、後述するHTMLテンプレートにこのクラスのインスタンスを記述するだけで、ラジオボタンが生成され、かつ、ラジオボタンをクリックしているかのチェックや、値の受け渡し(ここでは「1」など)などをフォームが勝手にやってくれるところです。基本的なチェックは、全て任せてしまえます。
ルーティング
urls.pyにurlpatternsという変数を定義し、URLのリストを並べるだけでDjangoが表示する画面を判別してくれます。複雑なURL(トークンというものがついた長いURLがメールで送られてきたことはありませんか?)も一行で解析できます。
HTMLテンプレート
viwes.pyがHTMLテンプレートを指定して、そのHTMLテンプレートがHTMLを生成します。views.pyとの値のやり取りも柔軟にできます。
また、Webシステムを作っていれば、実はみな同じ構造のHTMLなんだけど、ということはよくあることです。そのために、DjangoはHTMLテンプレートの「継承」を用意しています。構造は同一で、メインの部分だけ違うHTMLを簡単に作れます。
このときには表示したいけど、このときにはしたくない、なんてときにはifというテンプレートタグも用意されています。
Djangoの入門書
以上、Djangoについて簡単に解説してきましたが、いかがだったでしょうか。
最期に2冊、Djangoの入門書を紹介しておきます。
掌田津耶乃「Python Django 超入門」
これだけ分かりやすいDjangoの入門書もありません。語り口も平易で理解が容易です。この本を読んで実践デビューと言うわけにはいきませんが、最初の一冊としてはおすすめです。
横瀬明仁「現場で使えるDjangoの教科書 基礎編」
しっかりとDjangoを学ぶならこの本でしょう。解説が堅実です。やや敷居が高めですが、じっくりと時間をかけて学習するならおすすめです。