【Python】FlaskでWebアプリケーションを作る② -ディレクトリ構成

前回はFlaskでシンプルなWebアプリケーションを作成しました。

以降もう少し複雑なWebアプリケーションを作っていこうと思いますが、今回はそのWebアプリケーションのディレクトリ構成についてです。

Flaskでは、決まったディレクトリ構造を持っていないため、目的に沿って自由に構成を決めることができます。一方で、ルールがない故に、プロジェクトで複数人開発する際には支障にもなりかねません。

今回はFlaskでWebアプリケーションを作るときのディレクトリ構成について見ていこうと思います。

動作環境

今回の動作環境は以下の通りです。

  • Windows10
  • Python 3.8.3
  • flask 1.1.2

前提

作成するプロジェクトの規模によってディレクトリ構成を考慮する必要がありますが、今回は比較的小規模なWebアプリケーションを想定し、必要最小限の構成で見ていこうと思います。

ディレクトリ構成

超最小構成

まずは超最小のFlaskディレクトリ構成です。main.pyがあればWebアプリケーションを起動することができます(前回記事の例)が、実用的な最小構成を考えます。

sample_app
│
├─main.py
│
├─static
│      index.css
│      sample.css
│
└─templates
        index.html
        sample.html

/static

JavascriptやCSS、画像ファイルといった静的ファイルを格納するディレクトリです。

/templates

HTMLファイルを格納するディレクトリです。

このstaticやtemplatesという名称は原則デフォルトで決まっており、この名前を変える場合はプログラム内で別途指定する必要があります。これだけの構成があれば、最低限のWebアプリケーションが作れるはずです。

ちょっと複雑なアプリケーションの構成

上記の構成では、プログラムの処理ロジックをメインのスクリプトに書く必要があり、冗長になってしまいます。なので、処理スクリプトを置くフォルダを作ります。

また、データベースに接続してデータを読み書きすることも多々あると思います。DB含め共通設定を定義したファイルと、読み込んだ定義のモデル定義をするためのフォルダも作ってみます。

sample_app
│
│  main.py
│  requirements.py
│  settings.py
│
├─common
│  └─models
│       models.py
│       crud.py
│
│
├─controllers
│       index.py
│       sample.py
│
├─static
│      index.css
│      sample.css
│
└─templates
        index.html
        sample.html

requirements.py

このファイルには、アプリケーションで必要なライブラリの一覧を記載します。ライブラリ一覧のバックアップという側面のほか、サーバ移行等で環境を移す際に役に立ちます(記載したライブラリをまとめてインストールできる)

settings.py

アプリケーションで共通して利用する共通項目を定義しておくためのファイルです。DBの接続情報や環境変数、その他プログラムから外出しで管理すべき値を格納しておきます。

/common/models

ここではDBの接続処理やテーブル定義、CRUD操作に関するスクリプトを管理します。

/controllers

ここにはアプリケーションの実際の処理を書いていきます。Webアプリケーションに限らずですが、機能ごとにファイルを分けたりするのが一般的です。

まとめ

FlaskでWebアプリケーションを作るときのフォルダ構成についてまとめてみました。これくらいの構成であれば、簡単なアプリケーションであれば事足りるのではと思います。

今回は構成だけだったので、具体的にそれぞれどんな処理を書けばいいのかというところは次回以降に記事にしていこうと思います。

ではでは👋