【Python特化】おすすめのオンラインプログラミングスクール

【Python】Flaskとは?インストール方法から開発環境構築まで解説!

python-framework-is-flask

これからPythonフレームワークであるFlaskを始めたい初心者・入門者は、Flaskの実行環境を準備する必要があります。

そのために、Flaskのインストールのほかに実行環境構築も実施しなければ使えません。

ここでは、以下の悩みをお持ちの方に読み進めていただきたいです。

Flask実行環境構築の悩み
  • Flaskとは?
  • Flaskのインストール方法がわからない
  • インストール時の適切な設定がわからない
  • Flaskアプリケーションの実行環境を構築したい

これらの悩みを解決しながら、Flaskのインストールと設定・環境構築を解説します。

記事を読み終えると、Flaskのアプリケーション実行環境の構築まで準備できます。

目次

Flaskとは?

Flask(フラスク/フラスコ)は、Python製のマイクロWebフレームワークです。

Flaskは拡張性を持つ特徴があり、基本的に最低限の機能のみを提供するフレームワークになります。

必要に応じて様々な拡張機能を追加することで、小規模から大規模なWebアプリ開発まで多様なケースで利用できるよう設計されています。

なぜFlaskを使うのか?

時代の潮流として、2000~2010年代半ばまでWeb開発ではフルスタックフレームワークが人気でした。

一方で、近年マイクロサービス化が進み、フロントエンド技術が発展したことでサーバーサイドはAPI、フロントエンドはJavaScript(TypeScript)で実装するのが主流になりました。

そのため、Flaskのようなコンパクトで学習コストが低く利用しやすいフレームワークが求められた背景があります。

Flaskの特徴

ここでは、Flaskを中心に特徴をまとめています。

Flaskの特徴
  • 標準で提供する機能が最小限
  • 学習コストが低い(Python初心者もすぐに使える)
  • 拡張機能をサポートしており小規模WebアプリからWeb APIまで開発可能

特に、言語問わずプログラミング初心者であれば、PythonのFlaskから始めるのはおすすめフレームワークの一つです。

FlaskはMVTモデル(Model/View/Template)を採用

Flaskは、UIを持つアプリを実装するデザインパターンとしてMVTモデル(Model/View/Template)を採用してます。

Model/View/Templateは以下の役割を持ちます。

MVTの役割
  • Model:ロジックを担当
  • View:入力を受け取りModelとTemplateを制御
  • Template:入出力を担当

一般的に、MVCモデル(Model/View/Controller)が有名ですが、MVTのViewはMVCのControllerに相当し、MVTのTemplateはMVCのViewに相当します。

具体的なルーティングとして図解を記載しておきます。

FlaskにおけるModelの役割

FlaskにおいてModelは以下の役割を持ちます。

Modelの具体的な役割
  • データベースを作成する
  • データベースを操作する

つまり、Modelはデータベースのテーブルを定義することになります。

データベースを構築する際に必要な知識が以下の内容になります。

Modelに必要な基本知識
  • flask-sqlalchemy
  • flask-migrate
  • SQLite

Modelの作成方法やデータベース構築方法を具体的に知りたい人は、「【Flask】Webアプリ開発におけるModelの役割」を一読ください。

FlaskにおけるViewの役割

FlaskにおいてViewは以下の役割を持ちます。

Viewの具体的な役割
  • データベースを操作する
  • PRGに基づいてルーティングとテンプレートを制御する

つまり、ViewはModelとTemplateを制御することになります。

Viewを実装する際に必要な知識が以下の内容になります。

Viewに必要な基本知識
  • CRUD機能の理解
  • ルーティングの理解
  • PRG(Post/Redirect/Get)パターン
  • render_template
  • redirect
  • url_for
  • request

Viewの作成方法やデータベース/テンプレート制御を具体的に知りたい人は、「【Flask】Webアプリ開発におけるViewの役割」を一読ください。

FlaskにおけるTemplateの役割

FlaskにおいてTemplateは以下の役割を持ちます。

Templateの具体的な役割
  • ViewからTemplateへのデータの受け渡し
  • ルーティング情報に沿ったテンプレート作成(各ページ)
  • <a>タグ, <form>タグ, <button>タグが持つルートデザイン設計
  • CSSによるUI/UXを意識したデザイン調整

