👏

Python(3) webフレームワーク flask概ね互換で最軽量級 bottlepy

2021/09/04に公開

ネット上では概ねdjango/flaskで二分されてるようだ。

https://qiita.com/tags/django
https://qiita.com/tags/flask

しかしそれ以外にももちろん存在する。その中でも最軽量級と思われるのがこれだ。

https://bottlepy.org/docs/dev/

他所様にいいサンプルソースがあったので Python3 Bottleフレームワーク入門(その1)- 基礎編サーバ起動 使わせてもらおう

from bottle import route, run, template
 
@route('/hello/<name>')
def index(name):
    return template('<b>Hello {{name}}</b>!', name=name)
 
run(host='0.0.0.0', port=8080)

もうこのサンプルソース7行みただけで、一目瞭然だろう。djangoとは記述量は比べ物にならないほど少ない。

とはいえflaskも非常に書き方が似てるので、何処が違うの?と思うかもしれない。
flaskとは実装スタイルはほとんど変わりません :P

事実、両者のデコレータを同時に設置すれば、重複して実装できる。

ただし、引数の型を指定したい場合には、bottlepyは後置、flaskは前置なので注意。

wsgi, Bottle, Flask の速度差 - Qiita

import flask
import bottle

app = flask.Flask(__name__)
bottle_app = bottle.app()

@bottle_app.route('/')
@app.route('/')
def index():
    return b"Hello, World"

def wsgi(env, start):
    c = b"Hello, World"
    start("200 OK", [('Content-Type', 'text/plain'), ('Content-Length', str(len(c)))])
    return [c]

# 起動方法
# Flask:  gunicorn -k meinheld.gmeinheld.MeinheldWorker -b :6000 app:app
# Bottle: gunicorn -k meinheld.gmeinheld.MeinheldWorker -b :6000 app:bottle_app
# wsgi:   gunicorn -k meinheld.gmeinheld.MeinheldWorker -b :6000 app:wsgi

前出のリンクによれば、bottleはflaskの2倍程度の速度はでるらしい。
他のメリットは、ファイル数が少ないことによる取り回しの簡便さ。

https://github.com/bottlepy/bottle

リポジトリに lib とか src とかのディレクトリがないことから一目瞭然である。
いや別にflaskのファイルが多いのが駄目とは言わない。でもbottleで済む実装なら、bottle使ったほうがサーバ設置も楽であろう。

例えば開発ソースと一緒にcommitしてデプロイするのもありだろう。(最近のPaaSは大抵 はrequirements.txtを読み込むのでその必然性は少ないが)

比較記事があちこちにあるので、興味があったら読むといいだろう。英語だけど。

https://codeahoy.com/compare/flask-vs-bottle

https://www.slant.co/versus/1398/1741/~flask_vs_bottle

Discussion