ITや趣味など気軽に投稿しています。

【Python】FlaskでWebアプリケーションを作る① -Webサーバを起動する

Flaskは、Pythonで実装された軽量なWebアプリケーションフレームワークです。シンプルなAPIで素早くWebアプリケーションを構築でき、必要に応じて拡張も可能な柔軟性を備えています。

この記事では、Flaskの基本的な概念と、最小コードでWebサーバを起動する方法を解説します。

Flaskとは

FlaskはPythonで実装されたWSGI(Web Server Gateway Interface)準拠のWebアプリケーションフレームワークです。

WSGIとは、WebサーバとWebアプリケーションを接続するための標準化されたインターフェース定義です。WSGIを利用することで、WebサーバとWebアプリケーションの実装を分離でき、それぞれの組み合わせの選択肢が広がります。

Flaskの主な特徴は以下の通りです。

  • 軽量: 最小限のコードでWebアプリケーションを起動できる
  • 柔軟性: 必要に応じて複雑なアプリケーションへスケールアップ可能
  • 充実したエコシステム: 拡張パッケージが豊富に存在する

テンプレートエンジンJinja2とWSGIツールキットWerkzeugをベースとしており、PythonのWebフレームワークとしてDjangoと並ぶ人気を誇っています。

準備

Flaskを利用するには、事前にパッケージのインストールが必要です。


# pipの場合

pip install flask

# Anacondaの場合

conda install flask

Webアプリケーションの起動

以下は、Flaskで作成できる最もシンプルなWebアプリケーションです。

from flask import Flask

app = Flask(**name**)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

if **name** == "**main**":
    app.run()

このスクリプトを実行すると、以下のようなメッセージがコンソールに表示されます。


- Serving Flask app "Hello_World" (lazy loading)
- Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
- Debug mode: off
- Running on <http://127.0.0.1:5000/> (Press CTRL+C to quit)

ブラウザで http://127.0.0.1:5000/ にアクセスすると、以下のように「Hello, World!」が表示されます。

http://127.0.0.1:5000

コードの解説

モジュールのインポート

flaskパッケージからFlaskクラスをインポートします。

from flask import Flask

Flaskインスタンスの作成

Flaskクラスのインスタンスを作成します。このオブジェクトがWebアプリケーションの本体となります。

app = Flask(**name**)

第一引数の__name__は、Pythonの特殊変数です。スクリプトを直接実行した場合は"__main__"が、他のモジュールからインポートされた場合はそのモジュール名が格納されます。

Flaskは__name__の値をもとに、テンプレートや静的ファイルの配置場所を特定します。このため、アプリケーションのルートモジュールでFlask(__name__)として渡すのが一般的です。

ルーティング

ルーティングとは、リクエストされたURLと、それに対応して実行される処理を紐づけることです。

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

@app.route("/")デコレータにより、ルートURL(/)へのアクセス時にhello_world()関数が実行されます。関数の戻り値がクライアント(ブラウザ)にレスポンスとして返されます。

実際のWebアプリケーションでは、複数のURLに対してそれぞれ異なる処理を定義することで、さまざまなページや機能を提供します。

アプリケーションの起動

app.run()を呼び出すことで、Flaskの開発用サーバが起動します。

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

if __name__ == "__main__":は、このスクリプトが直接実行された場合にのみapp.run()を実行するためのガード条件です。他のモジュールからインポートされた場合には実行されません。

開発時にデバッグモードを有効にしたい場合は、app.run(debug=True)と指定します。これにより、エラー発生時にブラウザ上に詳細なエラー情報が表示されるようになります。

注意: debug=Trueは開発環境でのみ使用してください。本番環境では必ず無効にしてください。

まとめ

この記事では、Flaskの基本とWebサーバの起動方法を紹介しました。

  • FlaskはPythonの軽量Webフレームワークで、WSGI準拠で動作する
  • Flask(__name__)でアプリケーションインスタンスを作成する
  • @app.route()でURLと処理関数を紐づける(ルーティング)
  • app.run()で開発用サーバを起動する

次回は、Flaskアプリケーションのディレクトリ構成について解説します。