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

FlaskはPythonで実装されたWebアプリケーションフレームワークです。Flaskは軽量で、手軽に始めることができるのが特徴です。今回から数回にわたり、FlaskでWebアプリケーションを作成していく流れを紹介していこうと思います。

Flaskとは

先述の通り、FlaskとはPytohnで実装されたWSGIのWebアプリケーションフレームワークです。

WSGIとはWeb Server Gateway Interfaceのことで、WebサーバとWebアプリケーションに接続するための標準化されたインターフェース定義のことです。WSGIを利用することでWebサーバとWebアプリケーションの実装を切り離すことができ、これによってWebサーバとWebアプリケーションフレームワークの組み合わせの選択肢が広がりました。

Flaskは軽量はフレームワークで、素早く手軽に実装できる点が特徴です。しかしながら、場合によっては複雑で高度なWebアプリケーションへとスケールアップすることも可能です。

WerkzeugとJinjaのラッパーとして始まったFlaskですが、現在ではPythonのWebアプリケーションフレームワークとしてdjangoと並ぶ人気を誇っています。

準備

前提としてflaskをインストールする必要があります。pipまたはcondaコマンドでflaskをインストールしましょう。

今回は開発しながらという前提で、ローカル環境でWebサーバを起動するという条件としています。筆者はSpyderを使ってコードを書き、実行しています。

シンプルなWebアプリケーションをつくる

まずはFlaskにおいて最もシンプルな構成でWebアプリケーションを作ってみます。プログラミング学習の定番”Hello World!”をブラウザに表示してみます。

まずはコード全体です。

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)

実行するとRunning on http://127.0.0.1:5000/と出てきます。http://127.0.0.1:5000/にアクセスしてみます。

http://127.0.0.1:5000/でHello World!が表示される

無事Hello World!が表示されました。上記のように、非常に簡単なコードでWebサーバを起動できてしまいます。では、そのコードではどんな処理をしているのでしょうか。処理の流れを次で解説します。

処理内容

Flaskクラスをインポートします。

from flask import Flask

Flaskクラスのインスタンスを作成します。FlaskオブジェクトにはWebアプリケーションに必要な機能が詰まっています。このとき第一引数にはアプリケーションのモジュール名(.pyのPythonファイル名)またはパッケージ名(モジュールを集めて格納したディレクトリ名)を渡します。

app = Flask(__name__)

__name__はPythonの特殊な変数で、コマンドプロンプトやIDEでそのプログラムファイルを直接実行した場合には”__main__”が、他のスクリプトから呼び出された場合には自身のモジュール名(ファイル名)が格納されます。__name__の挙動については以下記事も参考にしてみてください。

この__nama__を渡す目的ですが、FlaskではHTMLやJavaScriptのファイルを格納するフォルダ構造が決まっています。それらの場所を把握するために、どのスクリプトでWebアプリケーションのコアとなるFlaskオブジェクトが作成されたという情報が必要なのです。

ルーティング処理を記載します。ルーティングによって、リクエストされたURLとそれが引き金となって実行される処理をリンクさせます。

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

たとえば上記の場合、URLが”/”のとき、すなわち”http://127.0.0.1:5000/”にアクセスした場合の処理を関数hello_worldに記載しています。

同様に”/hoge”に対応する処理(関数)を作成し、”/hoge”にアクセスするリクエストを投げた場合は、それに対応する処理が実行されます。

#"/hoge"に対する処理を記述した場合
@app.route("/hoge")
def hoge_hoge():
    return "<p>hoge, hoge!</p>"

Flaskのルーティングでは、受け入れるHTTPメソッド(GETかPOSTか)を指定できたり、変数を付加してルーティングすることもできます。これらは別記事にて紹介します。

ちなみに、ルーティングに対応する関数の戻り値はシンプルに表示したい文字列でも良ければ例のようにHTML形式でも可能です。HTMLファイルを渡すことも可能です。HTMLはブラウザによって変換表示されます。

app.run()によってアプリケーションを起動します。開発用サーバで起動する場合のみですが、debug=Trueとすることによってリクエスト処理中に起きたエラー内容をブラウザに表示させることもできます。

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

まとめ

FlaskでのシンプルなWebアプリケーション作成方法を紹介しました。今回の内容をベースに、本格的にWebアプリケーションの機能を肉付けしていくことになります。

Flaskの操作に関することなどこれからも記事にしていければと思います。

ではでは👋