Flask の使いどころ

Web アプリを仕事ではほとんど書いたことが無かったのですが、Flask を仕事で使う事にしたので、書いてて感じた Flask の使いどころを。

追記

コメントに色々な意見を頂いておりますので、是非そちらも。

がっつり使われた方の感想

結論

とりあえず箇条書きで ...

  • データベースサーバとの接続が前提なら、 Flask を使うのはやめる
  • Flask-* という Flask の拡張を使う時点で、Flask を使うのはやめる
  • 大規模で Blueprints を使う前提なら、Flask を使うのはやめる
  • 小さなアプリでプラガブルな仕組みを自分で作るには良い
  • パーミッションは Flask-Principal が良さそうだが、更新はほぼ止まっている
    • github 上で、 clone してやっている人はいますが、コードが増えすぎているのでアウト
  • フォルダ構成を考えるのがかなり面倒
  • ドキュメントがちゃんと書いてありそうで意外に書いてない
  • 情報が多そうで正直そんなに多くない、Django の方が全然多い
  • ある程度なら Pyramid がこれから来るのかな
    • Bottle は 1 ファイルタイプなので Flask と同じ道をたどる気がしている
    • Pyramid はドキュメントが膨大なのは魅力、また色々な機能が(最初から入っている)
  • 中規模であれば Django でイイと思う
    • 大規模はそもそも Python でいいのかという問題があると思う

Flask の問題

  • そもそもパーミッション関連が一切ないので、自前実装前提
  • データベース連携は自前でやるので Flask-SQLAlchemy 等を使う前提
  • 色々やろうとし始めると、まったく機能がないので色々実装する事になる
    • つまりそもそもある程度ライブラリとかを実装できる前提
  • Flask で書かれた OSS が意外にない
    • 知らないだけかも
  • json を戻すとかその辺に気が利いてない

基本は機能が足らないです。Django をマネして色々な機能を追加したりしているようですがどれも中途半端です。

Flask の魅力

  • プロトタイプを作る場合はさくさくできる
  • データベース連携しないでモックとか、こんなイメージでは良い
  • データベース連携しないものなら、そもぞもデータベースが連携が考慮されていないのでいい感じ
    • たとえば外部の API との連携しかしないサーバとか
  • Flask をコアとしてそれ以外は全部自前で実装するというのであれば正直ありだとは思う
    • ただそれを仕事でやるのはかなり不毛だとおもうので、ある程度オールインワンなフレームワークを使うべき
  • 良くも悪くもシンプル
  • ちょっとしたサイトを作ってみるというのにはかなり向いていると思う
  • これで足らないライブラリやモジュールを書いて、色々学ぶというのには最適

Flask を選んだ理由

  • そもそも外部データベースを使用しない
  • 外部 API がメイン
  • 拡張を使う予定が無い
    • 使うとしても Flask-Principal くらいで、これも fork して自前で書き直すので問題無い
  • ページ数としてはかなり小さい

感想

最初は Django で書いていたのですが、テストとか色々やりづらかったり、元が大きかったり、データベース連携が前提だったりと、あまりにも大きすぎて Flask に切り替えました。

Blueprints は便利ですね、自分でプラガブルな仕組みが作れるのはありがたいです。

Flask を業務に持ち込むとしたらかなり限定的な状況な気がします。また作る人は多くても 1~2 くらいでしょうか。それ以上になると、オレオレのコードが増えてきすぎて、別のフレームワークを採用した方が、イイ気がします。

基本的にデータベース連携しないウェブアプリはほぼ無いと思いますので、それがある時点で Flask は選択肢から外れるんじゃ無いかなぁと。ちょこっとしたツールやウェブサイトを作るにはサクサク作れていいんですけどね。

さすがに仕事で作るとメンテナンスや拡張が合ったりすると思うのでそれを考えるとかなり厳しい気がします。