先日『2万4000超の開発者に聞いたPythonでよく使うフレームワークは?』というニュースがあり、その中で、Web開発で最も使われているフレームワークとして『Flask』が選出されていた。Flaskの使い方はとてもシンプルなので、この機会にFlaskの使い方を簡単に確認しよう。

Flaskのインストール

それでは、pipコマンドを利用してFlaskをインストールしよう。Flaskをインストールするには、コマンドラインから以下のコマンドを実行する。なお、今回は、原稿執筆時点で最新版だった1.1.2を利用する。

$ pip install -U flask===1.1.2

Flaskの基本を確認しよう

FlaskはとてもシンプルなWebアプリケーションフレームワークだ。Flaskを使うと、とても手軽にWebアプリを開発することができる。なお、Flask自体に簡単なWebサーバーの機能が含まれているので、プログラムを実行したらすぐに、Webブラウザで動作確認ができるというのも人気の理由の一つだろう。

以下は、挨拶を表示するだけの最も簡単なFlaskのWebアプリだ。以下のプログラムを「hello.py」という名前で保存しよう。

# 必要なモジュールの取り込み
from flask import Flask

# Flaskオブジェクトの生成 --- (*1)
app = Flask(__name__)

# ルート( / )へアクセスがあった時の処理を記述 --- (*2)
@app.route("/")
def root():
    return "Hello"

# サーバーを起動 --- (*3)
if __name__ == "__main__":
    app.run(debug=True, port=8888)

プログラムを実行するには、コマンドラインで以下のようにコマンドをタイプしよう。するとWebサーバーが起動する。

python hello.py

次に、Webブラウザを起動して「http://localhost:8888」へアクセスしよう。次のようにHelloとブラウザ画面に表示されるのを確認できる。

  • Flaskで一番簡単なWebアプリを作ったところ

    Flaskで一番簡単なWebアプリを作ったところ

プログラムを確認してみよう。FlaskでWebアプリを作成する基本手順は、(*1)の部分で指定しているようにFlaskのオブジェクトを作成し、(*3)の部分のように、runメソッドで実行することだ。

しかし、FlaskでWebサーバーを起動するだけでは意味がないので、サーバー(給仕・奉仕するもの)がどんな仕事をするのかを指定する。それが、(*2)の部分で指定しているものだ。ここでは、サーバーのルート(アドレス "/")に対するアクセスがあったときに、"Hello"という文字列を出力するようにしている。

フォームの処理

次にWebフォームの処理方法を学ぼう。Webアプリについて学ぶ際、Webフォームからの入力をどのように扱うのかが分かると、いろいろなアプリが作れるようになる。HTMLのformタグから送信されたデータを、どのように処理するかを確認しよう。

Flaskの場合、フォームは自動的に処理され、GETメソッドで送信されたパラメータであれば、request.argsで取得でき、POSTメソッドで送信されたパラメータであれば、request.formで取得できる。

ここでは、Webフォームを利用したかけ算ツールを作ってみよう。以下のプログラムをkakezan.pyという名前で保存しよう。

from flask import *

# Flaskオブジェクトの生成
app = Flask(__name__)

# ルート( / )へアクセスがあった時 --- (*1)
@app.route("/")
def root():
    # HTMLでWebフォームを記述 --- (*2)
    return """
    <html><body>
    <form action="/calc" method="post">
      <input type="text" name="a"> ×
      <input type="text" name="b">
      <input type="submit" value="計算">
    </form>
    """

# フォームの値を受け取って結果を表示 --- (*3)
@app.route("/calc", methods=["post"])
def calc():
    a = int(request.form.get("a"))
    b = int(request.form.get("b"))
    r = a * b
    return "<h1>答えは..." + str(r) + "</h1>"    

# サーバーを起動
if __name__ == "__main__":
    app.run(debug=True, port=8888)

プログラムは同じように実行できる。コマンドラインで以下のように実行しよう。

python kakezan.py

すると、FlaskでWebサーバーが起動するので、Webブラウザで「http://localhost:8888」へアクセスしよう。そして、二つあるテキストボックスに数値を適当に入れて「計算」ボタンを押そう。すると、計算結果が表示される。

  • かけ算ツール

    かけ算ツール

プログラムのポイントを確認してみよう。プログラムの(*1)の部分では、サーバーのルートに対してアクセスがあったときの処理を記述する。そして、(*3)の部分ではサーバーのURL「/calc」に対してアクセスがあったときの処理を記述する。つまり、@app.route("アドレス")と指定することで、その直後に記述した関数が実行されるようになる。

続いて、(*2)の部分を見てみよう。Flaskの処理では任意のURLにアクセスがあったときに、何を返すかを指定するだけで良い。ここでは、かけ算する二つの値を入力するフォームを表示するHTMLを返している。

さらに(*3)の部分を見てみよう。ここでは、WebフォームからURL「/calc」にデータが送信されたときに行う処理を記述している。request.form.getメソッドを利用して、送信されたデータを取得できる。ここでは、int関数を使って整数に値を変換し、かけ算を行って、結果を画面に出力する。

Flaskのまとめ

ここまで、Flaskの基本的な使い方を確認した。とても手軽にWebアプリを記述できることが分かっただろう。ここまで紹介した以外にFlaskの大きな機能に、テンプレートエンジンの機能がある。次回、具体的なアプリを作りながら使い方を紹介する。お楽しみに。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。