Contenu connexe
Similaire à Yesod(at FPM2012) (20)
Plus de Seizan Shimazaki (8)
Yesod(at FPM2012)
- 2. 自己紹介
• 島崎清山 (@seizans)
• いままで:営業(1年) → 社内SE(1年) → 現職(3年)
• おしごと:
• Webアプリのセキュリティレビュー
• Cloud基盤(AWS)の技術検証とサービス企画・運用
• 趣味:登山、楽器、ゲーム、甘いもの
• Haskell歴:1年半(2011年3月∼)
• Yesod歴:半年(2012年2月∼)
• 最近考えてること:どうやって Haskell で仕事するか
- 3. 自己紹介
• Haskell を始めたきっかけ
• mayahjp
さんへ質問「何すればプログラミングできる
ようになりますか?」
• Yesod を始めたきっかけ
• Haskell
で何か作って運用してみたかった
• 期限が決まっているネタがあったので作ってみた
- 7. Yesod overview その前に
• Yesod Quick Start
• http://www.yesodweb.com/page/quickstart
• 参考用のコード
• https://github.com/seizans/yesod-tutorial
• コミットログそれぞれで1つ何かわかるようにしてる
• もうちょっと増やしていこうと思っています
• いいから書かせろという方はもうどんどん書いてみて
ください
- 8. Yesod overview
• フルスタックの Web アプリケーション フレームワーク
• Haskell
のメリットを活かせるように作られている
• 公式サイト:http://www.yesodweb.com/
• ソース:https://github.com/yesodweb/yesod
- 9. Yesod overview
• 型システムの恩恵
• TypeSafe URL:サイト内はリンク切れ無し
• XSS:文字列をhtmlに埋め込む際にエスケープされる
• DB は選べる
• PostgreSQL、MySQL、SQLite、MongoDB
• セキュリティ:デフォルトで防いでくれる
• XSS、CSRF、SQLI は普通にやると入らない
• セッションハイジャックもデフォルトで防ぐ(IP見る)
- 10. Yesod overview
• パフォーマンス
• 速いというベンチマークがある
• スケーラブルなセッション機構
• スティッキーではなく、適切に処理されCookie に
• DSLで DRY
• Model 定義、Routing 定義
- 11. Yesod の始め方
• Haskell-Platform をインストール:割愛
• Yesod をインストール:
• cabal install yesod-platform
• Yesod プロジェクトを作成して build
• yesod
init
• ディレクトリを移動
• cabal install --only-dependencies
• yesod devel
•※ cabal-dev を使う方法を含めた解説は以下です
• http://taketoncheir.hatenablog.com/entry/
2012/08/14/020456
- 12. ページを作る
• 何を定義すればページができるか?
• URL
• URL に対して Resource を定義する
• 1行書くだけなので割愛
• Handler
(処理)
• 具体的な処理を書くので次で説明
• View (テンプレート)
• テンプレートでやりたいことはできる
• 他の言語でやるのとほぼ変わらないので割愛
- 15. Handler を書く
• POST した Form を受けてレコード追加処理を書く
• データの変換は自動でやってくれる
• bind
してくれるのでパターンマッチで取り出す
• 失敗の場合は FormFailure か FormMissing になってる
- 17. データ型の話
• これを書けば TH を使ってよろしくやってくれる
• やりたかったこと
• DBテーブルと関連付け
• UserNameフィールドとか Unique にしたい
• Json との変換も自動的にして欲しい
•※ 実際には数百行のコードに展開されています
- 18. その他の話題
• REST のサポート
• Json
のやりとりが簡単
• PUT や DELETE の Handler も同様に作れる
• Accept ヘッダによって html か Json か自動で変える
• 例外があんまり出ないか
• ケアが必要な境界領域は Yesod がやってくれる
• 一応 DB が落ちてて通信エラー、とかはありえる
- 19. その他の話題
• Subsite
• アプリをモジュール化して使いまわせる仕組み
• 例:Auth モジュール、Wiki モジュール
• 認証
• ということで公開されてる Subsite を使えばOK
• 実は 既にそのアプリに認証機能が入っている
• 必要な認証は一通りプラグインが既に作られている
• 少し調整して使うだけ
- 21. テスト
• 参考資料
• http://www.mew.org/~kazu/material/2012-test.pdf
• Hspec (HUnit の代替品)
• 仕様書ライクに書ける単体テスト
• QuickCheck
• 性質を書くとテストを自動生成してくれる仕組み
• doctest
• ドキュメントに利用例や性質を書き、それを自動的
にテストする仕組み
- 23. テスト
• yesod-test パッケージがテストフレームワークを提供
• scaffold
すると tests/HomeTest.hs に例ができてる
• HTTP リクエストを作って レスポンスをテストする
- 25. CIツール
• Cabal
• .cabalファイルにプロジェクトの各種仕様を記述する
• 例)依存ライブラリ、実行コマンド、テスト、...
• .cabalファイルに test suites を登録して実行する
• yesod init したプロジェクトの .cabal を見ましょう
• yesod test コマンドは裏で cabal test をしています
- 26. CIツール
• Travis
• http://about.travis-ci.org/docs/
• CIツールのホスティングサービス、Haskell も対応
• Github と連携
• push
を hook して処理を回してくれる
• 設定ファイル(.travis.yml)を少し書くだけ
- 28. デプロイ
• 標準デプロイツールっぽいの(Keter)開発され中
• 一応今でも動く
• https://github.com/snoyberg/keter
• Heroku にホスティング
• http://taketoncheir.hatenablog.com/entry/
2012/08/14/020456
• Mighttpd(Haskell製 Webサーバ) を使うとか
• http://amkkun.hatenablog.com/entry/2012/08/13/160523
- 29. デプロイ
• Mighttpd
• Haskell製の高速Webサーバ
• ルーティングと設定ファイルを指定して起動
• かんたんに使える
• Angel
• Haskell製の daemontoolsクローン
• 機能:プロセスのデーモン化、監視と再生成
• Bump がサーバで使っている
• 設定ファイルを指定して起動
• かんたんに使える
- 30. もう一つの選択肢
• それは Scotty
• http://blog.fujimuradaisuke.com/post/26887032662/haskell-
de-json-web-api
• Yesod と同様 persistent と aeson を利用
• persistent:DB周りのORマッパーのようなもの
• aeson:Json ライブラリ
• 依存ライブラリが少ない
• 総コード量が少ないので、全部を早く把握したい人
向けかも
• Yesod の scaffold は総コード量が結構あるので
- 31. まとめ
• 手軽に Webプログラミングをスタートできる
• scaffold
して MVC を足していくだけ
• DSL が整えられているので簡単に書ける
• 実用的
• フレームワークに期待することは一通りできる
• Cabal や Travis で自動ビルドやテストもOK
• Haskell らしいメリットが享受できる
• 面倒な変換系の処理は Yesod がやってくれる
• 開発者は高水準な世界に集中できる
• Subsite でかんたんにプラグイン開発