Pythonで簡単なWebアプリ作りたいならFlaskがおすすめ

こんにちは、MIYACHIN(@_38ch)です。
この記事では、Pythonで作る、軽量なWebアプリケーション「Flask」についてご紹介していきます。

目次

  1. Flask(フラスク)とは?
  2. こういう時はFlaskを使え
  3. Flaskを使って簡易アプリを10分で作ってみる

Flask(フラスク)とは?

Flaskは2010年から続く、いわゆるマイクロフレームワークという最小限のライブラリやツールのみを必要とするPythonで書かれたWebフレームワークです。

僕は今まで、何個かのWebフレームワークを試したことがあるんですが、Flaskが一番初期構築も楽だったし、シンプルなファイル構成になるなという印象です。
なので、プログラミング初心者の方が最初にWebアプリを開発するときのフレームワークとしてはかなりおすすめできるかもしれません。

ただ、他のWebフレームワークと比較して、有名度では劣るので自社のメインプロダクトに採用している企業は少ないかもしれません。しかし、非常にクイックにサーバーサイドを構築できるので、ちょっとしたダッシュボードやお遊びサービスを作るときには便利なフレームワークだと言えます。

こういう時にはFlaskを使え

Flaskを使うべきシーンは、「すでにPythonでスクリプトを書いていて、それをAPI化してアプリとして使いたい時」です。

どういうことかというと、例えば、データサイエンティストがPythonを使って、文章要約アルゴリズムを作ったとします。しかし、実際そのアルゴリズムに与えているテキストデータは、Pythonファイルから.txtファイルを読み込んで、その要約された結果が出力されます。

それでも凄いのですが、それがアプリ上で、テキストフォームに長文を打ち込んで、要約ボタンを押すと、数秒後に要約された結果が返ってくるという方がより多くの人に、そのアルゴリズムを試してもらうことができます。

このように、すでにあるPythonスクリプトを、そのまま簡単にアプリ化したい時には、Flaskを使うのがベストだと思われます。

Flaskを使って簡易アプリを10分で作ってみる

それでは、実際にFlaskを使って簡易アプリを作っていきましょう。

前提と作業環境は以下です。

  • Python3がインストールされている
  • Pythonの基本文法がわかる
  • Macを使っている

自分のPythonのバージョンがわからない場合は、

python --version

をTerminalやCommandPromptで打って確認しましょう。

Flaskをインストール

flask-appというディレクトリを作成して、pipでFlaskをインストールしてあげましょう。

mkdir flask-app
cd flask-app
pip install Flask

app.pyを作成

まずは、Flaskの根幹となるPythonファイルを作成します。

このファイル名はなんでも良いですが、flask.pyにするとflaskのパッケージ内のファイルとコンフリクトするのでそれ以外にしましょう。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

このファイルでは、’/’ にリクエストが来ると、’Hello, World!’ という文字列を返すシンプルなロジックを書いています。

めちゃめちゃシンプルですよね?

Flaskアプケーションを起動させる

これだけで、最小限のアプリを作るための準備は整いました。簡単すぎじゃないですか?それでは、app.pyを起動していきましょう。

export FLASK_APP=app.py
flask run
 * Serving Flask app "app"
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

上記2つのコマンドをTerminalで実行してあげるだけです。

起動が成功すると、ブラウザで http://127.0.0.1:5000/ にアクセスしてみてください。

無事、”Hello, World!” が表示されました!

しかし、これは、Pythonから直接文字列を返しているだけなので、それをHTML上に描画するにはどうしたら良いか気になります。

FlaskにはJinja2というテンプレートエンジンが付いているのでそれを使ってみましょう。app.pyと同じディレクトリにtemplatesというフォルダを新規に作成します。

Jinjaを使ってみる

templatesディレクトリ配下に、index.htmlというファイルを追加しました。

<!DOCTYPE html>
<html lang="en" dir="ltr">
    <head>
        <meta charset="utf-8">
        <title>Flask sample app</title>
    </head>
    <body>
        <span style="font-size:100px;">{{message}}</span>
    </body>
</html>

bodyはapp.pyから受け取ったmessageをフォントサイズ100pxで表示させるように書いています。

app.py側には’/’にリクエストがあれば、index.htmlとmessageの内容をブラウザに返すという風に書きましょう。

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def hello_world():
    return render_template('index.html', message='Hello, World!')

ポイントはreturn render_templateのところです。

第一引数に、返すtemplateファイル、第二引数以降で、一緒に返す変数を置いています。つまり、index.html上でmessageという変数が使えて、そこに’Hello, World!’という値が入っているわけです。

importのところに、render_templateを追加しているので、お忘れなく!

さて、Flaskを再起動して、ブラウザで確認してみると、無事、”Hello, World!” がフォントサイズ100pxで表示されました!

この記事では、簡単なFlaskの使い方をご紹介しました。また別の記事で、発展的な使い方をご紹介していきます。

また、公式サイトもわかりやすく書かれているので、ぜひ参照してみてください。

この記事に関して、もしくは、発展的な使い方に関して何かご質問などあれば、Twitter経由でご連絡いただけると助かります。