【セミナーレポート】Django Nightセミナー ~フレームワーク比較、DX活用事例、テクニカルハイライトまでDjango丸わかり~

2025年3月19日(水)、オンラインセミナー「Django Nightセミナー」を開催いたしました。

本セミナーでは、高速な開発と優れたセキュリティを兼ね備え、多くの企業で採用されているPython の Web フレームワーク 「Django(ジャンゴ)」を題材に取り上げました。Djangoは特に、DX(デジタルトランスフォーメーション)の推進において、Web アプリケーションの開発基盤として最適な選択肢のひとつとされており、近年特に注目を集めています。

講演にはPython3エンジニア認定試験を提供しているPythonエンジニア育成推進協会の代表理事 吉政忠志氏が登壇し、PythonとDjangoの市場動向の解説と認定試験についてご紹介いただきました。

また、当社からはプリンシパル 小野とスペシャリスト 清家が登壇し、フレームワークの比較やDjangoの事例、テクニカル面についてお話しました。

セミナーには非常に多くの方にご参加いただき、盛況のうちに終了しました。受講された方のアンケートでは、実際に業務負荷の軽減のためにDjangoやPythonを使って開発・運用している中でのお困りごとについてご相談もいただき、関心度の高さを実感しています。

本稿では、セミナーの講演内容の概要を記載いたします。興味がある方はぜひご一読ください。

1.Python・Django市場動向と試験紹介

講演者:Pythonエンジニア育成推進協会 代表理事 吉政 忠志 氏

Pythonエンジニア育成推進協会では、PythonicやPythonZenを理解した健全なPython人材が育成を支援すべく、学習の指針となる試験(Python3エンジニア認定試験)と教材、スクールの認定を行っています。この認定試験は、経済産業省のITSSのISVマップと、厚生労働省の認定資格として位置付けられています。

Python市場動向

近年、Web分野でPythonを利用する方が非常に増えており、その傾向はデータからも伺うことができます。
具体的な調査データとしては日経XTECHの「プログラミング言語利用実態調査2024」(*1)で普及率と使用頻度において2年連続で2冠を達成、プログラミングコードの品質を評価するオランダの企業・TIOBEが毎月発表している開発者に人気のプログラミング言語ランキング「TIOBE Index」 (*2)でも1位を獲得しています。また、「経験者におすすめのプログラミング言語調査」、「将来性が高いプログラミング言語調査」、「学生がいま使用している言語調査」などでも1位を獲得しており、その注目度の高さがうかがえます。
さらに、この5年間でPython分野の求人は、Web関連で37%と5倍もの数値となっており分野別では最も多い割合となっています。
これはコロナ禍において、非対面セールスが注目された結果、Web経由でのお問合せ要望が増えたことに加え、DX推進によって、Web・Webアプリケーションから得たお問い合わせをMA(マーケティングオートメーション)で効率的な案件化や、基幹システムとの連携を行う企業が増えたことが関係しています。これらの流れから、DB連携に強いDjangoのニーズが増え、PythonのWebエンジニア求人が増えたと考えています。

(*1)日経クロステック
https://xtech.nikkei.com/atcl/nxt/column/18/03006/111400004/

(*2) TIOBE Index
https://www.tiobe.com/tiobe-index/

Python3エンジニア認定試験のご紹介

当協会が現在提供している試験は有料が4件、無料が1件です。各試験は全国にある試験センターで通年受験が可能です。選択式の出題となっており、設問40問に対し、70%以上の正解で合格となります。各試験の詳細や出題範囲についてはリンク先かセミナー資料をご参照ください。

当協会の試験は、プログラミングやデータ分析など、実際に手を動かしながら学ぶことを想定して作られた教材となっており、試験はそれが反映されたものになっています。
座学のみで学習して、合格を目指すのも良いと思いますが、できれば教材を読み、手を動かしながらノウハウを学び、試験に挑んで頂きたいと考えています。
受験に際して、参考になるコラムや合格体験記をWebサイトで公開しています。ぜひご一読ください。

コラム:https://www.pythonic-exam.com/archives/category/column

体験記:https://www.pythonic-exam.com/archives/category/success-story

