Hello Flask!

さらっとだけ触ってみたのでメモ

とりあえず起動してみる

pyenv、poetryを使って、Hello Flask!

# プロジェクトを作成し、その中に移動
mkdir sample
cd sample

# ローカルで使用するPythonのバージョンを指定
pyenv local 3.9.7

# 対話無しデフォのpyproject.toml作成  
poetry init --no-interaction

# flaskを追加
poetry add flask

引数無しの poetry init を実行すると

This command will guide you through creating your pyproject.toml config.
Package name [sample]:
Version[0.1.0]:
Description []:
Author [None, n to skip]:
License []:
Compatible Python versions [>=3.9]: 
Would you like to define your main dependencies interactively? (yes/no) [yes] 
Would you like to define your development dependencies interactively? (yes/no) [yes] 

AuthorはNone、Would you~は、Noで他はEnterで
pyproject.tomlの中身

[project]
name = "sample"
version = "0.1.0"
description = ""
authors = [
    {name = "Your Name",email = "you@example.com"}
]
readme = "README.md"
requires-python = ">=3.9"
dependencies = [
]


[build-system]
requires = ["poetry-core>=2.0.0,<3.0.0"]
build-backend = "poetry.core.masonry.api"

ちょっと学習のためコードかくためくらいであれば、都度tomlを作りこむ必要もないので、対話せずにデフォルトのファイルを作ってもらうのが以下
poetry init --no-interaction

とりあえずapp.pyを作成

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello Flask!!"

if __name__ == "__main__":
    app.run()
# poetry 2.0以降はshellがデフォルトでは使えないとのことで追加
poetry self add poetry-plugin-shell

# shellに入る
poetry shell

# 実行
python app.py

実行すると http://127.0.0.1:5000 として実行される
止めたければ Ctrl + C

shell からぬけるには、 exit か Ctrl+D

shellを使わないのであれば
poetry run python app.pyで実行(都度poetry run をつける)

あらためてapp.pyを読んでみる

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello Flask!!"

if __name__ == "__main__":
    app.run()
from flask import Flask

flaskパッケージのFlaskクラスを使用する

参考…importしたものが何なのか調べたければ print(type(Flask)) みたいに書いて出力させれば・・・
<class 'type'> このような出力が得られるます

app = Flask(__name__)

テンプレート、静的ファイルなどのリソースを探す場所をFlaskに教えるもの

@app.route("/")

関数の前につけることで、このルートを指定されたら実行してくださいという指示をしています
デコレータと呼ぶらしい。

C# Asp.netだと関数の前にRouteのアノテーションを指定した場合と一緒ですね

[Route("/")]
public IActionResult hello(){
}
if __name__ == "__main__":
    app.run()

開発サーバーでflaskアプリを起動
本番であれば、本稼働用のWSGIサーバーを使用することになるが、これをかいておくのも一つの手 debugモード(エラーがあった場合画面で表示)で実行するなら

if __name__ == "__main__":
    app.run(debug=True)

起動方法

shellに移動し、python app.py で実行したが shellに移動せずに、poetry run python app.pyでもよいし
poetry fun flask run のようにflask runで実行でもよい 補足・・・flask runの場合以下は不要

if __name__ == '__main__':
    app.run()

flask runの場合、ターミナルのカレントにあるソースに起点が存在していないと見つけられないといわれてしまう つまり、静的ファイルやら他のものもあり、ソースをフォルダ階層で分けた場合の話
apps/app.py のように分けましたとなるとルート階層でflask run と書いても実行されない。

poetry run python apps\app.py のように明示的にパスを含めて実行するか
フォルダを移動し、appsに入ってから poetry run flask run とするか

環境変数 FLASK_APP にアプリの場所を設定し それをもとに実行してもらう

$env:FLASK_APP = ".\apps\app.py"

powershellならこんな感じ。セッション中のみ有効な環境変数設定なのでターミナル抜ければ消えます

これがあれば poetry run flask run でも実行できます

ちなみに、 FLASK_ENVにdevelopmentを指定しておけば、デバッグモードとして実行になる

$env:FLASK_ENV = "development"

ホットリロード

DEVELOPMENTだとホットリロードが有効だと思っていたのだけど
flask runの起動時のログをみると

 * Debug mode: off
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

Debug modeのon offと Develomentはまた別物とのこと。
FLASK_ENVにdevelopmentを指定するとその両方が切り替わるはずだが・・・

生成AIの見解。

Flask 2.3 からは FLASK_ENV の使用は非推奨 になっています。

代わりに:

flask --app apps.app --debug run

とのこと

最終的に…

いろんなことを考慮していくと、楽に起動できるということと起動方法の選択しを広げた感じにするなら・・・

こんな手順でしょうか

# プロジェクト作成
mkdir sample
cd sample

#ここでは3.9.7をつかうとする 

pyenv local 3.9.7
poetry init --no-interaction

poetry add flask

# フォルダ分けしたくなった場合を考慮していったんフォルダに入れた場合でも実行できることを考えてみる
mkdir apps

.\apps\app.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello, Flask!"


if __name__ == '__main__':
    # これは開発サーバー専用。デプロイ時は使われないので記載してあっても問題なし
    app.run(debug=True)
# shellが楽なので使いたい
poetry self add poetry-plugin-shell
poetry shell
flask --app apps.app --debug run

flask run じゃなくとも python .\apps\app.pyでも動く

リンク

公式サイト https://flask.palletsprojects.com/en/stable/

有志による日本語訳サイト
https://msiz07-flask-docs-ja.readthedocs.io/ja/latest/

ソースが気になる場合

flaskがきになる・・となった場合
公式のGitHubを見に行くか https://github.com/pallets/flask

flaskのクラスであれば
https://github.com/pallets/flask/blob/main/src/flask/app.py

poetryでローカルにインストールしたソースをみるのであれば・・・
poetry env info --path でローカルのパスを調べて
Libフォルダ内にあるflaskの中を見に行く

投稿日時: 2025-05-30 13:59:30
更新日時: 2025-06-01 08:17:01

内部リンク

Comment

最近の投稿

最近のコメント

タグ

アーカイブ

その他