【Python初心者】定番のPythonフレームワークFlaskとは? 導入からWebアプリ開発までの流れ

この記事の要点

  • Flaskは軽量で最小限の機能を備えたWEBアプリケーションフレームワークで、小規模開発向け
  • 軽量で処理が高速、カスタマイズ性が高く実装が簡単なので初学者におすすめ
  • フレームワークは特殊な書き方が必要な場合があり、書籍だけでなくスクールもおすすめ

PythonでWEBアプリを開発してみたい方にはとてもオススメのフレームワークである「Flask」をご紹介します。

比較的大規模な開発に向くフレームワークのDjangoに比べて、小規模開発に向いているのがFlaskです。

この記事で実際に簡単なアプリの実装までを実行することができます。

初心者にとって「Flaskの日本語解説情報が少なく、誤植も多い」といった難しい点以外は、学習コストが低めでとても便利でスキル向上につながるフレームワークですので、ぜひチャレンジしてみましょう。

Flaskとは?

PythonでWebアプリを制作するのに適した軽量なWebアプリケーションフレームワーク(フレームワーク:アプリケーションの開発に必要な機能を備えたソフトフェア)ですです。

Flask公式ドキュメント
https://flask.palletsprojects.com/en/2.2.x/

少し説明すると、Jinja2というテンプレートエンジンを用いて、Flaskは簡単なWebアプリ開発を可能にしています。

のちにフレームワーク比較でご紹介しますが、簡易的なフレームワークであるため個人開発が多めですが、Netflixなどの企業も利用しています。

小規模開発向けのフレームワーク

Flaskは軽量で最小限の機能を備えたWEBアプリケーションフレームワークですが、具体的には以下の機能があります。

  • リクエスト処理
  • 開発用Webサーバー
  • テンプレートエンジン

逆に、備わっていない機能の例としては

  • 管理画面
  • フォーム
  • 認証システム

などがあります。

Flaskのメリット・デメリットと他のフレームワークとの違い

具体的にどのようなWebアプリがFlaskを用いて開発されているのかを見てみましょう。

1103社がFlaskを利用していると報告されているそうで、NetflixやLyftといった企業が確認できました。

Flaskを利用している企業はこちらで確認できます。

stackshare -Flask
https://stackshare.io/Flask

PythonでWebアプリを開発する際にはFlaskとDjangoのどちらかが主流だと言えます。

今回はこの2つの違いをそれぞれ考察してみます。

リリースは、Djangoが2005年で、Flaskはその5年後の2010年です。

Flaskの開発者であるArminさんはエイプリルフールのジョークとしてリリースしたそう。

しかし、予想以上にとても人気になり、今では主流とも言えるポジションです。

必要最適限の機能を持つフレームワークとしてFlaskは設計されおり、カスタマイズ性が高く簡単に実装できます

一方、Djangoはデフォルトで必要な機能が備わっており、カスタマイズ性は低めだと考えられます。

大規模開発に適したDjangoは利用企業が多いですが、Flaskは企業よりも個人開発が多めだと言えます。

Djangoについて知りたいという方はこちらを参考にしてください。

実際にDjangoをインストールし、アプリを作成することができますよ。

【Python入門】Django(ジャンゴ)とは?導入からWebアプリ開発までの流れ

メリット

  • とても軽量で、処理が高速
  • 拡張機能で自分好みにできる
  • 最小限の機能であるため、シンプルで理解しやすい

これらのことからとても初学者向けのフレームワークだと言えます。

小規模開発には最適ですので、個人開発のために利用することがオススメされます。

初学者にはとても魅力的なフレームワークです。

デメリット

  • 大規模開発には向かない
  • 機能が少ないため、必要なら自分で作らないといけない

特に管理画面を作る機能がFlaskには備わっていないために開発が困難になる場合があります。

メリットで拡張機能がありましたが、使用のしすぎにも注意です。

「拡張のためにライブラリを追加したらDjangoのようなものになった」
ということが起こりうるため、最初からDjangoを選択すればよかったと後悔するかもしれません。

