Contenu connexe
Plus de Seizan Shimazaki (7)
Ppl
- 2. はじめに
• 今日使うプロジェクトを作成します
• cd
• cat .bash_profile >> .bashrc
•. .bashrc
init
• コマンド:yesod
• 自分の名前は任意
• プロジェクト名も任意
• DBは s (SQLite) を選択してください
• cd (プロジェクト名) で移動
• cabal-dev install で必要ライブラリのインストール
- 5. 目的
• フレームワーク Yesod を使うことで・・・
• Haskell
での Webアプリ開発が手軽に始められること
を実感する
• Haskell で Webアプリが十分に実用的に開発できるこ
とを実感する
• Haskell で開発することでのメリットを実感する
- 6. 自己紹介
• 勤務:ワークスアプリケーションズ 研究開発部門
• 前職:エン・ジャパン 企画営業 (2009年5月まで2年)
• 職務内容:
• Webアプリのセキュリティレビュー
• Cloud基盤(AWS)の技術検証とサービス企画・運用
• 趣味:登山、楽器、ゲーム、甘いもの
• エンジニア歴:3年強(2009年6月∼)
• Haskell歴:1年半(2011年3月∼)
• プログラミングできるようになるには?への回答
• Yesod歴:半年(2012年2月∼)
- 7. 自己紹介
• Haskell を始めたきっかけ
• 元同僚への質問「何すればプログラミングできるよ
うになりますか?」
• Yesod を始めたきっかけ
• Haskell
で何か作って運用してみたかった
• 期限が決まっているネタがあったので作ってみた
- 10. Haskell で書くメリット(抜粋)
• 強力な型推論を含む静的型付け
• 型に関わる実行時エラーはコンパイル時に防止
• 型は必要最小限だけ書いても動いてくれる
• Null をなくすことに成功
• Null
Pointer Exception は存在しない
• 関数が null を返すかの確認が不要に
• IO を分離することに成功
• IO は例外が起きる、非IO は例外はほぼ起きない
• 書く場所によって何に注意すべきか考えられる
- 14. Yesod overview
• フルスタックの Web アプリケーション フレームワーク
• Haskell
のメリットを活かせるように作られている
• 公式サイト:http://www.yesodweb.com/
• ソース:https://github.com/yesodweb/yesod
- 15. Yesod overview
• 型システムの恩恵
• TypeSafe URL:サイト内はリンク切れ無し
• XSS:文字列をhtmlに埋め込む際にエスケープされる
• DB は選べる
• PostgreSQL、MySQL、SQLite、MongoDB
• セキュリティが強い:デフォルトで防いでくれる
• XSS、CSRF、SQLI は普通にやると入らない
• セッションハイジャックもデフォルトで防ぐ(IP見る)
- 16. Yesod overview
• パフォーマンス
• 速いというベンチマークがある
• スケーラブルなセッション機構
• スティッキーではなく、適切に処理されCookie に
• DSLで DRY
• Model 定義、Routing 定義
• 他はさわってみてから
- 17. 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
- 20. 1.ページを作る
• URL
• config/routes
に例にならって書く
• URL、Resource名、対応Method
• 処理 (Handler)
• まずは Handler/Home.hs につぎたす
• $(widgetFile “some”) で template/some.hamlet を使う
• defaultLayout に widget を渡せば Handler RepHtml に
• View (テンプレート)
• hello だけでよいので template/hello.hamlet を書く
- 21. 2.hamlet と Widget で遊ぶ
• 参考URL
• https://github.com/seizans/yesod-tutorial/commits/master
• hamlet内のこと
• <p> に対する閉じタグは不要
• ^{someWidget} で someWidget を差し込める
• #{variable} で variable を文字列として埋め込める
• @{ResourceR args} で型付きURL
• <a href=@{HomeR}> のように使う
- 22. 3.Form を作る
• Form の書き方を把握する
• Formと関連付けるデータ型を決める
• 無ければ作る、models をそのまま使うと楽
• 必須orNot Field種類 ラベル名 デフォルト値
- 24. 4.DB処理を書く
• データの SELECT を把握する
• 全件取得なら runDB $ selectList [] [] と書けばいい
• Key と Model の組になっていることに注意
- 25. 4.DB処理を書く
• データの SELECT を把握する
• 全件取得なら runDB $ selectList [] [] と書けばいい
• Key と Model の組になっていることに注意
- 26. その他の話題
• REST のサポート
• 実は Json レスポンスを返すのが極めて簡単
• (ほぼ)models に json と書くだけ
• PUT や DELETE の Handler も同様に作れる
• Accept ヘッダによって html か Json か自動で変える
• 例外
• ケアが必要な境界領域は Yesod がやってくれる
• 一応 DB が落ちてて通信エラー、とかはありえる
- 27. その他の話題
• 認証
• 実は既にそのアプリに認証機能が入っている
• 必要な認証は一通りプラグインが既に作られている
• 少し調整して使うだけ
• Subsite
• アプリをモジュール化して使いまわせる仕組み
• 例:Auth モジュール、Wiki モジュール
- 29. 実用:テスト
• Hspec (HUnit の代替品)
• 仕様書ライクに書ける単体テスト
• Ruby 由来
• QuickCheck
• 性質を書くとテストを自動生成してくれる仕組み
• Haskell 由来
• doctest
• ドキュメントに利用例や性質を書き、それを自動的
にテストする仕組み
• Python 由来
- 31. 実用:テスト
• yesod-test パッケージがテストフレームワークを提供
• tests/HomeTest.hs
に例があります
• HTTP リクエストを作って レスポンスをテストする
- 33. 実用:CIツール
• Cabal
• .cabalファイルにプロジェクトの各種仕様を記述する
• 例)依存ライブラリ、実行コマンド、テスト、...
• .cabalファイルに test suites を登録して実行する
• yesod init したプロジェクトの .cabal を見ましょう
• yesod test コマンドは裏で cabal test をしています
- 34. 実用:CIツール
• Travis
• CIツールのホスティングサービス、Haskell も対応
• Github と連携 (Github アカウントが必要)
• push を hook して処理を回してくれる
• 設定ファイル(.travis.yml)を少し書くだけ
- 36. 実用:デプロイ
• Keter を使って nginx と連携
• Snoyman
さんが活発に開発中
• Heroku にホスティング
• 参考資料のブログを参照
• Mighttpd(Haskell製 Webサーバ)
と連携して Haskell づくし
• 今日はせっかくだから Haskell づくしで
- 37. 実用:デプロイ
• Mighttpd
• Haskell製の高速Webサーバ
• ルーティングと設定ファイルを指定して起動
• かんたんに使える
• Angel
• Haskell製の daemontoolsクローン
• 機能:プロセスのデーモン化、監視と再生成
• Bump がサーバで使っているらしい
• 設定ファイルを指定して起動
• かんたんに使える
- 38. 実用:デプロイ
• 配布したイメージには設定ファイル配置済みなので
• cd haskell/hello
• sudo ~/haskell/angel/cabal-dev/bin/angel ~/haskell/angel/angel.conf
• ブラウザで確認:http://localhost
• 運用方法
• nohup コマンドでずっと起動させておく
• アプリをupdateしたら yesod build してプロセスを kill
• Angel がプロセスを再生成してくれてサービス再開
- 39. 実用:参考資料
• テスト
• Haskellで Behavior Driven Development
• HaskellとテストとBDD - あどけない話
• CIツール
• Cabal User Guide
• Travis CI
• デプロイ
• MightyとAngelでYesodをデプロイ - あむログ
• Yesod1.1 on Heroku - tk_shgの日記
- 40. Yesod まとめ
• 手軽に Webプログラミングをスタートできる
• scaffold
して MVC を足していくだけ
• DSL が整えられているので簡単に書ける
• 十分に実用的
• フレームワークに期待することは一通りできる
• Cabal や Travis で自動のビルドやテストもできる
• Haskell らしいメリットが享受できる
• 難しい変換系の処理は Yesod がやってくれる
• 開発者は高水準な世界に集中できる
• Widget や Subsite で再利用性を高められる
- 41. 本日のまとめ
• Haskell や Yesod を使うメリットがある
• 高機能:問題解決をした結果として
• 問題解決の方法として学ぶのも面白いかも
• 開発者がやる必要ないことを基盤側がやってくれる
• 開発者が本来のフィールドにより集中できる
• 「関数型言語」と捉える必要は必ずしもないかも
• Web Programming を Haskell でスタートさせましょう
• 疑問・質問は遠慮なくどうぞ
• みんなで解決していきましょう