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

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

Upload: -

Post on 26-Jan-2017

479 views

Category:

Software


2 download

TRANSCRIPT

Werkzeugを 使ってみた

金谷敦志 #osakapy 2016/04

Werkzeugといえば…

• 読み方わからん!

2http://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