SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
Haskell で Webアプリ
∼ Yesod を使って面白かったこと ∼
 株式会社ワークスアプリケーションズ
     島崎 清山 (@seizans)
自己紹介
• 島崎清山   (@seizans)
• いままで:営業(1年)         → 社内SE(1年) → 現職(3年)
• おしごと:
 • Webアプリのセキュリティレビュー
 • Cloud基盤(AWS)の技術検証とサービス企画・運用
• 趣味:登山、楽器、ゲーム、甘いもの
• Haskell歴:1年半(2011年3月∼)
• Yesod歴:半年(2012年2月∼)
• 最近考えてること:どうやって             Haskell で仕事するか
自己紹介
• Haskell   を始めたきっかけ
  • mayahjp
      さんへ質問「何すればプログラミングできる
   ようになりますか?」
• Yesod   を始めたきっかけ
  • Haskell
       で何か作って運用してみたかった
  • 期限が決まっているネタがあったので作ってみた
会社紹介
• 株式会社ワークスアプリケーションズ
• ERPパッケージ「COMPANY」(人事給与、会計、等)
の開発、販売、保守運用
• グループ社員数   2000 ~ 4000 の間くらい
• 研究開発部門では10人くらい趣味で       Haskell を読み書き
• 随時エンジニアを募集しています
名古屋といえば
• 名古屋国際会議場




• 名古屋・・・また行きたいですね・・・
Web Framework 何があるか
• http://www.haskell.org/haskellwiki/Web/Frameworks
Yesod overview その前に
• Yesod   Quick Start 
 • http://www.yesodweb.com/page/quickstart 
• 参考用のコード
 • https://github.com/seizans/yesod-tutorial 
 • コミットログそれぞれで1つ何かわかるようにしてる
 • もうちょっと増やしていこうと思っています


• いいから書かせろという方はもうどんどん書いてみて
 ください
Yesod overview
• フルスタックの Web        アプリケーション フレームワーク
• Haskell
     のメリットを活かせるように作られている
• 公式サイト:http://www.yesodweb.com/
• ソース:https://github.com/yesodweb/yesod
Yesod overview
• 型システムの恩恵
 • TypeSafe URL:サイト内はリンク切れ無し
 • XSS:文字列をhtmlに埋め込む際にエスケープされる
• DB   は選べる
 • PostgreSQL、MySQL、SQLite、MongoDB
• セキュリティ:デフォルトで防いでくれる
 • XSS、CSRF、SQLI   は普通にやると入らない
 • セッションハイジャックもデフォルトで防ぐ(IP見る)
Yesod overview
• パフォーマンス
 • 速いというベンチマークがある
 • スケーラブルなセッション機構
   • スティッキーではなく、適切に処理されCookie   に
• DSLで DRY
 • Model 定義、Routing 定義
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
ページを作る
• 何を定義すればページができるか?
• URL 
 • URL   に対して Resource を定義する
 • 1行書くだけなので割愛
• Handler
      (処理)
 • 具体的な処理を書くので次で説明
• View   (テンプレート)
 • テンプレートでやりたいことはできる
 • 他の言語でやるのとほぼ変わらないので割愛
Handler を書く
• User   テーブルを全件テンプレートに渡してHtmlを返す




• UserId   でレコード引いて Json を返す(無ければ404)
Handler を書く
• User   テーブル用の Form を生成して画面をつくる
Handler を書く
• POST    した Form を受けてレコード追加処理を書く




 • データの変換は自動でやってくれる
 • bind
     してくれるのでパターンマッチで取り出す
 • 失敗の場合は FormFailure か FormMissing になってる
データ型の話
• 使うデータ型がこんなだとする




• やりたいこと
• DBテーブルと関連付け
• UserName   フィールドとか Unique にしたい
• Json   との変換も自動的にして欲しい
データ型の話
• これを書けば TH   を使ってよろしくやってくれる




• やりたかったこと
 • DBテーブルと関連付け
 • UserNameフィールドとか Unique にしたい
 • Json との変換も自動的にして欲しい


•※   実際には数百行のコードに展開されています
その他の話題
• REST    のサポート
 • Json
      のやりとりが簡単
 • PUT や DELETE の Handler も同様に作れる
 • Accept   ヘッダによって html か Json か自動で変える
• 例外があんまり出ないか
 • ケアが必要な境界領域は Yesod      がやってくれる
 • 一応     DB が落ちてて通信エラー、とかはありえる
その他の話題
• Subsite 
 • アプリをモジュール化して使いまわせる仕組み
 • 例:Auth    モジュール、Wiki モジュール
• 認証
 • ということで公開されてる Subsite を使えばOK
 • 実は 既にそのアプリに認証機能が入っている
 • 必要な認証は一通りプラグインが既に作られている
 • 少し調整して使うだけ
