ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく -...
TRANSCRIPT
![Page 2: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/2.jpg)
自己紹介
![Page 3: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/3.jpg)
id:cho45http://www.lowreal.net/
![Page 4: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/4.jpg)
株式会社はてな
京都8F勤務
![Page 5: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/5.jpg)
Perl (バックエンド)
JavaScript (フロントエンド)
Ruby (ツール作り)
Scala (たまにあそびで)
Java (Android アプリ)
![Page 6: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/6.jpg)
Config::PitConfig::ENVPlack::App::CocProxySQL::NamedPlaceholder
JSDeferred
![Page 7: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/7.jpg)
最近は
window.postMessageにハマっています
![Page 8: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/8.jpg)
が
![Page 9: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/9.jpg)
その話はしません
![Page 10: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/10.jpg)
趣味
![Page 11: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/11.jpg)
神社巡り
![Page 12: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/12.jpg)
写真
![Page 13: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/13.jpg)
プログラミングコード群: http://github.com/cho45
日記: http://subtech.g.hatena.ne.jp/cho45/
![Page 14: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/14.jpg)
本題
![Page 15: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/15.jpg)
の前に
![Page 16: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/16.jpg)
前提
![Page 17: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/17.jpg)
1.長期的にメンテナンスする
2.大規模
3.複数人開発
![Page 18: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/18.jpg)
個人で使うフレームワークとか正
直どうでもいいと思う。
![Page 19: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/19.jpg)
フレームワーク
つかってますか
![Page 20: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/20.jpg)
Catalyst, Jifty, Dancer, CGI::Application, HTTP::
Engine, Mason, Squatting, Continuity, Maypole, Tatsumaki,
Mojolicious, Ark, Noe, Kamui, Amon2
ref. http://plackperl.org/
![Page 21: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/21.jpg)
ぼくのかんがえたさい
きょうのうぇぶあぷり
けーしょんふれーむ
わーく
![Page 22: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/22.jpg)
アジェンダ
●良いフレームワークとはなにか
●信頼性設計とかについて
●テストについて
![Page 23: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/23.jpg)
ぼくのかんがえたさい
きょうのうぇぶあぷり
けーしょんふれーむ
わーく
![Page 24: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/24.jpg)
を考える前に
![Page 25: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/25.jpg)
フレームワークの
![Page 26: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/26.jpg)
メリット デメリット
を整理します
![Page 27: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/27.jpg)
メリット
![Page 28: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/28.jpg)
共同開発しやすい
安全なフレームワークは安全
形になるまで早い
バッドノウハウの蓄積
うまくいかないとき
フレームワークのせいにできる
![Page 29: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/29.jpg)
共同開発しやすい
安全なフレームワークは安全
特に重要
![Page 30: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/30.jpg)
デメリット
![Page 31: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/31.jpg)
読むコードが増える
自由度がない
拡張性がない
フレームワークが糞だと
全てが糞になる
![Page 32: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/32.jpg)
フレームワークを覚えるのに
必死になりがち
挙動が意味不明
マジカルなことやりがち
![Page 33: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/33.jpg)
良いフレームワークとは?
![Page 34: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/34.jpg)
読むコードが最小
(共同開発のために)
→ 薄いフレームワーク
安全であること
→ 信頼性設計
![Page 35: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/35.jpg)
読むコードが最小
![Page 36: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/36.jpg)
だいたいフレームワークは
結局ハマって
全部コード読む
![Page 37: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/37.jpg)
だいたいフレームワークは
結局ハマって
全部コード読む
→ 学習コスト増大
![Page 38: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/38.jpg)
フレームワークのコードは
マジカルすぎて
意味不明
![Page 39: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/39.jpg)
フレームワークのコードは
マジカルすぎて
意味不明
→ 読むと Perl に詳しく
![Page 40: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/40.jpg)
フレームワークのコードは
マジカルすぎて
意味不明
→ 学習コスト アゲ♂アゲ
![Page 41: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/41.jpg)
ある prepan.org 作者のつぶやき
「○○っていうフレームワークつかってるん
だけど、もう嫌なんだよね。
フルスタックなんだけどドキュメントよくわ
からないし。
中身読もうとすると意味不明だし」
![Page 42: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/42.jpg)
薄いフレームワークが良い
↑良くいう
![Page 43: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/43.jpg)
薄いフレームワーク
![Page 44: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/44.jpg)
を極める
![Page 45: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/45.jpg)
何も実装がない
フレームワーク
![Page 46: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/46.jpg)
どういうこと?
![Page 47: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/47.jpg)
限りなく薄いフレームワークとは
↓設計指針
● 安全
● 読むコード最小
![Page 48: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/48.jpg)
フレームワークは
実装ではなく設計指針
共同開発に必要なのは
共通の実装ではなく
共通の設計指針
![Page 49: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/49.jpg)
僕の考える設計指針=フレームワーク
安全 (信頼性設計)
読むコード最小 (メンテコスト)
![Page 50: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/50.jpg)
信頼性設計
![Page 51: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/51.jpg)
危険なことをするために
より多くのコストが
必要になるように
![Page 52: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/52.jpg)
例: 最低限必要なXSS対策
デフォルトで HTML エスケープ
[% req.param('query') %]
危ないことをしようとするときは手間をかける
[% req.param('query') | raw %]
![Page 53: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/53.jpg)
読むコード最小
![Page 54: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/54.jpg)
DRY3
3回コピペしたら抽象化しろ
(不必要な/下手クソな抽象化は悪)
![Page 55: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/55.jpg)
設計例: Hatena Blog
![Page 56: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/56.jpg)
長期的に開発することを念頭に
柔軟性
新機能を加えるときに読むべき
コードを最小化
信頼性設計
![Page 57: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/57.jpg)
柔軟性と
読むべきコードの最小化を
同時に達成しようとすると
ドメイン特化にならざるを得ない
![Page 58: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/58.jpg)
安全で最小限な実装を
プロジェクト内に持つ
設計指針を明確にする
![Page 59: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/59.jpg)
僕の考える設計指針=フレームワーク
安全 (信頼性設計)
読むコード最小 (メンテコスト)
再掲
![Page 60: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/60.jpg)
設計指針
安全 (信頼性設計)
読むコード最小 (メンテコスト)
早い (ユーザ体験)
![Page 61: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/61.jpg)
ディスパッチャ
Plack + Router::Simple + α
ビュー
Text::Xslate, JSON:XS, etc...
DBアクセス
DBI生 + SQL::NamedPlaceholder(DBアクセスはコストがかかるので面倒にしとく)
![Page 62: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/62.jpg)
既存実装(Ridge)を使わなかった理由
→ 安全じゃなかったら
→ テストも十分ではなかった
安全にする
テストを十分に
+ app.psgi から
あっちこっちいかずに読み下せるように
![Page 63: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/63.jpg)
安全策
![Page 64: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/64.jpg)
HTML出力時
自動エスケープ
→ XSS対策
![Page 65: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/65.jpg)
POST時にトークン自動チェック
→ CSRF対策
![Page 66: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/66.jpg)
JSON出力時
XMLHtmlRequestのX-Requested-Withを自動チェック
→ IE XSS 対策 / UTF-7攻撃対策 / JSON読み出し対策
![Page 67: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/67.jpg)
自動で
X-Frame-Options: DENY→ クリックジャッキング対策
![Page 68: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/68.jpg)
iframeでロードされたフォームでは
何か変更されないと submit 不可
→ クリックジャッキング対策(どうしても iframe 使う場合のフォールバック)
![Page 69: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/69.jpg)
自動でできるだけ安全に
![Page 70: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/70.jpg)
適切なデフォルトを設定
![Page 71: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/71.jpg)
テスト
![Page 72: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/72.jpg)
テストが大量にあってもメンテしない
レイヤー(Appとか)を増やすとテストが増える
読むコードが増える
↓
最小限の構成Model + Controller
![Page 73: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/73.jpg)
Model のテスト
(仕様があまり変わらない)
ロジックのみ (DBアクセスなし)
細かい挙動をチェック
カバレッジ重視 (ホワイトボックステスト)
![Page 74: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/74.jpg)
例:
use Test::More;
# ロジックしかないので難しいところなしmy $e = Entry->new({body => '..'});is_deeply $e->classes, [ ... ];done_testing;
![Page 75: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/75.jpg)
Controller のテスト
(しばしば細かい仕様が変わる)
ディスパッチ → 出力までTest::WWW::Mechanize::PSGI
ユーザの挙動をシミュレート
(ブラックボックステスト)
![Page 76: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/76.jpg)
例:
use My::Test qw(create_hatena_user mechanize);
# DB アクセスとかはいい感じにしてるmy $user = create_hatena_user();my $mech = mechanize($user);my $blog_id = $mech->create_blog_ok;ok $blog_id;my $entry_id = $mech->post_entry_ok(blog_id => $blog_id);ok $entry_id; done_testing;
![Page 77: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/77.jpg)
早い
![Page 78: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/78.jpg)
use DBI;
![Page 79: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/79.jpg)
ORM は
勝手にDBひくな
![Page 80: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/80.jpg)
ORM は
勝手にblessするな
![Page 81: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/81.jpg)
コストがかかることを
便利にしてはいけない
![Page 82: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/82.jpg)
実装
![Page 83: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/83.jpg)
大枠としてはだいたいこんなかんじですhttps://github.com/cho45/starter.pl/tree/master/templates/mywebapp
(スケルトンジェネレータのテンプレートレベルのコード)
![Page 84: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/84.jpg)
まとめ
![Page 85: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/85.jpg)
ぼくのかんがえたさい
きょうのうぇぶあぷり
けーしょんふれーむ
わーく
![Page 86: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/86.jpg)
とはなんだったのか
![Page 87: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/87.jpg)
設計指針
![Page 88: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/88.jpg)
サービス特化の
実装
![Page 89: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/89.jpg)
僕の考えた最強の設計指針
![Page 90: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/90.jpg)
僕の考えた最低限の設計指針
● 安全 (信頼性設計)
● 読むコード最小 (メンテコスト)
● 早い (ユーザ体験)
実装は必要に応じて選び
必要であれば最低限自分で書くのが良い
![Page 91: ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011](https://reader034.vdocuments.site/reader034/viewer/2022042602/559794b21a28abf3108b4777/html5/thumbnails/91.jpg)
ご清聴ありがとうございました
www.lowreal.net