More Related Content
PDF
KEY
PPTX
PDF
PDF
Scotty を利用した "ゆるふわ" Web サービス作成 PDF
KEY
PPTX
What's hot
PDF
PDF
PDF
PDF
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala PDF
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム PPTX
PPTX
20161208 Classmethod Codenize Tools PDF
PPTX
Introduction to DocumentDB PDF
What is doobie? - database access for scala - PDF
Service worker が拓く mobile web の新しいかたち PDF
KEY
PDF
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション PDF
WordCamp2012 テストサーバーでWordPressを構築しよう PDF
Scala Warrior and type-safe front-end development with Scala.js PDF
PPTX
Amazon DynamoDBの紹介と東急ハンズでの活用について PDF
Closure Compiler Updates for ES6 PPTX
Androidで使えるJSON-Javaライブラリ Viewers also liked
PPTX
PDF
PDF
GHC 6.12.1 マルチコア対応ランタイムシステムについて PDF
KEY
PDF
PDF
PPTX
PDF
FP習熟度レベルとFSharpxのIteratee PDF
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49 PDF
Katagaitai CTF勉強会 #4 Crypto PDF
PDF
PPTX
PDF
PDF
PDF
PDF
PDF
PDF
PFIセミナー 2013/02/28 「プログラミング言語の今」 Similar to Yesod(at FPM2012)
PDF
PDF
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for... PDF
ODP
PDF
PDF
PDF
F#+Erlangで簡単なシューティングゲームを作ってみている PDF
KEY
Behat+Symfony2ではじめるBDD超入門 PPT
PDF
Alluren of prototype-based OOP PDF
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情 PDF
Symfony2 Behat/BDD (#Symfony2study 4) PDF
PDF
PDF
ODP
PPTX
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会) PDF
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails (増補日本語版) PDF
PHP Codeception テスト -- 日本語 More from Seizan Shimazaki
PDF
PDF
PDF
PDF
PDF
Digital Signature and PKI KEY
一方向ハッシュ関数(One-way Hash Function) KEY
メッセージ認証コード(Message Authentication Code) Yesod(at FPM2012)
- 1.
- 2.
自己紹介
• 島崎清山 (@seizans)
• いままで:営業(1年) → 社内SE(1年) → 現職(3年)
• おしごと:
• Webアプリのセキュリティレビュー
• Cloud基盤(AWS)の技術検証とサービス企画・運用
• 趣味:登山、楽器、ゲーム、甘いもの
• Haskell歴:1年半(2011年3月∼)
• Yesod歴:半年(2012年2月∼)
• 最近考えてること:どうやって Haskell で仕事するか
- 3.
自己紹介
• Haskell を始めたきっかけ
• mayahjp
さんへ質問「何すればプログラミングできる
ようになりますか?」
• Yesod を始めたきっかけ
• Haskell
で何か作って運用してみたかった
• 期限が決まっているネタがあったので作ってみた
- 4.
- 5.
- 6.
- 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 (テンプレート)
• テンプレートでやりたいことはできる
• 他の言語でやるのとほぼ変わらないので割愛
- 13.
- 14.
- 15.
Handler を書く
• POST した Form を受けてレコード追加処理を書く
• データの変換は自動でやってくれる
• bind
してくれるのでパターンマッチで取り出す
• 失敗の場合は FormFailure か FormMissing になってる
- 16.
- 17.
データ型の話
• これを書けば TH を使ってよろしくやってくれる
• やりたかったこと
• DBテーブルと関連付け
• UserNameフィールドとか Unique にしたい
• Json との変換も自動的にして欲しい
•※ 実際には数百行のコードに展開されています
- 18.
その他の話題
• REST のサポート
• Json
のやりとりが簡単
• PUT や DELETE の Handler も同様に作れる
• Accept ヘッダによって html か Json か自動で変える
• 例外があんまり出ないか
• ケアが必要な境界領域は Yesod がやってくれる
• 一応 DB が落ちてて通信エラー、とかはありえる
- 19.
その他の話題
• Subsite
•アプリをモジュール化して使いまわせる仕組み
• 例:Auth モジュール、Wiki モジュール
• 認証
• ということで公開されてる Subsite を使えばOK
• 実は 既にそのアプリに認証機能が入っている
• 必要な認証は一通りプラグインが既に作られている
• 少し調整して使うだけ
- 20.
- 21.
テスト
• 参考資料
•http://www.mew.org/~kazu/material/2012-test.pdf
• Hspec (HUnit の代替品)
• 仕様書ライクに書ける単体テスト
• QuickCheck
• 性質を書くとテストを自動生成してくれる仕組み
• doctest
• ドキュメントに利用例や性質を書き、それを自動的
にテストする仕組み
- 22.
- 23.
テスト
• yesod-test パッケージがテストフレームワークを提供
• scaffold
すると tests/HomeTest.hs に例ができてる
• HTTP リクエストを作って レスポンスをテストする
- 24.
- 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)を少し書くだけ
- 27.
- 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 でかんたんにプラグイン開発
- 32.