はじめに
Flaskは、2010年4月1日にArmin Ronacher氏がエイプリルフールのネタとしてリリースし、そこからPython愛好家の間で人気になったPython製Webマイクロフレームワークです。2018年にはPython開発者調査で最も人気のあるWebフレームワークとして投票され、いまでも高い人気があります。
本書は、Flaskによる実践的なWebアプリケーション(以下、アプリ)の作成を通して、自力でアプリを作成できるようになることを目的としています。
まずは最小のアプリの作成から始め、問い合わせフォーム、データベースを使ったアプリ、認証機能と、段階的に作成しながら、Flaskによるアプリ開発の基礎を学びます。続いて、画像データ(写真)から物体を判別する物体検知アプリを作成しながら実践的なアプリの作り方を学んだあと、その機能をWeb API化する方法について解説します。
Flaskは、マイクロフレームワークの1つであるため、他のWebフレームワークよりもフレームワーク自体の仕様に縛られることなく、アプリ開発が可能です。
また、あらかじめフレームワーク内で実装されている機能が少ないため、自分で考えて実装する余白や自由度があり、アプリ開発を学ぶのに適したWebフレームワークです。
ビジネスの場面では、実証実験をするためのモックやデモ用プロダクトの開発のような小規模プロジェクトにおいて、マイクロフレームワークであるFlaskがちょうどよいフレームワークとしてよく採用されます。
さらにFlaskは、機械学習のようなデータを活用したプロダクトを開発する際にもよく採用されます。機械学習の実装コードをプロダクトに組み込んだり、Web APIとして汎用化してサービス提供することもあります。
一方で、データを活用したプロダクト開発の歴史は浅く、どのように機械学習をプロダクトに組み込み、アプリとして提供できるかについての知見が少ないように感じます。
そういった経緯から、本書では機械学習の挙動がわかりやすい手書き文字認識をする分析コードを題材にして、どのように機械学習をアプリに組み込んでいくかについても詳しく解説します。
これからFlaskを使ってアプリを開発したい、機械学習をアプリに組み込みたいと考えている皆さんにとって、本書がその足がかりとなれば幸いです。
Flaskの設計思想
Flaskは、Python製のマイクロWebフレームワークです。マイクロWebフレームワークとは、何でしょうか? それは「コアとなる機能を保ちつつ、拡張性を持っているフレームワーク」を意味しており、機能が不足しているわけではありません。
Flaskは、デフォルトではデータベース機能が含まれないなど、最小限の機能のみを提供するフレームワークです。これにより、最低限の規約はありますが、アプリの構成も自由に決めることができます。
このように、Flaskはシンプルなフレームワークですが、データベース機能をはじめ、多くの拡張機能をサポートしており、これらの拡張機能はFlask自体に実装されているかのように簡単に利用できます。
必要に応じて様々な拡張機能を追加することで、小規模から大規模なWebアプリ開発まで、多様なケースで利用できるように設計されています。
なぜFlaskを使うのか
なぜいまFlaskを使うのかを考えてみます。2000年~2010年代半ば頃までのWeb開発では、開発に必要なほぼすべての機能をそろえたフルスタックフレームワークが人気で、それらを利用するのが当たり前でした。
しかし、時代とともにマイクロサービス化が進み、フロントエンドの技術が急速に発展したことで、サーバーサイドはAPIを返し、フロントエンドはJavaScriptやTypeScriptで実装するのが主流となってきました。そして、サーバーサイドでも、フルスタックではなく、Flaskのようなコンパクトで学習コストが低く、すぐに利用できるフレームワークが求められるようになりました。
そのため、いまFlaskは、PythonによるWeb開発において、やりたいことを実現するための良い選択肢になっています。
Python製Webフレームワークの比較
Flask以外にも、多くのPython製Webフレームワークがあります。そのため、新規開発プロジェクトの際に、フレームワークの選定に迷うことがあります。
特にFlaskとよく比較されるのが、Django、Bottle、FastAPIです。これらPythonで利用できるWebフレームワークについて簡単に見てみましょう(表0.1)。
Django
Djangoは、Python製Webフレームワークの中でも、最も有名なフレームワークです。
中規模以上のWebアプリの構築によく使用されます。開発に必要な多くの機能が実装されており、フルスタックフレームワークと呼ばれます。
Djangoをインストールすると、主に次のような機能が利用できます。
- ユーザー認証
- O/Rマッパー
- URLディスパッチャ
- Djangoモデルインスタンスのシリアル化機構
- 組み込みサーバー
- HTMLフォーム検証システム
- キャッシュフレームワーク
- 管理画面
- 多言語化機構
- テンプレートエンジン機能拡張機構
また、Django REST framework(DRF)を追加でインストールすることで、Webアプリだけでなく、REST API(RESTfull API)が簡単に作れます。
Bottle
Bottleは、PythonでWebアプリを作成するためのフレームワークの中では、最もシンプルなフレームワークです。
「bottle.py」という1つのファイルだけで構成されています。また、Python標準ライブラリ以外に依存関係がない作りになっています。
Flask同様、マイクロWebフレームワークの1つですが、Flaskよりも「シンプル」「速い」「軽量」という特徴があります
一方で、必要最低限の機能しかなく、少ない行数のコードで次のような機能が利用できるように作られています。
- ルーティング
- テンプレート
- 組み込みサーバー
多機能なアプリを作成するには、モジュールを分割して管理しやすくできるBlueprintが利用できるFlaskのほうが向いています。
Bottleは、ToDoアプリなど、ちょっとしたアプリを作るのに向いているフレームワークです。
FastAPI
Web APIを開発するときに、FastAPIはFlaskと比較されることがよくあります。
FastAPIは、非同期処理が実装しやすいように作られたPython製Webフレームワークであり、とても速いスピードでリクエストを処理できます。その他にも、次のような特徴があります。
- OpenAPIに基づいて、自動的にJSON Schemaモデルを生成
- PythonのASGIフレームワークであるUvicornによるハイパフォーマンス化
- Pydanticを利用して、モデルの型やバリデーション(検証)の定義が可能
- APIを定義すると、Swagger UI、Redocによるドキュメントの自動生成が可能
- GraphQLやWebSocketにも対応
Web APIを開発するうえで、本来なら自分で設計してゼロから準備しなければならない機能が、事前にFastAPIのフレームワークの中に組み込まれています。
また、FastAPIは、もともとStarletteというフレームワークをもとにして書かれており、多くの機能を継承しています。ちょっとしたAPIを開発するのに適したフレームワークです。
以上、Flaskとよく比較されるDjango、Bottle、FastAPIの概要を見てきました。最後にFlaskの特徴もまとめておきます。
- 標準で提供する機能は最小限で、学習コストが低い(初心者もすぐに使える)
- データベース機能など様々な拡張機能をサポートしており、小規模WebアプリからWeb APIまで開発可能
本書では、主にFlaskによるWebアプリの開発方法について解説していきます。次節からFlaskの環境構築について解説していきます。