Werkzeugを

使ってみた
金谷敦志
#osakapy 2016/04
Werkzeugといえば…
• 読み方わからん!
2
http://qiita.com/mzsm/items/dff7db90151220bb5b28
Werkzeugの読み方
• ヴェルクツォイク!
3
http://qiita.com/mzsm/items/dff7db90151220bb5b28
Werkzeug - The Python WSGI Utility Library
• WSGIアプリを書くときのユーティリティ
• Flaskのベースライブラリでもある
• こういう機能があります
• HTTP header parsing and dumping
• Easy to use request and response objects
• Interactive JavaScript based in-browser debugger
• 100% WSGI 1.0 compatible
• Supports Python 2.6, 2.7 and 3.3.
• Unicode support
• Basic session and signed cookie support
• URI and IRI utilities with unicode awareness
• builtin library of fixes for buggy WSGI servers and browsers
• integrated routing system for matching URLs to endpoints and vice versa
4
Werkzeugをどこに使ったか?
• 開発に携わるWebアプリケーションのローカルPC開発環境にて。
5
ローカルPCでの開発の悩み
• Apache上でWebアプリケーションを実行しているところがツラい
• 開発環境の構築が面倒
• Apacheの設定ファイルが秘伝のタレ化
• IDEとは別のプロセスで動かすため、デバッグがちょっと手間
6
Werkzeugの簡易Webサーバー機能を使う
• Apacheの別プロセスとしてではなく、1つのPythonプロセスとして
WSGIアプリケーションを起動
• IDEのローカルデバッガが使える
• 開発環境の構築が楽 (必要なライブラリを入れてすぐ実行できる)
7
from werkzeug.serving import run_simple
def application(environ, start_response):
# returns WSGI application
if __name__ == '__main__':
run_simple('localhost', 4000, application)
秘伝のタレ部分はMiddlewareを使う
• http://werkzeug.pocoo.org/docs/0.11/middlewares/
• Webアプリケーションに必要な処理を間に挟められる
• Chain of Responsibility形式で使うことができる
• Werkzeugが標準で提供しているMiddleware
• SharedDataMiddleware → URLとローカルフォルダを紐付ける
• DispatcherMiddleware → URLと別のWSGIアプリを紐付ける
8
from werkzeug.serving import run_simple
from werkzeug.wsgi import SharedDataMiddleware
if __name__ == '__main__':
application = SharedDataMiddleware(app, {
'/static': 'dir/to/static/contents'
})
run_simple('localhost', 4000, application)
必要なものがないので書いた
• こういうMiddleware
• 静的コンテンツが来たら、まずローカルフォルダを見て、該当す
るファイルがあればそれを返す
• なければ元リクエストヘッダをそのまま引き継いで指定の別Webサー
バーにリクエストを投げて結果をレスポンスとして返す
• ※静的コンテンツを多く抱える開発現場で需要あるかも?
• ※もう少し汎用的に書けると思うので、閃いたらソース公開予定
9
ローカルPCでの開発が改善
• 見事、Aacheいらずの環境ができた
• WebアプリケーションをIDEから起動してデバッグが容易になった
• URLマッピング周りがすっきりした
10
他、Werkzeugの便利ポイント
• ソースコードの自動リロード
• 簡易Webサーバーへのリクエスト単位でプロファイリング
• ブラウザ上で動くデバッガ
• …
• などなどWebの開発で便利な機能が色々あります。
11
Werkzeugの不便なところ
• 同僚が「ヴェルクツォイク」という発音を覚えてくれない
• 業務改善に支障をきたすレベル(言い過ぎ)
• それ以外は便利。
12
Werkzeugを

使ってみた
金谷敦志
#osakapy 2016/04

Werkzeugを使ってみた #osakapy 2016/04