この記事の最後にFlaskのオススメ書籍についてご紹介しますが、日本語で解説された情報が少ないため、英語での学習が必須になる場合があります。

管理画面やユーザー認証といった機能までDjangoでは提供されており、開発コストが大幅に削減できますが、Flaskでは用意されていないため、WEBアプリはFlaskで開発し、管理画面はDjangoで作る場合もあります。

Flaskのインストールからページ表示までの流れ

他のフレームワークと比較したメリットやデメリットを抑えた上で、実際にサンプルとして簡単なWEBアプリを開発してみましょう。

インストール

このフレームワークを使うために、次のコードをターミナルやコマンドプロンプトに入力してインストールします。

pip install Flask

インストールが完了したか確認するためにpythonの対話シェルを利用して次のコマンドを入力してみましょう。

まずはコマンドでpythonと入力します。

python

すると、>>> が表示されるので、こちらにpythonのプログラムを記述します。

>>> import Flask
>>> Flask.__version

インストールしたFlaskのバージョンが表示されたなら成功です。

ページ表示

大まかな流れとしては用意したHTMLファイル(サイト)のデータをFlaskで立ち上げたローカルサーバーにアップロードします。

とても簡単にできるので、実際に実行してテストすることをオススメします。

FlaskでWebサイトを表示するためにまずはHTMLファイル(index.html)を作成します。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>サンプルサイト</title>
  </head>
  <body>
    Flaskを動かしてみたい!
  </body>
</html>

ローカルホストでWebサイトを表示するためには以下のようなコードを用います。

# インポート
from flask import Flask

app = Flask(__name__)

# 「/」へのアクセスがあった場合にindex.htmlを返す
@app.route('/')
def index():
    return app.send_static_file('index.html')

# 実際にWebサーバーを立ち上げる
app.run(port=8000, host='localhost', debug=True)

表示されるかを調べるためには「localhost:8000/index.html」というURLを確認してみましょう。

プログラムが成功すると、index.htmlの中身が表示されます。

とても簡単なプログラムでWebサイトを表示を実装しました。

ここから少し発展しましょう。

リクエストリング

リクエストリングとはURLパラメータともいい、URLの最後に「?変数=〇〇」と記載される部分のことを言います。

例えばGoogle検索でも「apple」と検索した場合には「 https://www.google.com/search?q=apple(省略有り)」というURLになります。

qはクエリ(Query)を表しており、検索語を示すパラメータだと考えられます。

この検索機能をFlaskで真似した場合にどうなるのかを解説します。

少し複雑にはなりますが、HTMLファイルを管理するフォルダ(templates)をpythonファイルと同じ場所に作成します。

今回は「select-fruit.html」で選択したフルーツの情報を、「explanation.html」で説明文を表示したいと思います。

「 templates/select-fruit.html 」

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>検索サイト</title>
  </head>
  <body>
    <h1>どのフルーツを調べたいですか?</h1>
    <form action="/explanation" method="POST">
      <select name='fruit'>
        <option value='apple'>りんご</option>
        <option value='orange'>みかん</option>
        <option value='strawberry'>いちご</option>
      </select>
      <input type="submit" value="検索">
    </form>
  </body>
</html>

「 templates/explanation.html 」

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表示サイト</title>
  </head>
  <body>
    <h1>{{fruit}}</h1>
    {% if fruit == "apple" %}
    <p>赤いが、中身は黄色</p>
    {% elif fruit == "orange" %}
    <p>つぶつぶの実が美味しい</p>
    {% elif fruit == "strawberry" %}
    <p>種がたくさんついている赤い実</p>
    {% endif %}
  </body>
</html>

「 main.py 」

# インポート
from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/select-fruit')
def index():
    return render_template('select-fruit.html')

@app.route("/explanation", methods=["post"])
def post():
    # 送信されたフルーツの情報を取得
    fruit = request.form["fruit"]
    # パラメーターにfruitをセットして表示する
    return render_template("explanation.html", fruit=fruit)


if __name__== '__main__':
    app.run(port=8000, host='localhost', debug=True)

select-fruit.htmlでは3つの果物から選択するためのselectタグが用意されており、formでのsubmitボタンで情報を送信(POST)します。

POSTのactionにはexplanationと指定されており、この動きをmain.pyの@app.route("/explanation", methods=["post"])で設定しています。

パラメーターとしてfruitを設定して、explanation.htmlでこの値を使用できるようにします。

explanation.htmlで{{fruit}}と記述すると、この部分にパラメーターとして送信した値が表示されます。

さらに {% if fruit == "apple" %} などのコードがありますが、これは通常のif文と同じような使い方をします。

少し違う点として、最後に{% endif %}で条件分岐の終わりを記述します。

最初はこんな感じで値の送信ができるのだとなんとなく知るだけでも大切です。

PHPという言語と構造的に似ているため、学習してみると良いかもしれません。

Flask公式ドキュメント
https://flask.palletsprojects.com/en/2.2.x/

Flaskの学習におすすめの書籍

フレームワークは特殊な書き方が必要な場合があり、書籍を用いた学習が効率的です。

しかし、Flaskについてまとめた書籍は少ないため、本の選びが難しいと思います。

今回は初心者にもわかりやすい書籍をご紹介します。

Pythonフレームワーク Flaskで学ぶWebアプリケーションのしくみとつくり方

日本語のFlask解説書としてはWEBアプリ開発に最も適した書籍だと言えます。

多くの内容を汎用的に学習したい方向けで、実際に例題を実行しつつ学習を進めることができるため、初心者にも理解しやすい構造になっています。

amazonで見る

Python FlaskによるWebアプリ開発入門 物体検知アプリ&機械学習APIの作り方

この書籍ではWEBアプリに人工知能(機械学習)のアルゴリズムを応用するといったかなり実践的な内容になります。

そのため、ある程度PythonやFlask, 機械学習を学び、少し深く追求したい方にオススメです。

amazonで見る

ゼロからFlaskがよくわかる本: Pythonで作るWebアプリケーション開発入門

完全に初心者からでもローカルサーバー上で動く簡単なブログアプリを作る方法を学びます。

まずはシンプルにアプリケーションを開発してみたい方におすすめです。

ただ、コードの説明があまりありませんので、コードの意味を丁寧に理解したい方というよりは、とにかくアプリケーションを作ってみたいという方向けになります。

amazonで見る

また、書籍での独学が難しいと感じる方は、スクールも検討してみましょう。

こちらの記事で、数多くあるプログラミングスクールの中からPythonを学べる安くて質が良いスクールを厳選してご紹介します。

Pythonを学べるプログラミングスクール5つ【コスパで選ぶ】

テックジムでは90分の無料オンライン講座でPythonが学べますので、この機会に参加してみるのもいいでしょう。

ゼロから始めるPython入門講座(オンライン・無料)+【テックジム】

まとめ

今回はWEBアプリケーションフレームワークであるflaskについて、Djangoと比較したメリット・デメリットを知り、簡単なサンプルを動かしました。

2つ目の検索サンプルアプリは難しく感じたかもしれませんが、少しづつ学習してできることを増やしてみましょう。

最後にご紹介した書籍での学習で効率的に理解できるとは思いますが、まだまだFlaskについての情報が不足しており、誤植などがあるかもしれません。

その時は、英語のサイトや公式ドキュメントも読んでみると良い経験となります。

Pythonでは他にもスクレイピングやExcel自動化など、様々なことを行うことができます。

Flaskが難しいと感じた方は、以下の記事でPythonで初心者が作れるものをご紹介していますので、参考にしてみてください。

Pythonで初心者が作れるもの5つ【効率的な勉強法とは?】

また、WEBアプリを制作したら、それを公開、アピールするためのポートフォリオを作りたいと考えている方もいるかと思います。

実際のポートフォリオの例や、作る際のコツをまとめているので参考にしてみてください。

Pythonエンジニアによる実際のポートフォリオ例と作り方や作成時のコツについて紹介