見出し画像

Flask2がやってきた!

はじめに

きましたよ、Flask2.0が。あの素晴らしいWebフレームワークが進化したんです。正直なところFlaskのメジャーアップデートはないと思っていました。実際flaskは2011年にリリースされ2014年にpython3に対応して以降は細かな修正やpythonのアップデートに対応するくらいで大きな変化はありませんでした。

2018年、flask1.0へのメジャーアップデートが来た際にはPythonista(pythonエンジニア)の間でかなり話題になり、今現在Django人気にはわずかに届かないもののGithub上のスターはpythonフレームワークで2番目に多い人気フレームワークとなっています。1.0が出ただけでもかなり驚いたので、まさかさらにメジャーアップデートが来るなど思ってもいませんでした。というのもflaskの設計思想が「標準で提供する機能を最小限に保ち、どんなWebアプリケーションにも適合する良い基盤を作る」というものであり、機能を追加していけばいいというものではなかったからです。

そんな中、唐突にやってきた5月11日のメジャーアップデート。(その後いくつかの修正が出て21日に修正版のflask2.0.2が最新版としてリリースされています)
この衝撃をわかりやすく説明すると、秋元康がOH!MYコンブの正式な続編の連載を開始したくらいの衝撃です。(なのにTwitterで本件について述べている日本人エンジニアはほとんどいない...)

とまあ前書きはこの辺にしてflask2.0の説明に入りたいと思います。

っっっとその前に。いないとは思いますがflaskを触ったことがないにも関わらず興味本位でこのNoteを読んでくださった優しいお方のために、まずはそもそもflaskが何かという説明からしようかと思います。


flaskって何?

flaskというのはpythonの軽量なWebフレームワーク、つまるところ最低限の機能を有したライブラリの集まりです。Python愛好家のアーミンロンチャーさん(Armin Ronacher)によって2011年にエイプリルフールのネタ(もともとあったbottleというフレームワークの名前をもじっている)として開発されましたが、あまりにも人気が出てしまったため本格的に実用的なフレームワークとして開発が進められることとなりました。その時の実際の資料がこちらです。
その人気具合は数年前までGitHubのスター獲得数がpythonフレームワークの中で最も多かったほどです。

またflaskの作者はツイッターやブログで、

・シンプルであれ、複雑なのは幸せじゃない
・ブラックボックスをできるだけ使うな
・メンテナンスの必要性ができるだけ少ないように作れ
・pythonは環境に依存しすぎる問題があるから最近はRustの方が好きだな

ということをよく言っていて、この思想はflaskにも盛り込まれています。

余談ですがアーミンロンチャーさんは日本が大好きでテンプレートエンジンにはjinja(神社)、ネットで使うハンドルネームはmitsuhiko(名探偵コナンの光彦が好きらしい)、使っているMacのホスト名はnausicca(風の谷のナウシカ)だったりします。あとめっちゃイケメンです。

画像1

旧バージョンのflaskを使っている方へ

きっとこのNoteを読み終える頃にはあなたも新しいflaskを使いたくなっているはずです。それを予想してここにflaskのアップデートコマンドを置いておきます。パッケージをアップデートする機会は意外と少ないですし忘れている方も多いかもしれません。

pip install -U Flask==2.0.1


大きな変更点

まずこれは絶対に話さなければいけません........

Python2系とPython3.5以前の3系のサポートを終了しました!

わかりやすく言うと、今後はもうpython2.xやpython3.5より古いやつは使わないでね!というお達しです。python自体コードの環境依存問題がよくあります。python3.9で書いたコードを3.4の環境で実行すると予期しない動きをしたり、そういったことがないようにみんな3.6より新しいのを使ってねってわけです。


次に一番大きいと思われる変更は

httpメソッドのルートデコレータの書き方

です。
デコレータというとflaskだとルーティングでよくみる@なんちゃら↩これですよね。これの書き方が変わりました。


以前までのhttpメソッドの書き方はこうでした。

python

@app.route('/get', methods=['GET'])
def get_request():
   return 'これはGETリクエストです'


@app.route('/post', methods=['POST'])
def post_request():
   return 'これはPOSTリクエストです'

それがこう!

python


@app.get('/get')
def get_request():
   return 'これはGETリクエストです'


@app.post('/post')
def post_request():
   return 'これはPOSTリクエストです'

書きやす~~~い!
書きやすいしわかりやすい、python自体可読性はかなり高くコードも見やすいですが(インデントのルールがあるのも大きい)コードそのものも可読性を下げないまま大幅に短縮していて素晴らしいです。これはflaskを日常的に使っている人たちは大喜びだと思います。

じゃんじゃん紹介していきます。

お次はこちら

非同期関数をview関数としてflaskクラスに渡せるようになりました

非同期処理というとある処理の終了を待たずに他の処理をするというものなのですが説明していくと長くなりそうなのでできるようになったよということだけで説明は省略させていただきます。正直これは伝わる人に伝わればいいかなという内容なので!笑

では次!

こちらはflaskではなくjinjaのアップデートによるものなのですがflaskのテンプレートエンジンがjinja2からjinja3に変わったことによる効用なので紹介しようと思います。(ちなみにjinja3のリリースもflask2.0とほぼ同時でこちらもflaskと同じアーミンロンチャーさんによって作られているのでほぼセットといっても過言ではない)

実行していないif文で、
未定義のフィルターに対してエラーを吐かなくなりました

これは個人的にかなり嬉しいです。実装中に開発サーバーを立てて動作確認をするも関係ないコードによって躓く、しかもそこは使っていない、ということはエンジニアではよくある話だと思います。今回のjinjaのアップデートで私たちはそのストレスから解放されることとなりました。該当部分に触れるまではエラーは吐かれません!


おわりに

ここで触れた以外にもsend_fileパラメータの名前が変わったり任意のファイルからconfigを読み取れるようになったり、とたくさんの変更点やこれまでの仕様による不具合の改善があるのですが、すべて挙げるとキリがなくなってしまうので今回はここまでにしたいと思います。

さらに詳しく知りたい方は公式のリリースノートとGitHubのリンクを貼っておきますのでそちらから確認してみてください。

flask-公式リリースノート
flask-GitHub

ここまでお付き合いいただきありがとうございました!
それではみなさん、よきPythonライフを!

この記事が気に入ったらサポートをしてみませんか?