本日ついに、Flaskのnew versionがリリースされました。めでたいですね! 前回のリリースが2013/06/14だったので、ほぼ3年ぶりです。
バージョンを1.0に上げるという話がありマイルストーンも立っていましたが、0.11としてリリースされました。 1.0にしなかったのは、Flaskのコマンドラインインタフェースが特に大きな理由となっているようです。 この記事では、そのコマンドラインインタフェースを追ってみます。
Flask 0.11 Released | The Pallets Projects
Flask-Script
これまでdjangoのmanage.pyみたいなものが欲しい場合、Flask-Scriptというライブラリがよく使われていたと思います。
# http://flask-script.readthedocs.io/en/latest/ # manage.py from flask.ext.script import Manager from myapp import app manager = Manager(app) @manager.command def hello(): print "hello" if __name__ == "__main__": manager.run()
こんな感じのmanage.pyを作成すると、 manage.py runserver
とか manage.py shell
が使えます。
またFlask-MigrateというFlask-Scriptを利用したライブラリを使うことで、DBのマイグレーション等もDjangoライクに行うことができ、とても便利でした。
ちなみにFlask-Migrateの開発者のmiguelgrinbergさんは、Flask Web Developmentという書籍でも紹介しています(これとても良書でした)。
Flask Web Development: Developing Web Applications with Python
追記
Flask-Migrateは今回のFlaskのClickベースのCLIをサポートするのか聞いてみたところ、後方互換を保つように導入するのがやはり難しそうな感じ。FlaskのClickベースCLIのサポートはまだ時間がかかるかなぁという雰囲気
Flaskの新しいコマンドラインインターフェース
Added :command:flask and the flask.cli module to start the local debug server through the click CLI system. This is recommended over the old flask.run() method as it works faster and more reliable due to a different design and also replaces Flask-Script.
Flask開発者のmitsuhikoさんはclickというコマンドラインインタフェースを作成するための便利なライブラリを開発していました。 Flask-ScriptやFlask-Migrateは便利で広く使われていましたが、Flask-ScriptがClickを使わずに実装されています。 今回の変更はClickベースのCLIに統一したかったようです。早速0.11を入れてHelpを表示してみました
$ flask --help Usage: flask [OPTIONS] COMMAND [ARGS]... This shell command acts as general utility script for Flask applications. It loads the application configured (either through the FLASK_APP environment variable) and then provides commands either provided by the application or Flask itself. The most useful commands are the "run" and "shell" command. Example usage: $ export FLASK_APP=hello $ export FLASK_DEBUG=1 $ flask run Options: --help Show this message and exit. Commands: run Runs a development server. shell Runs a shell in the app context.
Run ServerとRun Shell
まずアプリケーションがFlaskのアプリケーションを見つけられるように環境変数 FLASK_APP
でPythonのモジュールパスもしくはファイルパスを指定する必要があります。
サーバやシェルの起動は、最初からコマンドが用意されていて、↓のように行うことができます。
$ export FLASK_APP=hello $ flask run # Run Server $ flask shell # Run Shell
またデバッグモードで起動したい際も FLASK_DEBUG
環境変数で指定できます。いいですね。
CLIのカスタマイズ
ClickベースのCLIに統一されたため、自作のコマンドを追加することがClickに慣れている人は簡単に行えるようになりました。
import os import click from flask.cli import FlaskGroup def create_wiki_app(info): from yourwiki import create_app return create_app( config=os.environ.get('WIKI_CONFIG', 'wikiconfig.py')) @click.group(cls=FlaskGroup, create_app=create_wiki_app) def cli(): """This is a management script for the wiki application.""" if __name__ == '__main__': cli()
CLIプラグインの作成
プラグインを作りたい場合も↓のように、clickをベースのコードで記述出来ます。
import click @click.command() def cli(): """This is an example command."""
おわりに
とりあえず0.11のリリースおめでとうございます。 ClickベースのCLIに統一されるのは個人的にとてもうれしいですね。
他にもApplicationのFactory関数の扱いをどうすればいいかなど、ドキュメントの方に詳しく書かれているので、Flaskのプロジェクトを0.11アップグレードする際はこれを読みながらやると良いと思います。
http://flask.pocoo.org/docs/0.11/cli/
Flask Web Development: Developing Web Applications with Python
- 作者: Miguel Grinberg
- 出版社/メーカー: O'Reilly Media
- 発売日: 2018/03/25
- メディア: ペーパーバック
- この商品を含むブログ (1件) を見る