環境とか
• テスト
• CIツールの活用
• デプロイ
テスト
• 参考資料
 • http://www.mew.org/~kazu/material/2012-test.pdf 
• Hspec   (HUnit の代替品)
 • 仕様書ライクに書ける単体テスト
• QuickCheck 
 • 性質を書くとテストを自動生成してくれる仕組み
• doctest 
 • ドキュメントに利用例や性質を書き、それを自動的
   にテストする仕組み
テスト
• Webアプリケーションのテスト
• DB処理のテスト
• Handlerのテスト(HTTPリクエストを受けた結果)
• 画面系のテスト:JavaScript   の領域
テスト
• yesod-test   パッケージがテストフレームワークを提供
  • scaffold
          すると tests/HomeTest.hs に例ができてる
  • HTTP リクエストを作って レスポンスをテストする
テスト
• yesod-test   の活用方法 その2
  • テスト用 runDB を提供してくれているので
  • DB処理まわりのテストもOK
CIツール
• Cabal 
 • .cabalファイルにプロジェクトの各種仕様を記述する
   • 例)依存ライブラリ、実行コマンド、テスト、...
 • .cabalファイルに   test suites を登録して実行する
   • yesod init したプロジェクトの .cabal を見ましょう
   • yesod test コマンドは裏で cabal test をしています
CIツール
• Travis 
 • http://about.travis-ci.org/docs/ 
 • CIツールのホスティングサービス、Haskell            も対応
 • Github   と連携
   • push
       を hook して処理を回してくれる
   • 設定ファイル(.travis.yml)を少し書くだけ
CIツール
• Travis 
 • .travis.yml   をこれだけ書けば




 • push毎に実行