つまり、Templateはユーザー行動を意識したデザインを考慮することになります。

Templateを実装する際に必要な知識が以下の内容になります。

Templateの具体的な役割
  • ルーティングの理解
  • テンプレートエンジン(jinja2)の理解
  • 共通テンプレートと継承
  • データ出力のロジック設計

Templateの作成方法や共通化/継承など具体的に知りたい人は、「【Flask】Webアプリ開発におけるTemplateの役割」を一読ください。

Flask以外のPython製Webフレームワーク

Python製の代表的なWebフレームワークが存在します。

特に、Flaskと比較されるのが以下のDjango、Bottle、FastAPIです。

スクロールできます
フレームワーク公式サイト初回リリース時期
Flask(フラスク/フラスコ)https://palletsprojects.com/p/flask/2010年
Django(ジャンゴ)https://www.djangoproject.com/2005年
Bottle(ボトル)https://bottlepy.org/docs/dev/2009年
FastAPI(ファストエーピーアイ)https://fastapi.tiangolo.com/2018年
python製フレームワーク表

Flaskでできること

上述した通り、Flaskの特徴から小規模から中規模のアプリ開発に利用され、カスタマイズ性の高さがメリットです。

基本的に、機能別でアプリ開発を実施できるため、規模の小さい機能をつなぎ合わせ拡張していきます。

本サイトでは、FlaskによるWebアプリ開発のチュートリアルとして以下の開発記事があります。

FlaskによるWebアプリ開発のチュートリアル記事
  • flask-mailによるcontact-formアプリ
  • flask-loginによるログイン認証アプリ
  • 画像ファイルアップロード機能を実装した画像表示アプリ

flask-mailによるcontact-formアプリ

flask-request-and-redirect
flask-request-and-redirect
Flaskチュートリアルのまとめ
  • PRGパターン(POST/REDIRECT/GET)の理解
  • request, redirectモジュールの理解と使い方
  • formの使い方

特に、flsak-mailによるメール送信機能を実装してみたい人は「Flaskによるrequest・redirectを利用したformの使い方」を一読ください。

flask-loginによるログイン認証アプリ

flask-login
Flaskチュートリアルのまとめ
  • flask-loginの使い方を理解する
  • サインアップ/ログイン認証/ログアウト機能の実装方法を理解する
  • バリデーションチェックやデータベース操作を理解する

特に、flsak-loginによるログイン認証機能を実装してみたい人は「【Flask】flask-loginによるログイン機能を実装した認証アプリ開発」を一読ください。

画像ファイルアップロード機能を実装した画像表示アプリ

flask-image-file-upload
Flaskチュートリアルのまとめ
  • 画像ファイルアップロード機能の使い方を理解する
  • 画像と紐づくデータベース操作を理解する
  • 画像ファイルの表示方法と削除方法を理解する

特に、Webアプリ上での画像の扱い方を実装してみたい人は「【Flask】画像ファイルアップロード機能を実装した画像表示アプリ開発」を一読ください。

Flaskを利用するためのPython環境構築

PythonのWebフレームワークであるFlaskを利用するには、開発におけるPythonの環境構築が必要です。

Pythonの開発環境を構築するために、以下の手順を示します。

Flaskを利用するためのPython環境構築手順
  1. Pythonのダウンロードとインストール
  2. VSCode(Visual Studio Code)のインストール
  3. Flaskのインストール

本記事では、Flaskのインストールからメインに記載しておりますが、PythonとVSCodeインストールがまだできていない人は「【Python】ダウンロードとインストール方法から環境構築まで解説!」を一読ください。

Pythonにてローカル環境に仮想環境を作成する

Pythonで開発を実施する際、開発プロジェクトごとに専用の実行環境を作成し切り替えることができます。

また、開発用として一時的に作成する実行環境を「仮想環境」と呼びます。

ローカル環境で開発を進めるにあたり、venvモジュールを利用し仮想環境を構築します。

venvは、Pythonに標準搭載された仮想環境用モジュールです。

