FlaskでWebアプリケーションを開発する際、ディレクトリ構成のルールを理解しておくことは非常に重要です。適切な構成にすることで、コードの可読性・保守性が向上し、チーム開発もスムーズに進められます。
この記事では、Flaskにおけるディレクトリ構成の考え方と、具体的な構成例を紹介します。
ディレクトリ構成を統一する理由
Flaskには推奨されるディレクトリ構成のルールがあります。このルールに従うことで、以下のメリットが得られます。
- 可読性の向上: ファイルの役割が明確になり、コードの全体像を把握しやすくなる
- チーム開発の効率化: 共通のルールに従うことで、メンバー間の認識のズレを防げる
- 保守性の向上: 機能ごとにファイルが分離されるため、変更の影響範囲を限定できる
- フレームワークとの統合: Flaskがデフォルトで参照するディレクトリ名に合わせることで、余計な設定が不要になる
特にチーム開発では、ディレクトリ構成がバラバラだとマージ時にコンフリクトが発生しやすくなります。標準的なルールをあらかじめ決めておくことで、こうした問題を未然に防げます。
ディレクトリ構成
最小構成
前回の記事ではmain.pyだけでWebアプリケーションを起動しましたが、実用的な最小構成は以下のようになります。
sample_app
│
├─main.py
│
├─static
│ index.css
│ sample.css
│
└─templates
index.html
sample.html/static
JavaScriptやCSS、画像ファイルといった静的ファイルを格納するディレクトリです。ブラウザが直接読み込むファイルをここに配置します。
/templates
HTMLファイル(テンプレート)を格納するディレクトリです。Flaskのテンプレートエンジン(Jinja2)で処理されるHTMLファイルをここに配置します。
ポイント:
staticとtemplatesという名称はFlaskのデフォルト設定で決められています。これら以外の名称を使いたい場合は、Flask()のコンストラクタで別途指定する必要があります。
実用的なアプリケーションの構成
最小構成では処理ロジックをすべてmain.pyに記述する必要があり、コードが肥大化しやすくなります。実用的なアプリケーションでは、役割ごとにファイルを分離した構成が推奨されます。
sample_app
│
│ main.py
│ requirements.txt
│ settings.py
│
├─common
│ └─models
│ models.py
│ crud.py
│
├─controllers
│ index.py
│ sample.py
│
├─static
│ index.css
│ sample.css
│
└─templates
index.html
sample.html各ファイル・ディレクトリの役割は以下の通りです。
main.py
アプリケーションのエントリーポイントです。Flaskインスタンスの生成、ルーティングの登録、サーバの起動などを行います。
requirements.txt
アプリケーションで必要なライブラリの一覧を記載するファイルです。pip freeze > requirements.txtで生成でき、pip install -r requirements.txtでまとめてインストールできます。環境の再現やサーバ移行時に役立ちます。
settings.py
データベースの接続情報や環境変数など、アプリケーション全体で共通して利用する設定値を定義するファイルです。設定をプログラムコードから分離して管理することで、環境ごと(開発・本番など)の切り替えが容易になります。
/common/models
データベースの接続処理、テーブル定義(モデル)、CRUD操作に関するスクリプトを管理するディレクトリです。データアクセス層を分離することで、ビジネスロジックとの責務を明確に分けられます。
/controllers
アプリケーションの実際のビジネスロジックを記述するディレクトリです。機能ごとにファイルを分けるのが一般的です。たとえば、トップページの処理はindex.py、サンプルページの処理はsample.pyのように分割します。
構成を決めるときのポイント
ディレクトリ構成は、開発するアプリケーションの規模や要件に応じて柔軟に調整します。以下のポイントを意識すると、適切な構成が見えてきます。
- 必要な機能を洗い出す: どのようなページや処理が必要かを整理する
- 責務ごとに分離する: 表示(テンプレート)、ロジック(コントローラー)、データ(モデル)を分ける
- 拡張性を考慮する: 将来的な機能追加を見据えた構成にする
複数の役割を1つのファイルに集約してしまうと、コードの可読性・保守性が低下します。「1ファイル1責務」を意識して構成を設計しましょう。
まとめ
この記事では、Flaskアプリケーションのディレクトリ構成について解説しました。
- Flaskには
static(静的ファイル)とtemplates(HTML)のデフォルトディレクトリがある - 実用的なアプリケーションでは、
controllersやmodelsなどで役割ごとにファイルを分離する requirements.txtやsettings.pyで依存関係や設定を一元管理する- チーム開発では構成ルールの統一が特に重要
次回は、Flaskのルーティングについて詳しく解説します。