またPythonにも各種コミュニティが存在します。私が実際に参加して面白いと感じたコミュニティやイベントは、PyCon JPPython BootcampStart Python ClubBP Studyです。 コミュニティに参加すると、学びがあるだけではなく、一緒に学習する仲間と出会うことができます。有料や無料のものもあれば、イベントやサークルなどさまざまなものがあります。気になるものがあればぜひ参加して、知見や交友関係を広げるきっかけにしてください。

2.DX系Python/Django 導入事例とフレームワーク比較

講演者:株式会社グローバルウェイ プリンシパル 小野 俊樹

本講演では、実際に9年前に対応した事例をもとにお話しました。

Perlで構築されたWebアプリケーションが抱えていた課題

9年ほど前、ある企業で運用されていたPerlで構築されたWebアプリケーションが、以下の課題を抱えていたため、リプレイスが検討されていました。

  • コードが複雑化し、人の入れ替わりにつれブラックボックス化していた
  • 可読性が低く、ドキュメントも不在だったため、メンテナンスコストがかかる
  • 仕様の理解からしなければならないため、追加開発のコストが大きくかかる
  • 開発速度が遅く、リリースの平均が1回/1ヵ月となっていた
  • 当時、Pealを経験しているエンジニアが国内にほぼおらず、エンジニアの確保に苦労した
  • 人員が入れ替わるたびに学習からスタートするため、品質に浮き沈みがでていた

リプレイス時に利用する言語とフレームワークの選定経緯

リプレイスにあたって、まずは使用する開発言語・フレームワークを選定することになりました候補としては、当時人気があったJava / Spring Boot、Ruby on Rails、Python / Djangoの3つに絞られていました。なお、Laravelも候補としては上がったものの、当時はエンタープライズでの実績が乏しかったため、除外されています。

選定はコードの可読性(メンテナンス性、開発効率)、将来性、処理速度の3つの観点で評価し、Webアプリケーションとして考えた場合、処理速度はJavaに劣るものの、ユーザーが気になるほどの遅さにはならないこと、また、開発者がストレスなく楽しく開発できること重視し、RubyとPythonに絞った後、Pythonの方が、将来性が高かったこと、一方でRubyは小規模プログラムには向いているものの、多人数での大規模プログラムではコードの可読性の低下につながってしまうことを考えPythonを最終的に選定することになりました。各言語の評価の詳細は下図または資料をご覧ください。

Python/Django によって構築したことによる恩恵

その後、Python/DjangoによってWebアプリケーションを構築し、9年たった今でも機能拡張を続けています。この9年の間に、 Python/Djangoを選択したことによる効果には以下のようなものがありました。

  • エンジニアの確保が容易
    Perlでは確保が難しかったエンジニアも、Pythonになったことで大きく改善されました。9年前はまだまだPython実績を持つエンジニアは少数で、JavaやPHPからのスキルトランスファーしながらの採用でしたが、最近では大分実績を持つエンジニアが増えました。Python人気は今後も高まっていくことが予測されるので、エンジニアの確保がしやすい状況が続くと期待されます。
  • 開発ライフサイクルが短くなり、顧客ニーズに素早く応えられる
    Perlの時代は1ヵ月に1回ペースであったリリースが週に1~2回ペースまで上がり、急な要件の依頼や変更にも対応できるようになりました。また、リプレイスしたことによりソースがホワイトボックス化し、コードの可読性があがったことで、1つあたりの開発コストも大幅に削減できました。
  • 大規模アプリケーション開発での品質が大きく向上
    人員の入れ替わりの度に不安定となっていた品質も、メンバーの違いによるコードの可読性も少なくなり安定するようになりました。また、ソースレビューにかかるコストも削減できました。

選定はDjangoで行いましたが、実際には当時、Django以外にFlaskの存在もありました。
補足情報として、それぞれの比較の説明も行っています。詳細は下図をご参照ください。

3.Djangoテクニカルハイライト

講演者:株式会社グローバルウェイ スペシャリスト 清家 悠

