【ITニュース解説】Django Project & App Structure Explained
2025年09月28日に「Dev.to」が公開したITニュース「Django Project & App Structure Explained」について初心者にもわかりやすく解説しています。
ITニュース概要
DjangoのWebアプリ開発における「プロジェクト」と「アプリ」の構造を解説する。主要ファイルの役割から、アプリ作成、ビュー・URL・テンプレート設定、データベース設定、サーバー起動まで、簡単なWebページ表示までの手順を紹介する。
ITニュース解説
DjangoはWebアプリケーションを効率的に開発するための強力なフレームワークであり、コードの保守性を高めるために「プロジェクト」と「アプリ」という明確な構造を持っている。システムエンジニアを目指す上で、この構造を理解することはDjangoを用いた開発の第一歩となる。
まず、「プロジェクト」と「アプリ」の基本的な違いを説明する。プロジェクトは、Webサイト全体の大きな枠組みを指す。これは設定、全体的なURLルーティング、およびその他のシステム全体の構成要素を保持するコンテナのようなものだ。
一方、アプリはプロジェクトの中に含まれる特定の機能を持った独立したモジュールである。例えば、ブログ機能、ユーザー認証機能、決済機能、商品表示機能といった、Webサイトを構成する個々の部品がアプリに相当する。一つのプロジェクトの中に複数のアプリが存在し、それぞれのアプリが特定の役割を分担することで、コードは整理され、再利用しやすくなる。例えば、「mysite」というプロジェクトの中に、「blog」というアプリや「users」というアプリ、あるいは「products」というアプリがある、といった具合だ。
Djangoプロジェクトを新しく作成する際には、django-admin startproject mysiteというコマンドを実行する。これにより、「mysite/」というディレクトリが作成され、その中にいくつかの重要なファイルやディレクトリが配置される。
主要なファイルは以下の通りだ。
manage.py: このファイルは、開発者がDjangoプロジェクトを操作するためのコマンドラインツールである。サーバーの起動、新しいアプリの作成、データベースの変更を適用するマイグレーションの実行、Djangoシェルを開くといった多岐にわたる操作をこのファイルを通じて行うことができる。
プロジェクト名と同じ名前のディレクトリ(この例ではmysite/)の中には、プロジェクトの核となる設定ファイル群が置かれている。
__init__.py: このファイルは、Pythonがこのディレクトリをパッケージとして認識するために必要である。
asgi.pyとwsgi.py: これらは、プロジェクトを本番環境のサーバーにデプロイする際のエントリポイントとなるファイルだ。WebサーバーがDjangoアプリケーションと通信するためのインターフェースとして機能する。
settings.py: プロジェクトの中心的な設定ファイルである。データベース接続情報、インストールされているアプリのリスト、ミドルウェアの設定、セキュリティキーといった、プロジェクト全体の振る舞いを決定する重要な情報がここに集約されている。
urls.py: プロジェクトのメインのURLルーターだ。ユーザーがWebブラウザでアクセスするURLパスと、そのリクエストを処理するPythonの関数(ビュー)とのマッピングを定義する。
次に、このプロジェクト内に「blog」という名前の新しいアプリを作成する手順を見てみよう。python manage.py startapp blogというコマンドを実行すると、「blog/」というディレクトリが作成され、その中にアプリ固有のファイル群が生成される。
アプリの主要なファイルは以下の通りだ。
admin.py: Djangoには強力な管理サイトが組み込まれており、このファイルで管理サイトに表示するモデル(データベーステーブル)を登録する。
apps.py: アプリ固有の設定を記述する場所だが、通常はデフォルトのままで問題ないことが多い。
migrations/: データベースのスキーマ(テーブルの構造)に対する変更履歴を管理するディレクトリだ。データベースに変更を加えるたびに、ここに新しいマイグレーションファイルが生成される。
models.py: データベースのテーブル定義をPythonのクラスとして記述するファイルだ。これにより、データベースを直接操作することなく、Pythonオブジェクトとしてデータを扱うことができる。
tests.py: アプリの機能が正しく動作するかどうかを確認するためのテストコードを記述するファイルだ。
views.py: ユーザーからのリクエストを受け取り、そのリクエストに応じて何らかの処理を行い、最終的にWebページやデータを返すためのロジックを記述する。例えば、ブログの投稿一覧を表示する、特定の記事の詳細を表示するといった処理がここで行われる。
新しいアプリを作成したら、そのアプリをプロジェクトに認識させる必要がある。これは、プロジェクトのsettings.pyファイルを開き、INSTALLED_APPSというリストに新しく作成したアプリの名前(例では'blog')を追加することで行う。これにより、Djangoはそのアプリの存在を認識し、そのアプリの機能を利用できるようになる。
Webページを表示するためには、URLとビューを結びつける必要がある。まず、blog/views.pyにhomeという名前のビュー関数を定義する。この関数は、ユーザーからのリクエストを受け取り、render関数を使ってHTMLテンプレートをWebブラウザに返す役割を担う。次に、blogアプリのディレクトリ内にurls.pyという新しいファイルを作成する。このファイルには、urlpatternsというリストを定義し、URLパス(例: ''でアプリのルート)と、対応するビュー関数(例: views.home)をマッピングする。
最後に、このアプリ固有のURL設定をプロジェクト全体のURL設定に組み込む必要がある。プロジェクトのmysite/urls.pyファイルを開き、path('blog/', include('blog.urls'))のように、アプリのURLパターンをプロジェクトのURLに含める設定を追加する。これにより、例えばhttp://localhost:8000/blog/というURLにアクセスがあった場合に、そのリクエストがblogアプリのurls.pyに定義されたURLパターンにルーティングされるようになる。
ユーザーに表示するWebページの見た目を定義するのが「テンプレート」だ。Djangoでは、アプリのディレクトリ内にtemplates/というサブディレクトリを作成し、さらにその中にアプリ名と同じ名前のサブディレクトリ(例: blog/templates/blog/)を作成し、そこにHTMLファイル(例: home.html)を配置するのが一般的な方法である。このように配置することで、render(request, 'blog/home.html')のようにテンプレートを指定した際に、Djangoは自動的にそのファイルを見つけることができる。このテンプレートの場所を見つける仕組みは、settings.pyのTEMPLATES設定にあるAPP_DIRS=Trueという設定によって有効になっている。
Webアプリケーションにおいてデータは非常に重要だ。Djangoでは、データベースのテーブル構造を定義するためにmodels.pyファイルを使用するが、実際にデータベースにその構造を反映させるには「マイグレーション」という手順が必要だ。python manage.py migrateコマンドを実行することで、Djangoが提供するデフォルトの機能(ユーザー認証システムなど)や、開発者が定義したモデルに対応するデータベーステーブルが作成されたり、既存のテーブルに変更が適用されたりする。
すべての設定が完了したら、python manage.py runserverコマンドを実行して開発サーバーを起動する。これにより、ローカル環境でWebアプリケーションが動作し始め、Webブラウザから指定されたURLにアクセスすることで、作成したページが表示されることを確認できる。
このように、Djangoはプロジェクトとアプリという明確な役割分担によって、大規模なWebアプリケーションでも整理されたコードベースを維持しやすくしている。各ファイルの役割を理解し、この構造に従って開発を進めることで、効率的で保守性の高いWebアプリケーションを構築する基礎を学ぶことができる。