Hatena::ブログ(Diary)

Twisted Mind

2012-01-14

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 は選択肢から外れるんじゃ無いかなぁと。ちょこっとしたツールやウェブサイトを作るにはサクサク作れていいんですけどね。

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

tell-ktell-k 2012/01/14 15:18 こんにちわ。自分もFlaskを良く使うので大変参考になります。
ありがとうございます。

> json を戻すとかその辺に気が利いてない

これは jsonify では不十分なケースがあるという事でしょうか。
http://flask.pocoo.org/docs/api/#returning-json

> Flask で書かれた OSS が意外にない

僕も昔、探してみたのですが、下記のページに、Flask製のアプリ一覧を見つけられました。
(OSSというよりは野良サイトも含めてですが。。)

http://flask.pocoo.org/community/poweredby/

VoluntasVoluntas 2012/01/14 15:34 > tell-k
普段使って頂いている型からのご意見ありがとうございます。

自分は一週間程度の"にわか"なので、間違っている点がありましたら是非突っ込みなんかを。

> JSON 周り
これだと関数にべたべたになってしまうので分けるときスマートじゃ無いなぁと感じていました。
結局おまけ機能なので、遊びで使うにはいいですが少しこったことをすると面倒になってしまいますね。

> Flask なサイト
クリックしたら繋がらなかったり、終了していたりのサイトが多くてますます残念です。
長生きしているさいとはやはり小さめの「単機能」なサイトが多いみたいですね。

tell-ktell-k 2012/01/14 15:49 返信ありがとうございます。

> クリックしたら繋がらなかったり、終了していたりのサイトが多くてますます残念です。
本当ですねw なんかすいませんw

neck_warmerneck_warmer 2012/01/14 16:37 こんにちは。

Flaskは、全体像をつかみやすいのと、(表面的には)HTTPリクエストをそのまま捌くような感じなので、教育には最適だと思います。初心者にDjangoを与えると、抽象化レイヤが多すぎて自分が一体何をやっているのかサッパリ分からないでしょう。

個人的には、WAFにORマッパを標準添付するのはモノリシックすぎて良くないと思っていますが、どうせ巨大なJinja2が入ってるなら、認証系とForm generation/validationくらいも標準で入れてくれればいいのにと思います。

あと、データベースとの連携ですが、RDBMSではなくNoSQLデータベース(MongoDBとか)で対応できる程度のアプリなら、ORMが要らないので素のFlaskでもいけます。

全部入りのフレームワークではなく、小さい部品を組み合わせて開発するのはUNIXのtoolkitアプローチのように色々利点がある(再利用性、教育コスト低、etc.)と思うので、もう少し洗練されていったら良いなと思っています。

heavenshellheavenshell 2012/01/14 18:08 Flask で書かれた OSS となると、MoinMoin2 とかですかね
仰るように少ないですね。
http://bitbucket.org/thomaswaldmann/moin-2.0

VoluntasVoluntas 2012/01/14 19:13 > neck_warmer

> 教育用
おっしゃるとおり、教育用には向いているかなぁと思いました。初めての人が Web アプリを書いてみるきっかけを作るフレームワークという感じですよね。

> ORM

認証系、フォーム関連は最低限デフォルトで入っていてもイイ気はしますね。ただ、そうなると大きくなりすぎてしまうんですかね。フォームも JS でやっちゃいたいひとがいるかも知れませんし。

個人的には ORM が「うまいこと」くっついている方が好みです。この辺は好き嫌いがありそうですね。

> KVS

Mongo や Riak 等でも結局扱いやすい ORM が欲しくなってきたりするかなぁと。ただ、 KVS と SQL はそれぞれ適材適所だと思うので、KVS だけで作れるのであれば選択肢としてアリかも知れませんね。

ただ結局セッションや認証まわりを考えると ... 。

> 小さなフレームワークとして

遊びだったりするならアリだと思うのですが、仕事で使うとなると小さいと開発する人のスキルを選んでしまうのかなと。本文にも書きましたがメンテナンスコストを考えるとオレオレな部分が増えない方がいいと思っています。

再利用に関しても、上手く使い回せればいいと思うのですがそうなると結局全部入りを目指してしまう気がするんですよね ... 。

ただ、シンプルを心がければサクサク作れるので気に入っています。

VoluntasVoluntas 2012/01/14 19:14 > heavenshell

あ、MoinMoin2 って Flask なんですね、知りませんでした。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

トラックバック - http://d.hatena.ne.jp/Voluntas/20120114/1326519732