Djangoの設計パターンであるMVTアーキテクチャや、データベースのスキーマを管理するマイグレーション&ORM、画面表示に関するテンプレートエンジン、多言語対応、Webアプリケーションセキュリティ、サードパーティ製のライブラリを充実したエコシステムに関して説明しました。

Djangoの設計パターンであるMVTアーキテクチャとは?

MVTは、以下の3つで構成されています。

  • M(Model)
    主にデータベースとのやり取りを担当し、データベースの構造やデータ定義の管理を行う。また、ORM(Object-Relational Mapping)を利用して直接DBとやり取りを行える。
  • V(View)
    ユーザーからリクエストを受けとり、Modelから必要なデータを取得して、Templateに引き渡すというつなぎ的な役割を行う。
  • T(Template)
    HTMLなどの画面表示を担当する。テンプレートエンジンを利用して、Viewから渡されたデータを動的に処理し、ユーザーに画面を返すアーキテクチャ。

それぞれのアーキテクチャの処理フローは下図をご参照ください。

データベースのスキーマを管理するマイグレーション&ORM とは?

DjangoのORMを利用して、データベースの構造を変更管理するのがマイグレーションです。 ログインユーザーを管理する用のテーブルAccountsと、それに紐づくユーザー属性を管理する用のテーブルPeopleの2つを用意したPythonファイル「models.py」を使った例でご説明しました。

実際の開発では、通常DDLを流して作成することになりますが、Javaのマイグレーション機能では、作成しておいた「models.py」を使うことでテーブルを作成することができます。
その結果、DDLを主導で流す必要がなくなり、DBの変更や移行を簡単に行えるようになります。また、「models.py」で管理することで様々なデータをDBエンジンで使えるようになるため、PostgreSQL、MySQLなどでも統一的に使うことが可能です。作成したプログラムはGitなどのバージョン管理システム上でも管理できますので、どの環境でも同じように利用することができるという特徴を持ちます。
マイグレーションの処理フローは上図の右側をご確認ください。
「models.py」を変更した場合には、処理フローを改めて実行することでテーブルやカラムを作成することができます。
マイグレーションファイルは増えていくため、どのマイグレーションがいまDBに適用するのかを確認するのは③の手順に書かれているコマンドを実行することで確認することができます。

次に、models.pyを使って、SQLではなくPythonコードでデータを取得する方法です。

「models.py」にあるAccountsオブジェクトを使い、ORMでテーブルにアクセスするというのが右側の赤枠で囲んだ部分です。
この関数を実行するとAccountsテーブルに保存されているデータをすべて取得できます。Djangoのログ出力設定により、裏側で流れているSQLの確認もできます。実際には下枠にあるSELECT文で流れているという形です。

テンプレートエンジンとは?

Django TemplateはHTMLにPythonのロジックを埋め込んで動的なWebページを生成する仕組みです。
MTVアーキテクチャでいうと、ViewとTemplate間のやり方の部分です。
Django Templateの特徴については下図の左側をご覧ください。

次に具体的な利用方法で、右側の図をご確認ください。こちらはViewを使ってテンプレートを返すというサンプルコードです。
Viewのファイルでは、指定したTemplateファイルを宣言した後、「models.py」から取得したデータをTemplateに渡すための設定が書かれています。 Templateファイルでは、Viewから渡されたAccountsテーブルの一覧を表示させたい場合に、テンプレートタグのfor文を使ってDBに登録されているアカウントを1行ずつ取り出すという処理になっています。

Djangoを使った多言語対応

Djangoでは、多言語対応をブラウザの言語設定(Accept-Languageヘッダ)に基づいて自動的に翻訳することができます。

<翻訳ファイルの管理>
Djangoで実際に翻訳ファイルのディレクトリ(英訳・日本語訳)を用意し、poファイルを使って翻訳を書けることになります。それが上手の1と2です。
メッセージID(msgid)をキーとして、1には英語の翻訳ファイルのため、Welcomeというキーを渡せば、「Welcome」が表示されます。2は日本語の翻訳ファイルになりますので、Welcomeというキーが渡されれば、日本語で「ようこそ」と変換されて表示されます。