venvを利用することで、プロジェクトごとに分離したPython実行環境を構築できるため、各実行環境でそれぞれのパッケージを管理できます。

Pythonによる仮想環境の構築方法が知りたい人は、「【Python】ダウンロードとインストール方法から環境構築まで解説!」を一読ください。

Flaskのインストール

本記事では、WindowsPCによる任意のディレクトリにて「flask-project」を作成しています。

インストール自体は簡単で、以下のコマンドを実行しましょう。

pip install flask

上記のコマンドを実行すると、インストールが完了します。

Flaskが依存しているパッケージ

Flaskをインストールすると、Flaskが依存しているパッケージも同時にインストールされます。

また、インストールされたパッケージを確認するには、以下のコマンドで確認できます。

pip list

Flaskをインストールすることで同時にインストールされるパッケージは以下です。

スクロールできます
パッケージ説明
clickコマンドライン用のフレームワークでFlaskのカスタムコマンドを使う際に利用する。
itsdangerous安全にデータを署名しデータの整合性を確保する。
FlaskのセッションやCookieを保護するために利用される。
jinja2デフォルトのHTMLテンプレートエンジン。
別のテンプレートエンジンも使用可能。
MarkupSafeインジェクション攻撃を回避するために、テンプレートをレンダリングする際に信頼できない入力をエスケープする。
WerkzeugWSGIツールキットでFlaskのコア実装はWerkzeugを基に作られている。
flaskが依存しているパッケージ一覧

Flaskで利用する代表的なモジュール

Flaskでは、標準で以下の代表的なモジュールが利用できます。

Flaskの代表的なモジュール
  • current_app
  • flash
  • g
  • make_response
  • redirect
  • request
  • render_template
  • send_file
  • send_from_directory
  • url_for

Flaskで様々な機能を実現する場合は、拡張機能をインストールする必要があります。

拡張機能で利用したいFlaskパッケージについては、以下サイトで検索してみるとよいです。

Flaskの主なコマンド

Flaskをインストールすると、flaskコマンドが利用できます。

flaskまたはflask –helpコマンドでオプションを確認できます。

また、以下がflaskの主なコマンドになります。

スクロールできます
コマンド説明
flask run開発時にFlaskの組み込みサーバーを実行するためのコマンド
flask routesアプリのルーティング情報を出力するコマンド
flask shellPythonインタラクティブシェルを使う場合に利用するコマンド
flaskの主なコマンド表

特に、flask runコマンドとflask routesコマンドを詳細に解説します。

flask runコマンド

flask runコマンドは、開発時にFlaskの組み込みサーバーを実行するコマンドであり、多くのオプションが存在します。

flask runコマンドの主なオプション内容は以下です。

スクロールできます
オプション内容
flask run -hまたは–hostホストを指定する。
flask run -pまたは–portポートを指定する。
flask run –reloadまたは–no-reloadオートリロードをオン/オフする。
コード編集時に自動反映したい場合はオンにする。
デバックモード時はデフォルトでオンになる。
flask run –debuggerまたは–no-debuggerデバッガーをオン/オフする。
デバッグモード時はデフォルトでオンになる。
flask run –helpコマンドオプションを表示する。
flask runコマンドのオプション表

flask routesコマンド

flask routesコマンドは、アプリのルーティング情報を出力するコマンドです。

ルーティングとは、リクエスト先のURLと処理する関数を紐づける作業を指します。

flask routesコマンドを実行すると、追加したルートの紐づけ情報が確認できます。(Flaskアプリが存在しないと実行できない。)

flask routesコマンドの実行結果で出力される項目は以下です。

スクロールできます
項目説明
EndpointURLにアクセスされた際に実行する関数または指定した名前。
staticは静的ファイル用のエンドポイントが常に固定で存在する。
Methodsアクセス許可するHTTPメソッド。
指定がない場合はGETがデフォルトになる。
RuleアクセスするURLのルール。
flask routesコマンドで表示される項目表

Flaskの実装

本記事では、Flaskの利用する目的のみで最小限のアプリケーションを実装し実行まで行います。

そのため、以下が本アプリの構成ファイルになります。

flask-project
└── app.py