デプロイ
• 標準デプロイツールっぽいの(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
デプロイ
• Mighttpd 
 • Haskell製の高速Webサーバ
 • ルーティングと設定ファイルを指定して起動
 • かんたんに使える
• Angel 
 • Haskell製の   daemontoolsクローン
 • 機能:プロセスのデーモン化、監視と再生成
 • Bump    がサーバで使っている
 • 設定ファイルを指定して起動
 • かんたんに使える
もう一つの選択肢
• それは      Scotty
 • http://blog.fujimuradaisuke.com/post/26887032662/haskell-
  de-json-web-api 
 • Yesod   と同様 persistent と aeson を利用
  • persistent:DB周りのORマッパーのようなもの
  • aeson:Json      ライブラリ
 • 依存ライブラリが少ない
 • 総コード量が少ないので、全部を早く把握したい人
  向けかも
  • Yesod の scaffold は総コード量が結構あるので
まとめ
• 手軽に Webプログラミングをスタートできる
  • scaffold
         して MVC を足していくだけ
  • DSL が整えられているので簡単に書ける
• 実用的
  • フレームワークに期待することは一通りできる
  • Cabal   や Travis で自動ビルドやテストもOK
• Haskell   らしいメリットが享受できる
  • 面倒な変換系の処理は Yesod      がやってくれる
  • 開発者は高水準な世界に集中できる
  • Subsite    でかんたんにプラグイン開発
Happy Haskell Web Programming!!

Contenu connexe

Tendances

ネタじゃないScala.js
ネタじゃないScala.jsネタじゃないScala.js
ネタじゃないScala.js
takezoe
 
WordCamp2012 テストサーバーでWordPressを構築しよう
WordCamp2012 テストサーバーでWordPressを構築しようWordCamp2012 テストサーバーでWordPressを構築しよう
WordCamp2012 テストサーバーでWordPressを構築しよう
H2O Space. Co., Ltd.
 
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jsScala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
takezoe
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力
Kota Mizushima
 

Tendances (20)

SQLによるDynamoDBの操作
SQLによるDynamoDBの操作SQLによるDynamoDBの操作
SQLによるDynamoDBの操作
 
ES6 in Practice
ES6 in PracticeES6 in Practice
ES6 in Practice
 
ネタじゃないScala.js
ネタじゃないScala.jsネタじゃないScala.js
ネタじゃないScala.js
 
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscalaビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
ビズリーチの新サービスをScalaで作ってみた 〜マイクロサービスの裏側 #jissenscala
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
 
JavaScriptから利用するFirebase
JavaScriptから利用するFirebaseJavaScriptから利用するFirebase
JavaScriptから利用するFirebase
 
20161208 Classmethod Codenize Tools
20161208 Classmethod Codenize Tools20161208 Classmethod Codenize Tools
20161208 Classmethod Codenize Tools
 
Elasticsearch at Makuake
Elasticsearch at MakuakeElasticsearch at Makuake
Elasticsearch at Makuake
 
Introduction to DocumentDB
Introduction to DocumentDBIntroduction to DocumentDB
Introduction to DocumentDB
 
What is doobie? - database access for scala -
What is doobie? - database access for scala -What is doobie? - database access for scala -
What is doobie? - database access for scala -
 
Service worker が拓く mobile web の新しいかたち
Service worker が拓く mobile web の新しいかたちService worker が拓く mobile web の新しいかたち
Service worker が拓く mobile web の新しいかたち
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
APACHE HTTP SERVER
APACHE HTTP SERVERAPACHE HTTP SERVER
APACHE HTTP SERVER
 
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
 
WordCamp2012 テストサーバーでWordPressを構築しよう
WordCamp2012 テストサーバーでWordPressを構築しようWordCamp2012 テストサーバーでWordPressを構築しよう
WordCamp2012 テストサーバーでWordPressを構築しよう
 
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.jsScala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
 
Scala + Finagleの魅力
Scala + Finagleの魅力Scala + Finagleの魅力
Scala + Finagleの魅力
 
Amazon DynamoDBの紹介と東急ハンズでの活用について
Amazon DynamoDBの紹介と東急ハンズでの活用についてAmazon DynamoDBの紹介と東急ハンズでの活用について
Amazon DynamoDBの紹介と東急ハンズでの活用について
 
GDG Tokyo Firebaseを使った Androidアプリ開発
GDG Tokyo Firebaseを使った Androidアプリ開発GDG Tokyo Firebaseを使った Androidアプリ開発
GDG Tokyo Firebaseを使った Androidアプリ開発
 
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
 

En vedette

Erlangを触ってみた
Erlangを触ってみたErlangを触ってみた
Erlangを触ってみた
Yoichi Toyota
 
第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪
Naoki Kitora
 
F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?
pocketberserker
 
関数型言語初心者の俺がF#触ってみた
関数型言語初心者の俺がF#触ってみた関数型言語初心者の俺がF#触ってみた
関数型言語初心者の俺がF#触ってみた
Takashi Nishisaki
 
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateeFP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIteratee
pocketberserker
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
shoma h
 

En vedette (20)

Erlang
ErlangErlang
Erlang
 
Erlangを触ってみた
Erlangを触ってみたErlangを触ってみた
Erlangを触ってみた
 
GHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについてGHC 6.12.1 マルチコア対応ランタイムシステムについて
GHC 6.12.1 マルチコア対応ランタイムシステムについて
 
関数型軽い紹介
関数型軽い紹介関数型軽い紹介
関数型軽い紹介
 
Yesod でブログエンジンをつくってみた
Yesod でブログエンジンをつくってみたYesod でブログエンジンをつくってみた
Yesod でブログエンジンをつくってみた
 
第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪第一回関数型言語勉強会 大阪
第一回関数型言語勉強会 大阪
 
F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?F#で学ぶ関数プログラミング入門?
F#で学ぶ関数プログラミング入門?
 
関数型言語初心者の俺がF#触ってみた
関数型言語初心者の俺がF#触ってみた関数型言語初心者の俺がF#触ってみた
関数型言語初心者の俺がF#触ってみた
 
FP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIterateeFP習熟度レベルとFSharpxのIteratee
FP習熟度レベルとFSharpxのIteratee
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
 
Katagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 CryptoKatagaitai CTF勉強会 #4 Crypto
Katagaitai CTF勉強会 #4 Crypto
 
JSer Class #1
JSer Class #1JSer Class #1
JSer Class #1
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
 
120901fp key
120901fp key120901fp key
120901fp key
 
関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)関数型言語とオブジェクト指向言語(序章)
関数型言語とオブジェクト指向言語(序章)
 
データベース入門3
データベース入門3データベース入門3
データベース入門3
 
Monad tutorial
Monad tutorialMonad tutorial
Monad tutorial
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」
 

Similaire à Yesod(at FPM2012)

Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
Makoto Kato
 
4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座
Shinichi Nishikawa
 
JBoss AS7 rev3
JBoss AS7 rev3JBoss AS7 rev3
JBoss AS7 rev3
nekop
 
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
Nobukazu Hanada
 
20140628 AWSの2014前半のアップデートまとめ
20140628 AWSの2014前半のアップデートまとめ20140628 AWSの2014前半のアップデートまとめ
20140628 AWSの2014前半のアップデートまとめ
Yasuhiro Araki, Ph.D
 

Similaire à Yesod(at FPM2012) (20)

JavaScript 研修
JavaScript 研修JavaScript 研修
JavaScript 研修
 
20090328
2009032820090328
20090328
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
 
4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座4時間まったりWordPressテーマ作成講座
4時間まったりWordPressテーマ作成講座
 
JBoss AS7 rev3
JBoss AS7 rev3JBoss AS7 rev3
JBoss AS7 rev3
 
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?
 