ただ、poファイルのままでは利用できないため、[compilemessages]コマンドでpoファイルをコンパイルして、テンプレートとして利用できるmoファイルを作成します。
テンプレートファイル内で実際にどのように記述するかは上図のサンプルをご覧ください。

<翻訳メッセージ>
実際にブラウザ内でどのように表示されるかをChromeの画面を例にしたのが上手の右側です。 この方式を利用すれば、英語と日本語以外の言語への対応も可能です。

Webアプリケーションのセキュリティ

Webアプリケーションにおいて必要な脆弱性への対策として、複数あるうちから今回はSQLインジェクションとクロスサイト・スクリプティングについてご説明しました。
Webアプリケーションがさらされている脅威のランキングがOWASPIPAで公開されていますので、詳細を知りたい方は各団体のWebページをご参照ください。

クロスサイト・スクリプティング

攻撃者が悪意のあるスクリプトを仕込んだWebサイトを用意し、利用者がクリックすることでスクリプトが実行され、脆弱性のあるWebサイトからログイン情報などのユーザー情報を抜き取り、第三者に渡ってしまう攻撃手法です。
Djangoではテンプレートの標準機能である自動エスケープを利用すれば対策することができます。
実際の適用方法は下図の右側をご参照ください。

SQLインジェクション

SQLの組み立て方法に脆弱性があることを利用した攻撃手法です。
例えば、入力項目に悪意のあるクエリを含んだ文字列を送信すると、サーバ側では開発者が予期せぬクエリが組み立てられ、セキュリティリスクのあるSQLが実行されてしまうというものです。結果、情報の改ざんや情報漏洩といったリスクに発展することがあります。
こちらもDjangoの標準機能であるORMを利用することでSQL生成時にエスケープ処理が行われるため、SQLインジェクションを防止できます。また、生SQLを使用されないようにするには、プレースホルダの仕組みを利用すれば対策が可能です。 詳細は下図、右側をご参照ください。

エコシステムについて

Djangoではさまざまな用途に応じて利用できるサードパーティ製のライブラリが充実しているため、機能拡張がしやすくなっています。
今回は3つの代表的なサードパーティ製ライブラリをご紹介しました。

  • Django Ninja
    DjangoとPython3.6以降の型ヒントを使用してAPIを開発するWEBフレームワークで、ASGIをベースに構築されているため軽量、かつ、高速に起動することができる。これが登場する前はDjango REST Frameworkが利用されていた。
  • gunicorn
    Djangoの本番環境で使用されるアプリケーションサーバで、軽量、かつ、高速に起動できる。マルチプロセスで並行リクエスト処理可能。
  • requests
    外部APIとの連携時、HTTP通信を必要とする場合に利用する。WEBスクレイピングによるデータ取得の場面でも活用できる。

用途に応じてサードパーティ製ライブラリを使用しますが、インストール時にはライブラリ管理ファイル(requirements.txt)に利用したいライブラリを記述し、インストールコマンド[pip install –r requirements.txt]を実行することでサードパーティ製ライブラリを取り込んで自由に使えるようにできます。

3.Q&A

講演終了後、ご質問をいただきました。またアンケートでもいくつかのご質問をいただいております。 こちらではご質問の一部をご紹介します。

Q. DjangoとFlask以外にFastAPIが今後伸びると思いますか?

A. FastAPIは後発のフレームワークであるため、優れた設計思想をもっており、今後伸びる可能性はあると思います。ただDjangoのフルスタックと比べると、どちらかと言えばFlask寄りのミニマルさに寄っている印象です。また、SPAへの強みがありますので、Djangoのプロジェクトでパフォーマンスがキーワードになり、SPAも検討するという流れになったときには有力な候補になると思います。
なお、最近出てきたDjango NinjaはFastAPIの思想に近いため、今後、FastAPI的な思想を持つものは他にも出てくると思います。

Q. Djangoの学習方法はどういった形式で学ぶのが適切ですか?

A. Djangoの公式チュートリアルで一通りの機能を含め、学ぶことはできると思います。当社でもまずは公式チュートリアルから学んでもらっています。 今後、当社でもDjango向けの勉強会の開催を検討していいく予定です。