上記の構成ファイルをもとに、最小限のFlaskアプリケーションを開発するため、任意のディレクトリにてフォルダおよびファイルを作成してください。

app.pyの実装

VSCodeにて、app.pyを作成し、実装を行うためファイルを開きます。

# Flaskをimport
from flask import Flask

# Flaskクラスをインスタンス化
app = Flask(__name__)

上記では、flaskをインポートしています。

また、本来インスタンス化することで直接オブジェクトに触れず、データの衝突を防ぐことができます。

# URLと実行する関数をマッピング
@app.route("/")
def index():
    return 'Hello World!'

Flaskでは、関数の先頭にデコレータと呼ばれる関数@app.route()を記述することで、ルートを追加できます。

上記では、@app.route(“/”)デコレータはindex関数をアプリケーションのURL(パス)/にマッピングしています。

app.py
# Flaskをimport
from flask import Flask

# Flaskクラスをインスタンス化
app = Flask(__name__)

# URLと実行する関数をマッピング
@app.route("/")
def index():
    return 'Hello World!'

flask runコマンドの実行

ターミナル(あるいはVSCode内のターミナル)にて、任意のディレクトリでflask runコマンドを実行します。

ターミナル上で実行すると、以下の実行結果が返ってきます。

PS C:\Users\sugir\documents\application\flask-project> flask run --debug
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 116-480-154

WARNINGに関しては、開発サーバーであることを知らせているだけなので特に気にする必要はありません。

デバッガーモードをオンにしたい場合は、flask run –debugを実行してください。

上記のコマンドを実行した際に表示されるURL:http://127.0.0.1:5000をブラウザのバーに入力してください。

画像のように、左上に「Hello World!」が表示されていれば問題なく起動完了です。

FlaskによるWebアプリ開発の基本知識

Webアプリ開発を実施する上で、むやみやたらにコーディングすることはお勧めしません。

なぜなら、ディレクトリや格納ファイルの管理、1ファイル内の冗長化したコード管理などアプリの拡張性に影響を及ぼすからです。

そのため、Flaskの基本的なディレクトリ構成(MVTモデル)を理解しておきましょう。

以下は、Flaskにおける基本的なディレクトリ構成例になります。

flask-project
├── .env
└── apps
    ├── app.py
    ├── config.py
    ├── static
    │   └── bootstrap.min.css
    └── auth
        ├── __init__.py
        ├── forms.py
        ├── models.py
        ├── static/css
        │   └── style.css
        ├── templates
        │   └── auth
        │       ├── base.html
        │       ├── index.html
        │       ├── login.html
        │       └── signup.html
        └── views.py

上記のディレクトリ構成は認証アプリを想定しています。

各ディレクトリに格納されているファイルは開発者によって異なる場合があります。

ディレクトリ構成
  • flask-project:開発用ディレクトリ名
  • apps:格納されたアプリを管理するディレクトリ
  • static:静的ファイルのディレクトリ
  • auth:認証アプリの関連ファイルを格納したディレクトリ
  • templates:HTMLファイルを格納したディレクトリ

各ファイルをMVTモデルに沿って仕分けると以下になります。

制御関連ファイル
  • Model:models.py
  • View:views.py
  • Template:css, htmlファイル

上記のように、役割に応じてディレクトリ構造とファイル配置によって記述するコードを限定化します。

また、FlaskにおけるWebアプリ開発の基本知識は他にも存在します。

FlaskにおけるWebアプリ開発の基本知識
  • Blueprint
  • ルーティング
  • テンプレート

上記の基本知識は、Flaskに限らずWebアプリ開発で重要になります。

Blueprintとは

Blueprintとは、アプリケーションを分割するためのFlaskの拡張機能です。

Blueprintは、次のような特徴があります。

Blueprintの特徴
  • アプリケーションを分割できる
  • url_prefix, subdomainを指定しアプリケーションルートを区別できる
  • Blueprint単位でテンプレートを分けられる
  • Blueprint単位で静的ファイルを分けられる

Blueprintを利用すると、アプリケーション全体が大規模になっても簡潔な状態を保ち、アプリの保守性が向上します。

