Submit Search
Webフレームワークを作ってる話 #osakapy
2 likes
2,002 views
Masashi Shibata
WSGIの話と自作WAFのKobinの話
Technology
Read more
1 of 29
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
More Related Content
PPTX
Robot Framework (のSelenium2Libraryのお話)
泰 増田
PDF
Werkzeugを使ってみた #osakapy 2016/04
敦志 金谷
PPTX
Taming robotframework
泰 増田
PPTX
Re: WebServer BenchMarking
Ryo Tomidokoro
PDF
PHPとJavaScriptの噺
Shogo Kawahara
PDF
恋に落ちるデプロイツール
totty jp
PDF
minneで学ぶクラウド脳
Uchio Kondo
PDF
PHPデプロイツールの世界
Yuuki Takezawa
Robot Framework (のSelenium2Libraryのお話)
泰 増田
Werkzeugを使ってみた #osakapy 2016/04
敦志 金谷
Taming robotframework
泰 増田
Re: WebServer BenchMarking
Ryo Tomidokoro
PHPとJavaScriptの噺
Shogo Kawahara
恋に落ちるデプロイツール
totty jp
minneで学ぶクラウド脳
Uchio Kondo
PHPデプロイツールの世界
Yuuki Takezawa
What's hot
(20)
PDF
Web Framework Benchmarksと Perl の現状報告会 YAPC::Asia Tokyo 2014 LT
Masahiro Nagano
PPTX
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
PPTX
PHP x AWS でスケーラブルなシステムをつくろう
Taiji INOUE
PDF
NorikraのJVMチューンで苦労している話
SATOSHI TAGOMORI
PDF
Haikara
jewel12
PDF
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Yu Nobuoka
PDF
ChefとPuppetの比較
Sugawara Genki
PDF
chat bot framework for Java8
masahitojp
PDF
apachehereというPHPのBuiltin Serverっぽいやつをつくった
Junichi Ishida
PDF
Closure Compiler Updates for ES6
Teppei Sato
PPTX
明日から始める Chef 入門 #bpstudy
Takeshi Komiya
PDF
Puppet on AWS
Sugawara Genki
PDF
Real World PHP in pixiv
Kenta USAMI
PDF
Djangoフレームワークの紹介 OSC2015北海道
Shinya Okano
PDF
仮想マシンを使った開発環境の簡単共有方法
Hideo Takahashi
PDF
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編
hiboma
KEY
Composer
Shogo Kawahara
PDF
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
PDF
誰でも出来るローカル開発環境の作り方
666oh666
PPTX
わんくま東京#46 予告編
Sunao Tomita
Web Framework Benchmarksと Perl の現状報告会 YAPC::Asia Tokyo 2014 LT
Masahiro Nagano
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
PHP x AWS でスケーラブルなシステムをつくろう
Taiji INOUE
NorikraのJVMチューンで苦労している話
SATOSHI TAGOMORI
Haikara
jewel12
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Yu Nobuoka
ChefとPuppetの比較
Sugawara Genki
chat bot framework for Java8
masahitojp
apachehereというPHPのBuiltin Serverっぽいやつをつくった
Junichi Ishida
Closure Compiler Updates for ES6
Teppei Sato
明日から始める Chef 入門 #bpstudy
Takeshi Komiya
Puppet on AWS
Sugawara Genki
Real World PHP in pixiv
Kenta USAMI
Djangoフレームワークの紹介 OSC2015北海道
Shinya Okano
仮想マシンを使った開発環境の簡単共有方法
Hideo Takahashi
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編
hiboma
Composer
Shogo Kawahara
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
誰でも出来るローカル開発環境の作り方
666oh666
わんくま東京#46 予告編
Sunao Tomita
Ad
Viewers also liked
(20)
PDF
Introduction of Feedy
Masashi Shibata
PDF
Goji とレイヤ化アーキテクチャ
Shiroyagi Corporation
PDF
Pyconjp2016 pyftplib
Shinya Okano
PDF
幾個曾經 發生在數位系的小故事
小均 張
PDF
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
Antoine Choppin
PDF
Python入門 コードリーディング - PyConJP2016
Shinya Okano
PDF
Robot framework association intro
Ismo Aro
PDF
利用 Appium + Robot Framework 實現跨平台 App 互動測試
Jeremy Kao
PDF
Pythonで実現する4コマ漫画の分析・評論
esu ji
PDF
4コマ漫画 Machine Learning 分析データを集めたかった話
esu ji
PPTX
Web testing automation
kuozui
PDF
Python入門
Shohei Okada
PDF
開放資料與 Drupal
Charles Chuang
PPTX
Entity framework + Linq 介紹
Alan Tsai
PDF
並行與平行
Justin Lin
PDF
ATDD Using Robot Framework
Pekka Klärck
PDF
JavaCro'14 - Test Automation using RobotFramework Libraries – Stojan Peshov
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
PDF
Functional Tests Automation with Robot Framework
laurent bristiel
PDF
Frontend django, Django Web 前端探索
Tim (文昌)
PDF
Rails Girls Weekly - 初探前端網頁技術 JavaScript 3/3
Kuro Hsu
Introduction of Feedy
Masashi Shibata
Goji とレイヤ化アーキテクチャ
Shiroyagi Corporation
Pyconjp2016 pyftplib
Shinya Okano
幾個曾經 發生在數位系的小故事
小均 張
RaspberryPiで日本の子供たちにプログラミングのパッションを伝えよう!
Antoine Choppin
Python入門 コードリーディング - PyConJP2016
Shinya Okano
Robot framework association intro
Ismo Aro
利用 Appium + Robot Framework 實現跨平台 App 互動測試
Jeremy Kao
Pythonで実現する4コマ漫画の分析・評論
esu ji
4コマ漫画 Machine Learning 分析データを集めたかった話
esu ji
Web testing automation
kuozui
Python入門
Shohei Okada
開放資料與 Drupal
Charles Chuang
Entity framework + Linq 介紹
Alan Tsai
並行與平行
Justin Lin
ATDD Using Robot Framework
Pekka Klärck
JavaCro'14 - Test Automation using RobotFramework Libraries – Stojan Peshov
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
Functional Tests Automation with Robot Framework
laurent bristiel
Frontend django, Django Web 前端探索
Tim (文昌)
Rails Girls Weekly - 初探前端網頁技術 JavaScript 3/3
Kuro Hsu
Ad
Similar to Webフレームワークを作ってる話 #osakapy
(20)
PDF
Backlogでの Perlのつかいかた
Ryuzo Yamamoto
PPTX
HTML5&API総まくり
Shumpei Shiraishi
PPTX
HTML5最新動向
Shumpei Shiraishi
PPTX
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
genroku
PDF
Python × Herokuで作る 雑談slack bot
dcubeio
PDF
近頃のDockerネットワーク
Yuji Oshima
PDF
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
Hirotaka Kawata
PDF
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
R S
PDF
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
fukuoka.ex
PDF
[Japan Tech summit 2017] DEP 005
Microsoft Tech Summit 2017
PDF
Isomorphic web development with scala and scala.js
TanUkkii
PDF
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
PDF
How to run P4 BMv2
Kentaro Ebisawa
KEY
Composer による依存管理 と Packagist によるライブラリの公開
Shogo Kawahara
PDF
Jjug springセッション
Yuichi Hasegawa
PDF
Observability, Service Mesh and Microservices
Taiki
PPTX
AKS (k8s) Hands on Lab Contents
Yoshio Terada
PPTX
2012 0623-x-road-tokyo-xoops-x(ten)
Naoki Okino
PDF
RESTful Webサービス
Kentaro Inomata
PPTX
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
fukuoka.ex
Backlogでの Perlのつかいかた
Ryuzo Yamamoto
HTML5&API総まくり
Shumpei Shiraishi
HTML5最新動向
Shumpei Shiraishi
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
genroku
Python × Herokuで作る 雑談slack bot
dcubeio
近頃のDockerネットワーク
Yuji Oshima
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
Hirotaka Kawata
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
R S
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
fukuoka.ex
[Japan Tech summit 2017] DEP 005
Microsoft Tech Summit 2017
Isomorphic web development with scala and scala.js
TanUkkii
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
How to run P4 BMv2
Kentaro Ebisawa
Composer による依存管理 と Packagist によるライブラリの公開
Shogo Kawahara
Jjug springセッション
Yuichi Hasegawa
Observability, Service Mesh and Microservices
Taiki
AKS (k8s) Hands on Lab Contents
Yoshio Terada
2012 0623-x-road-tokyo-xoops-x(ten)
Naoki Okino
RESTful Webサービス
Kentaro Inomata
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
fukuoka.ex
More from Masashi Shibata
(20)
PDF
MLOps Case Studies: Building fast, scalable, and high-accuracy ML systems at ...
Masashi Shibata
PDF
実践Djangoの読み方 - みんなのPython勉強会 #72
Masashi Shibata
PDF
CMA-ESサンプラーによるハイパーパラメータ最適化 at Optuna Meetup #1
Masashi Shibata
PDF
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
Masashi Shibata
PDF
Implementing sobol's quasirandom sequence generator
Masashi Shibata
PDF
DARTS: Differentiable Architecture Search at 社内論文読み会
Masashi Shibata
PDF
Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn
Masashi Shibata
PDF
PythonとAutoML at PyConJP 2019
Masashi Shibata
PDF
Djangoアプリのデプロイに関するプラクティス / Deploy django application
Masashi Shibata
PDF
Django REST Framework における API 実装プラクティス | PyCon JP 2018
Masashi Shibata
PDF
Django の認証処理実装パターン / Django Authentication Patterns
Masashi Shibata
PDF
RTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMP
Masashi Shibata
PDF
システムコールトレーサーの動作原理と実装 (Writing system call tracer for Linux/x86)
Masashi Shibata
PDF
Golangにおける端末制御 リッチなターミナルUIの実現方法
Masashi Shibata
PDF
How to develop a rich terminal UI application
Masashi Shibata
PDF
Pythonのすすめ
Masashi Shibata
PDF
pandasによるデータ加工時の注意点やライブラリの話
Masashi Shibata
PDF
Pythonistaのためのデータ分析入門 - C4K Meetup #3
Masashi Shibata
PDF
テスト駆動開発入門 - C4K Meetup#2
Masashi Shibata
PDF
Introduction of PyCon JP 2015 at PyCon APAC/Taiwan 2015
Masashi Shibata
MLOps Case Studies: Building fast, scalable, and high-accuracy ML systems at ...
Masashi Shibata
実践Djangoの読み方 - みんなのPython勉強会 #72
Masashi Shibata
CMA-ESサンプラーによるハイパーパラメータ最適化 at Optuna Meetup #1
Masashi Shibata
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
Masashi Shibata
Implementing sobol's quasirandom sequence generator
Masashi Shibata
DARTS: Differentiable Architecture Search at 社内論文読み会
Masashi Shibata
Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn
Masashi Shibata
PythonとAutoML at PyConJP 2019
Masashi Shibata
Djangoアプリのデプロイに関するプラクティス / Deploy django application
Masashi Shibata
Django REST Framework における API 実装プラクティス | PyCon JP 2018
Masashi Shibata
Django の認証処理実装パターン / Django Authentication Patterns
Masashi Shibata
RTMPのはなし - RTMP1.0の仕様とコンセプト / Concepts and Specification of RTMP
Masashi Shibata
システムコールトレーサーの動作原理と実装 (Writing system call tracer for Linux/x86)
Masashi Shibata
Golangにおける端末制御 リッチなターミナルUIの実現方法
Masashi Shibata
How to develop a rich terminal UI application
Masashi Shibata
Pythonのすすめ
Masashi Shibata
pandasによるデータ加工時の注意点やライブラリの話
Masashi Shibata
Pythonistaのためのデータ分析入門 - C4K Meetup #3
Masashi Shibata
テスト駆動開発入門 - C4K Meetup#2
Masashi Shibata
Introduction of PyCon JP 2015 at PyCon APAC/Taiwan 2015
Masashi Shibata
Webフレームワークを作ってる話 #osakapy
1.
WAFをつくってる話 大阪Pythonユーザの集まり 2016/04 MASASHI SHIBATA !
c_bata_
2.
@c_bata_ django / flask
/ pandas 明石高専
3.
話すこと 1. WSGIの話とか 2. WAFに欲しい機能を考える 3.
Kobinの紹介 4. Kobinにおける取り組み
4.
WSGI Web Server Gateway
Interface
5.
WSGI?? • Pythonで作るWebアプリケーションの実装方 法の標準化仕様 • 実装を切り離して、WebサーバとWAFの組み 合わせを柔軟に https://www.python.org/dev/peps/pep-3333/ https://www.python.org/dev/peps/pep-333/
6.
WSGI v1.0.1 (PEP3333) •
2つの引数を持った呼び出し可能なオブジェクト • 第2引数として渡されたオブジェクトにHTTPス テータスコードと (header_name, header_value) タプルのリストを渡す • 返り値はバイト文字列を yield する iterableなオ ブジェクト https://www.python.org/dev/peps/pep-3333/
7.
WSGI v1.0.1 (PEP3333) def
app(env, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) return [b"Hello World"] • 2つの引数を持った呼び出し可能なオブジェクト https://www.python.org/dev/peps/pep-3333/
8.
WSGI v1.0.1 (PEP3333) def
app(env, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) return [b"Hello World"] • 第2引数として渡されたオブジェクトの引数は HTTPステータスコードと (header_name, header_value) タプルのリスト https://www.python.org/dev/peps/pep-3333/
9.
WSGI v1.0.1 (PEP3333) def
app(env, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) return [b"Hello World"] • バイト文字列を yield する iterable を返さなければ ならない • 例えば、バイト文字列のリストを返すようにする https://www.python.org/dev/peps/pep-3333/
10.
Hello World with
gunicorn $ gunicorn -w 1 main:app [2016-04-15 10:17:00 +0900] [1873] [INFO] Starting gunicorn 19.4.5 [2016-04-15 10:17:00 +0900] [1873] [INFO] Listening at: http://127.0.0.1:8000 (1873) [2016-04-15 10:17:00 +0900] [1873] [INFO] Using worker: sync [2016-04-15 10:17:00 +0900] [1878] [INFO] Booting worker with pid: 1878 ^C[2016-04-15 10:17:08 +0900] [1873] [INFO] Handling signal: int [2016-04-15 10:17:08 +0900] [1878] [INFO] Worker exiting (pid: 1878) [2016-04-15 10:17:08 +0900] [1873] [INFO] Shutting down: Master def app(env, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) return [b"Hello World"]
11.
Hello World with
wsgiref $ python main.py 127.0.0.1 - - [15/Apr/2016 10:24:21] "GET / HTTP/1.1" 200 11 127.0.0.1 - - [15/Apr/2016 10:24:21] "GET /favicon.ico HTTP/1.1" 200 11 def app(env, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) return [b"Hello World"] if __name__ == '__main__': from wsgiref.simple_server import make_server httpd = make_server('', 8080, app) httpd.serve_forever()
12.
WAFで欲しい機能を考える
13.
最低限欲しい機能 • ルーティング • どこにアクセスしても
Hello World • HTMLテンプレート • 今はplain text返してるだけ • Jinja2のTemplate Loaderを用意
14.
最低限欲しい機能 • 静的ファイルをいい感じに返す機能 • 本番だとNginxとか使うけど、開発中は... •
リクエスト・レスポンスオブジェクト • リクエスト情報はenvが渡されてるけど、 ただのdictなのでうまくパースしてほしい • ステータスとかヘッダ情報をコントロール
15.
a small and
statically-typed web framework kobin https://github.com/c-bata/kobin
16.
a small and
statically-typed web framework kobin https://github.com/c-bata/kobin
17.
Hello World from kobin
import Kobin app = Kobin() @app.route('^/(?P<name>w*)$') def hello(name: str): return "Hello {}!!".format(name) if __name__ == '__main__': app.run() • 日本語: https://kobin.readthedocs.org/ja/latest/ • English: https://kobin.readthedocs.org/en/latest/
18.
Hello World with
Jinja2 import os from kobin import Kobin, template app = Kobin() @app.route('^/$') def index(): return template('index') • https://github.com/c-bata/kobin-example • https://kobin.herokuapp.com/
19.
特徴 • Type Hintsの活用 •
Bottleのコードを読んでる時に結構混乱 • mypy 使いたい • ルーティングへの活用
20.
Routing in Django from
django.conf.urls import url urlpatterns = [ url(r'^blog/page(?P<num>[0-9]+)/$', page), ] def page(request, num="1"): # Output the appropriate page of blog entries ... https://docs.djangoproject.com/en/1.9/topics/http/urls/ • 引数が全て文字列
21.
Routing in Bottle from
bottle import route @route('/object/<id:int>') def callback(id): assert isinstance(id, int) http://bottlepy.org/docs/dev/tutorial.html#request-routing • 独自DSL • 型が分かるため、view関数には型変換したオブジェ クトを渡すことができる
22.
ルーティングに対する考察 • 正規表現ベース (Django等) •
自由度は高い • 型情報を取得出来ない • 独自DSL (Bottle, Flask等) • 自由度は低い • 型情報を自由に付けれる
23.
Routing in Kobin from
kobin import Kobin app = Kobin() @app.route('^/years/(?P<year>d{4})$') def casted_year( year: int ): return 'A "year" argument is integer? : {}’ .format(isinstance(year, int)) https://github.com/c-bata/kobin/blob/master/example/hello_world.py • 正規表現により自由度が高い • Type Hintsの恩恵(IDE, mypy)をそのまま受けれる
24.
Ecosystem Threats to
Python • Pythonのエコシステムはその巨大さゆえに、バー ジョンアップについていきづらい • コミュニティとしてもPython3に移行していきたい • Type Hintsを移行のきっかけに PyCon APAC/Taiwan 2015: Keynote
25.
References • Documentations • https://kobin.readthedocs.org/ja/latest/ •
https://kobin.readthedocs.org/en/latest/ • Kobin Example • https://github.com/c-bata/kobin-example • https://kobin.herokuapp.com/
26.
おまけ PEP333とPEP3333
27.
PEP333 と PEP3333 $
python2.7 >>> b'hoge' + u'日本語' u'hogeu65e5u672cu8a9e' $ python3.5 >>> b'hoge' + u'日本語' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't concat bytes to str
28.
PEP333 と PEP3333 •
PEP333 (WSGI v1.0) • Python2ではbytesとstrを結合出来たり… • Python3で文字列の扱いが大きく変わった • PEP3333 (WSGI v1.0.1) • 後方互換は保ったまま、文字列の扱いを整備して 長年たまってたデファクトの修正案も取り込み
29.
Thanks!
Download