Hadoopデータプラットフォーム #cwt2013
Hadoopデータプラットフォーム #cwt2013Hadoopデータプラットフォーム #cwt2013
Hadoopデータプラットフォーム #cwt2013
 
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
 
2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよ2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよ
 
サーバーレスでアンケートフォームを作ってみた
サーバーレスでアンケートフォームを作ってみたサーバーレスでアンケートフォームを作ってみた
サーバーレスでアンケートフォームを作ってみた
 
動的なILの生成と編集
動的なILの生成と編集動的なILの生成と編集
動的なILの生成と編集
 
簡単なHTTPサーバの作成
簡単なHTTPサーバの作成簡単なHTTPサーバの作成
簡単なHTTPサーバの作成
 
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoop
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
20140628 AWSの2014前半のアップデートまとめ
20140628 AWSの2014前半のアップデートまとめ20140628 AWSの2014前半のアップデートまとめ
20140628 AWSの2014前半のアップデートまとめ
 
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...20161027 hadoop summit  Generating Recommendations at Amazon Scale with Apach...
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたし
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 

Plus de Seizan Shimazaki (8)

PFDS8.1
PFDS8.1PFDS8.1
PFDS8.1
 
20120527yesod
20120527yesod20120527yesod
20120527yesod
 
Yesod and Auth
Yesod and AuthYesod and Auth
Yesod and Auth
 
Pfds20120304
Pfds20120304Pfds20120304
Pfds20120304
 
Cryptography
CryptographyCryptography
Cryptography
 
Digital Signature and PKI
Digital Signature and PKIDigital Signature and PKI
Digital Signature and PKI
 
一方向ハッシュ関数(One-way Hash Function)
一方向ハッシュ関数(One-way Hash Function)一方向ハッシュ関数(One-way Hash Function)
一方向ハッシュ関数(One-way Hash Function)
 
メッセージ認証コード(Message Authentication Code)
メッセージ認証コード(Message Authentication Code)メッセージ認証コード(Message Authentication Code)
メッセージ認証コード(Message Authentication Code)
 

Dernier

Dernier (10)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

Yesod(at FPM2012)

  • 1. Haskell で Webアプリ ∼ Yesod を使って面白かったこと ∼ 株式会社ワークスアプリケーションズ 島崎 清山 (@seizans)
  • 2. 自己紹介 • 島崎清山 (@seizans) • いままで:営業(1年) → 社内SE(1年) → 現職(3年) • おしごと: • Webアプリのセキュリティレビュー • Cloud基盤(AWS)の技術検証とサービス企画・運用 • 趣味:登山、楽器、ゲーム、甘いもの • Haskell歴:1年半(2011年3月∼) • Yesod歴:半年(2012年2月∼) • 最近考えてること:どうやって Haskell で仕事するか
  • 3. 自己紹介 • Haskell を始めたきっかけ • mayahjp さんへ質問「何すればプログラミングできる ようになりますか?」 • Yesod を始めたきっかけ • Haskell で何か作って運用してみたかった • 期限が決まっているネタがあったので作ってみた
  • 4. 会社紹介 • 株式会社ワークスアプリケーションズ • ERPパッケージ「COMPANY」(人事給与、会計、等) の開発、販売、保守運用 • グループ社員数 2000 ~ 4000 の間くらい • 研究開発部門では10人くらい趣味で Haskell を読み書き • 随時エンジニアを募集しています
  • 6. Web Framework 何があるか • http://www.haskell.org/haskellwiki/Web/Frameworks
  • 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. Handler を書く • User テーブルを全件テンプレートに渡してHtmlを返す • UserId でレコード引いて Json を返す(無ければ404)
  • 14. Handler を書く • User テーブル用の Form を生成して画面をつくる
  • 15. Handler を書く • POST した Form を受けてレコード追加処理を書く • データの変換は自動でやってくれる • bind してくれるのでパターンマッチで取り出す • 失敗の場合は FormFailure か FormMissing になってる
  • 16. データ型の話 • 使うデータ型がこんなだとする • やりたいこと • DBテーブルと関連付け • UserName フィールドとか Unique にしたい • Json との変換も自動的にして欲しい
  • 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  • ドキュメントに利用例や性質を書き、それを自動的 にテストする仕組み
  • 22. テスト • Webアプリケーションのテスト • DB処理のテスト • Handlerのテスト(HTTPリクエストを受けた結果) • 画面系のテスト:JavaScript の領域
  • 23. テスト • yesod-test パッケージがテストフレームワークを提供 • scaffold すると tests/HomeTest.hs に例ができてる • HTTP リクエストを作って レスポンスをテストする
  • 24. テスト • yesod-test の活用方法 その2 • テスト用 runDB を提供してくれているので • DB処理まわりのテストもOK
  • 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. CIツール • Travis  • .travis.yml をこれだけ書けば • push毎に実行
  • 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. Happy Haskell Web Programming!!