また、アプリを分割しているため1ファイルにおけるコードの可読性も高めます。

そのため、Blueprintを活用することでアプリケーション開発時に以下のメリットが享受できます。

Blueprintのメリット
  • アプリケーション全体の保守性向上
  • 1ファイルにおけるコードの可読性向上

ディレクトリ構成が可視化しやすいため、開発効率も高まるメリットがあります。

Blueprintによるアプリ分割

例として、以下のディレクトリ構成を想定します。

flask-project
├── .env
├── apps
│   ├── app.py
│   ├── config.py
│   ├── static
│   │   └── bootstrap.min.css
│   ├── auth ← blueprintアプリ
│   │   ├── __init__.py
│   │   ├── forms.py
│   │   ├── models.py
│   │   ├── static/css
│   │   │   └── style.css
│   │   ├── templates
│   │   │   └── auth
│   │   │       ├── base.html
│   │   │       ├── index.html
│   │   │       ├── login.html
│   │   │       └── signup.html
│   │   └── views.py
│   └── todo ← blueprintアプリ
│       ├── __init__.py
│       ├── forms.py
│       ├── models.py
│       ├── static
│       │   └── style.css
│       ├── templates
│       │   └── todo
│       │       ├── base.html
│       │       ├── index.html
│       │       ├── todo_create.html
│       │       ├── todo_edit.html
│       │       ├── todo_done.html
│       │       └── todo_delete.html
│       └── views.py
├── local.sqlite
└── migrations

authディレクトリ(認証アプリ)、todoディレクトリ(ToDoアプリ)の構成になります。

開発側は、Blueprintを利用することで独立したアプリ開発が可能になります。

ユーザー側は、認証機能を持ったToDoアプリといったように一つのアプリとして認識できます。

FlaskにおけるBlueprintの使い方や具体的な実装方法を知りたい人は、「【Flask】Blueprintとは?使い方と実装方法を解説」を一読ください。

ルーティングとは

Flaskにてルーティングを利用する場合、以下の基本的な使い方を理解しましょう。

Flaskにおけるルーティングの使い方
  • ルーティングを設定する
  • flask routesコマンドでルーティング情報を確認する
  • FlaskのEndpoint(エンドポイント)を設定する
  • Ruleに変数を設定する

FlaskのViewとTemplateを理解するために「ルーティング」を知りたい人は「【Python】Flaskによるルーティングの利用方法とテンプレート活用」を一読ください。

テンプレートとは

Flaskにてテンプレートを利用する場合、以下の基本的な使い方を理解しましょう。

Flaskのテンプレートにおける使い方
  • テンプレートエンジンを利用する
  • テンプレート(templates)を作成する
  • Jinja2の基本的な使い方を理解する

FlaskのViewとTemplateを理解するために「テンプレート」を知りたい人は「【Python】Flaskによるルーティングの利用方法とテンプレート活用」を一読ください。

本格的にエンジニアへのキャリアチェンジを考えてる人へ

プログラミングスキルを社内やプライベートで活用している人が増えています。

▼プログラミングスキルの活用事例
  • 一部業務プロセスの効率化/自動化
  • 分析システム構築による担当業務改善
  • 社内公開によるチーム/プロジェクトの業務時間短縮

Pythonは特にデータ収集や分析に特化したライブラリが豊富なため、業務プロセスの一元管理やDX化に貢献しています。

また、プログラミングに触れてエンジニアへのキャリアチェンジを実現したい人の人材規模も年々高まっています。

一度、あなたのキャリアプランを振り返ってみてください。

▼現在の状況を考える質問
  • 収入アップが見込めている
  • キャリアアップが見込めている
  • 働き方を明確に決めれている

上記の項目をYESと答えられる人は、特に言うことはありません。

現在、エンジニアへのキャリアチェンジでお悩みの方は、「【Python特化】厳選したおすすめプログラミングスクール」を一読ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

sugiのアバター sugi SUGI

【経歴】玉川大学工学部卒業→新卒SIer企業入社→2年半後に独立→プログラミングスクール運営/受託案件→フリーランスエンジニア&SEOコンサル→Python特化のコンテンツサイトJob Code運営中

コメント

コメントする

目次