SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

翔泳社 新刊紹介(AD)

PythonのWeb開発フレームワーク「Flask」とは? Django、Bottle、FastAPIの特徴と合わせて解説

  • このエントリーをはてなブックマークに追加

 PythonのWeb開発フレームワークとして人気のFlaskについて解説した『Python FlaskによるWebアプリ開発入門』がCodeZineを運営する翔泳社から発売中です。本書からFlaskの概要と、Flaskと同じWeb開発フレームワークであるDjango、Bottle、FastAPIとの違いを紹介します。

  • このエントリーをはてなブックマークに追加
本記事は『Python FlaskによるWebアプリ開発入門 物体検知アプリ&機械学習APIの作り方』(佐藤昌基、平田哲也)の「はじめに」と「第0章 Flaskの概要と環境構築」の一部を抜粋したものです。掲載にあたって編集しています。

はじめに

 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)。

表0.1 Python製Webフレームワーク
表0.1 Python製Webフレームワーク

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の環境構築について解説していきます。

Python FlaskによるWebアプリ開発入門

Amazon SEshop その他


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

著者:佐藤昌基、平田哲也
監修:寺田学
発売日:2022年1月24日(月)
定価:3,740円(本体3,400円+税10%)

Pythonのフレームワーク「Flask」によるWebアプリ開発の入門書です。まずは、最小のアプリの作成から始め、問い合わせフォーム、データベースを使ったアプリ、認証機能と段階的に作成しながら、Flaskによるアプリ開発の基礎を習得します。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
翔泳社 新刊紹介連載記事一覧

もっと読む

この記事の著者

佐藤 昌基(サトウ マサキ)

PyCon JP 2015ではプログラムチームに所属。SIerにてJavaやC#を使ったアプリ開発に携わった後、アライドアーキテクツ株式会社に入社。仕事では主にPHPを使ったWebアプリケーション開発を担当しているが、同僚にPython好きがいたことからPythonに触れる機会が増え、勉強会などに参加するようになる。趣味は草野球で、主に大宮を拠点に活動している。 Twitter: @taisa_007 Facebook: 佐藤 昌基

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

平田 哲也(ヒラタ テツヤ)

Classi株式会社所属。E-learning事業会社にて大手資格学校のLMSの運用保守/開発を担当。その後、LearningAnalyticsの研究をしにUniversity College London Institute of Education (UCL IOE) Knowledge Lab...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

渡部 拓也(ワタナベ タクヤ)

 翔泳社マーケティング課。MarkeZine、CodeZine、EnterpriseZine、Biz/Zine、ほかにて翔泳社の本の紹介記事や著者インタビュー、たまにそれ以外も執筆しています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/15432 2022/01/31 07:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング