Suche senden
Hochladen
Ppl
•
5 gefällt mir
•
2,650 views
Seizan Shimazaki
Folgen
Melden
Teilen
Melden
Teilen
1 von 42
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Yesodを支える技術
Yesodを支える技術
Hiromi Ishii
Yesod勉強会
Yesod勉強会
Hideyuki Tanaka
Scotty を利用した "ゆるふわ" Web サービス作成
Scotty を利用した "ゆるふわ" Web サービス作成
krdlab
Yesod(at FPM2012)
Yesod(at FPM2012)
Seizan Shimazaki
ES6 in Practice
ES6 in Practice
Teppei Sato
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
Kiyokazu Kaba
Scala + Finagleの魅力
Scala + Finagleの魅力
Kota Mizushima
恐るべきApache, Web勉強会@福岡
恐るべきApache, Web勉強会@福岡
Aya Komuro
Empfohlen
Yesodを支える技術
Yesodを支える技術
Hiromi Ishii
Yesod勉強会
Yesod勉強会
Hideyuki Tanaka
Scotty を利用した "ゆるふわ" Web サービス作成
Scotty を利用した "ゆるふわ" Web サービス作成
krdlab
Yesod(at FPM2012)
Yesod(at FPM2012)
Seizan Shimazaki
ES6 in Practice
ES6 in Practice
Teppei Sato
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
Kiyokazu Kaba
Scala + Finagleの魅力
Scala + Finagleの魅力
Kota Mizushima
恐るべきApache, Web勉強会@福岡
恐るべきApache, Web勉強会@福岡
Aya Komuro
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews, Inc.
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
Scalaでプログラムを作りました
Scalaでプログラムを作りました
Tomoharu ASAMI
Sbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
Yoshitaka Fujii
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
Teppei Sato
SQLによるDynamoDBの操作
SQLによるDynamoDBの操作
Sugawara Genki
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.js
mganeko
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Teppei Sato
AWS SDK for Go in #jawsmeguro
AWS SDK for Go in #jawsmeguro
Kenta Suzuki
081108huge_data.ppt
081108huge_data.ppt
Naoya Ito
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
takezoe
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知る
Masashi Shinbara
Service worker が拓く mobile web の新しいかたち
Service worker が拓く mobile web の新しいかたち
Kinuko Yasuda
javascript を Xcode でテスト
javascript を Xcode でテスト
Yoichiro Sakurai
Scala が支える医療系ウェブサービス #jissenscala
Scala が支える医療系ウェブサービス #jissenscala
Kazuhiro Sera
Capistrano in practice - WebCareer
Capistrano in practice - WebCareer
Kyosuke MOROHASHI
Sphinxでドキュメントを書こう
Sphinxでドキュメントを書こう
Kazufumi Ohkawa
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Kenta Suzuki
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
Ryuji Yamashita
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
Eugene Yokota
Monad tutorial
Monad tutorial
Hideyuki Tanaka
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」
Preferred Networks
Weitere ähnliche Inhalte
Was ist angesagt?
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews, Inc.
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
Scalaでプログラムを作りました
Scalaでプログラムを作りました
Tomoharu ASAMI
Sbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
Yoshitaka Fujii
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
Teppei Sato
SQLによるDynamoDBの操作
SQLによるDynamoDBの操作
Sugawara Genki
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.js
mganeko
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Teppei Sato
AWS SDK for Go in #jawsmeguro
AWS SDK for Go in #jawsmeguro
Kenta Suzuki
081108huge_data.ppt
081108huge_data.ppt
Naoya Ito
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
takezoe
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知る
Masashi Shinbara
Service worker が拓く mobile web の新しいかたち
Service worker が拓く mobile web の新しいかたち
Kinuko Yasuda
javascript を Xcode でテスト
javascript を Xcode でテスト
Yoichiro Sakurai
Scala が支える医療系ウェブサービス #jissenscala
Scala が支える医療系ウェブサービス #jissenscala
Kazuhiro Sera
Capistrano in practice - WebCareer
Capistrano in practice - WebCareer
Kyosuke MOROHASHI
Sphinxでドキュメントを書こう
Sphinxでドキュメントを書こう
Kazufumi Ohkawa
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Kenta Suzuki
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
Ryuji Yamashita
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
Eugene Yokota
Was ist angesagt?
(20)
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
Scalaでプログラムを作りました
Scalaでプログラムを作りました
Sbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
SQLによるDynamoDBの操作
SQLによるDynamoDBの操作
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.js
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
AWS SDK for Go in #jawsmeguro
AWS SDK for Go in #jawsmeguro
081108huge_data.ppt
081108huge_data.ppt
Scala Warrior and type-safe front-end development with Scala.js
Scala Warrior and type-safe front-end development with Scala.js
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知る
Service worker が拓く mobile web の新しいかたち
Service worker が拓く mobile web の新しいかたち
javascript を Xcode でテスト
javascript を Xcode でテスト
Scala が支える医療系ウェブサービス #jissenscala
Scala が支える医療系ウェブサービス #jissenscala
Capistrano in practice - WebCareer
Capistrano in practice - WebCareer
Sphinxでドキュメントを書こう
Sphinxでドキュメントを書こう
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Jenkinsとhadoopを利用した継続的データ解析環境の構築
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
Andere mochten auch
Monad tutorial
Monad tutorial
Hideyuki Tanaka
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」
Preferred Networks
Yesod でブログエンジンをつくってみた
Yesod でブログエンジンをつくってみた
Hiromi Ishii
2015 lodc&UDC ゴミ多言語変換用データ基盤
2015 lodc&UDC ゴミ多言語変換用データ基盤
Takuya Yamagata
Streaming data processing ライブラリの紹介 (主に Conduit)
Streaming data processing ライブラリの紹介 (主に Conduit)
krdlab
Digital Signature and PKI
Digital Signature and PKI
Seizan Shimazaki
Session2:「グローバル化する情報処理」/伊藤敬彦
Session2:「グローバル化する情報処理」/伊藤敬彦
Preferred Networks
Icfp2009
Icfp2009
Hideyuki Tanaka
怪しいWindowsプログラミング
怪しいWindowsプログラミング
nagoya313
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
Xpath in-lens
Xpath in-lens
Hideyuki Tanaka
IdrisでWebアプリを書く
IdrisでWebアプリを書く
Hideyuki Tanaka
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦い
Yuto Komai
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
Seo camp paris - A chaque enjeu, sa stratégie - Tips & REX
Seo camp paris - A chaque enjeu, sa stratégie - Tips & REX
Intuiti
Visual Design with Data
Visual Design with Data
Seth Familian
Andere mochten auch
(17)
Monad tutorial
Monad tutorial
PFIセミナー 2013/02/28 「プログラミング言語の今」
PFIセミナー 2013/02/28 「プログラミング言語の今」
Yesod でブログエンジンをつくってみた
Yesod でブログエンジンをつくってみた
2015 lodc&UDC ゴミ多言語変換用データ基盤
2015 lodc&UDC ゴミ多言語変換用データ基盤
Streaming data processing ライブラリの紹介 (主に Conduit)
Streaming data processing ライブラリの紹介 (主に Conduit)
Digital Signature and PKI
Digital Signature and PKI
Session2:「グローバル化する情報処理」/伊藤敬彦
Session2:「グローバル化する情報処理」/伊藤敬彦
Icfp2009
Icfp2009
怪しいWindowsプログラミング
怪しいWindowsプログラミング
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Xpath in-lens
Xpath in-lens
IdrisでWebアプリを書く
IdrisでWebアプリを書く
関数プログラミング入門
関数プログラミング入門
大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦い
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Seo camp paris - A chaque enjeu, sa stratégie - Tips & REX
Seo camp paris - A chaque enjeu, sa stratégie - Tips & REX
Visual Design with Data
Visual Design with Data
Ähnlich wie Ppl
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoop
Teruo Kawasaki
Clrh 110827 wfho
Clrh 110827 wfho
Tomoyuki Obi
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
日本マイクロソフト株式会社
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
Ryo Mitoma
Firefoxの開発プロセス
Firefoxの開発プロセス
Makoto Kato
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
Yuichi Tateno
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Ryo Nakamaru
OSvのご紹介 in Java 8 HotSpot meeting
OSvのご紹介 in Java 8 HotSpot meeting
Takuya ASADA
The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurug
SAKURUG co.
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
20090328
20090328
小野 修司
Aspnet mvc 6の今を紹介
Aspnet mvc 6の今を紹介
Makoto Nishimura
Jenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdi
昌桓 李
AndroidでActiveRecordライクにDBを使う
AndroidでActiveRecordライクにDBを使う
Fujimura Munehiko
JavaScript 研修
JavaScript 研修
Yuki Ishikawa
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
じゅん なかざ
Java in the World of Container by David Buck
Java in the World of Container by David Buck
オラクルエンジニア通信
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
Yahoo!デベロッパーネットワーク
OpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かす
KUNITO Atsunori
2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよ
kumake
Ähnlich wie Ppl
(20)
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoop
Clrh 110827 wfho
Clrh 110827 wfho
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
Firefoxの開発プロセス
Firefoxの開発プロセス
fluentd を利用した大規模ウェブサービスのロギング
fluentd を利用した大規模ウェブサービスのロギング
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
OSvのご紹介 in Java 8 HotSpot meeting
OSvのご紹介 in Java 8 HotSpot meeting
The seminar of asp.net at 201908 sakurug
The seminar of asp.net at 201908 sakurug
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
20090328
20090328
Aspnet mvc 6の今を紹介
Aspnet mvc 6の今を紹介
Jenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdi
AndroidでActiveRecordライクにDBを使う
AndroidでActiveRecordライクにDBを使う
JavaScript 研修
JavaScript 研修
PHP開発者のためのNoSQL入門
PHP開発者のためのNoSQL入門
Java in the World of Container by David Buck
Java in the World of Container by David Buck
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
OpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かす
2015-12-16 某S社、出直しDDDってるってよ
2015-12-16 某S社、出直しDDDってるってよ
Mehr von Seizan Shimazaki
PFDS8.1
PFDS8.1
Seizan Shimazaki
20120527yesod
20120527yesod
Seizan Shimazaki
Yesod and Auth
Yesod and Auth
Seizan Shimazaki
Pfds20120304
Pfds20120304
Seizan Shimazaki
Cryptography
Cryptography
Seizan Shimazaki
一方向ハッシュ関数(One-way Hash Function)
一方向ハッシュ関数(One-way Hash Function)
Seizan Shimazaki
メッセージ認証コード(Message Authentication Code)
メッセージ認証コード(Message Authentication Code)
Seizan Shimazaki
Mehr von Seizan Shimazaki
(7)
PFDS8.1
PFDS8.1
20120527yesod
20120527yesod
Yesod and Auth
Yesod and Auth
Pfds20120304
Pfds20120304
Cryptography
Cryptography
一方向ハッシュ関数(One-way Hash Function)
一方向ハッシュ関数(One-way Hash Function)
メッセージ認証コード(Message Authentication Code)
メッセージ認証コード(Message Authentication Code)
Ppl
1.
HaskellでWebアプリづくり ∼WebアプリケーションフレームワークYesod∼
株式会社ワークスアプリケーションズ 島崎 清山 (@seizans)
2.
はじめに • 今日使うプロジェクトを作成します
• cd • cat .bash_profile >> .bashrc •. .bashrc init • コマンド:yesod • 自分の名前は任意 • プロジェクト名も任意 • DBは s (SQLite) を選択してください • cd (プロジェクト名) で移動 • cabal-dev install で必要ライブラリのインストール
3.
「関数型言語」でのプログラ ミングをしたことの有無は?
4.
「関数型言語」は純粋な処理 は得意だけど IO処理は苦手?
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 で何か作って運用してみたかった • 期限が決まっているネタがあったので作ってみた
8.
会社紹介 • 株式会社ワークスアプリケーションズ • ERPパッケージ「COMPANY」(人事給与、会計、等) の開発、販売、保守運用 •
グループ社員数 2000 ~ 4000 の間くらい • 研究開発部門では10人くらい趣味で Haskell を読み書き • 随時エンジニアを募集しています
9.
Agenda • Haskell
について • Yesod について • Yesod でプログラミング • まとめ
10.
Haskell で書くメリット(抜粋) • 強力な型推論を含む静的型付け
• 型に関わる実行時エラーはコンパイル時に防止 • 型は必要最小限だけ書いても動いてくれる • Null をなくすことに成功 • Null Pointer Exception は存在しない • 関数が null を返すかの確認が不要に • IO を分離することに成功 • IO は例外が起きる、非IO は例外はほぼ起きない • 書く場所によって何に注意すべきか考えられる
11.
Haskell で書くメリット(抜粋) • 関数が柔軟に使えるようになっています •
パターンは1つの関数にできます • 関数を見た瞬間に把握できるので可読性が良いです • 他にもいろいろなメリットがあります • どのような問題解決をしてメリットを生み出したのか という手法も面白いかもしれません • この続きは Haskell の入門書で
12.
Haskell の入門書 • 左:「プログラミングHaskell」 •
右:「すごいHaskellたのしく学ぼう!」
13.
Haskellアプリ:Monadius • Haskellで書かれたグラディウス(ゲーム) • 2005年制作(未確認) •
村主さん(@nushio さん、すごいHaskell訳者)制作 • http://www.geocities.jp/takascience/haskell/monadius_ja.html • 着想「関数型言語でゲームを書くと楽になるのでは」 • でも「関数型言語は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
18.
ハンズオンの目標 • ~/haskell/hello • http://localhost:3000 •
CRUD 処理を一通り書く • これができれば WebアプリはだいたいOK • Form で POST してデータ新規作成をするページ • データのリストビューを見れるページ • 今あるデータを変更するページ • まずはコードを見つつ解説を少し
19.
1.ページを作る • 何を定義すればページができるか? • URL •
処理 (Handler) • View (テンプレート)
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種類 ラベル名 デフォルト値
23.
4.DB処理を書く • データの
Insert を把握する • Form からのデータを Insert するのはとても簡単
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 モジュール
28.
実用 • テスト • CIツールの活用 •
デプロイ
29.
実用:テスト • Hspec
(HUnit の代替品) • 仕様書ライクに書ける単体テスト • Ruby 由来 • QuickCheck • 性質を書くとテストを自動生成してくれる仕組み • Haskell 由来 • doctest • ドキュメントに利用例や性質を書き、それを自動的 にテストする仕組み • Python 由来
30.
実用:テスト • Webアプリケーションのテスト • DB処理のテスト •
Handlerのテスト(HTTPリクエストを受けた結果) • 画面系のテスト:JavaScript の領域
31.
実用:テスト • yesod-test
パッケージがテストフレームワークを提供 • tests/HomeTest.hs に例があります • HTTP リクエストを作って レスポンスをテストする
32.
実用:テスト • yesod-test
の活用方法 その2 • テスト用 runDB を提供してくれているので • DB処理まわりのテストも書ける
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)を少し書くだけ
35.
実用:CIツール • Travis •
.travis.yml をこれだけ書けば • push毎に実行
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 でスタートさせましょう • 疑問・質問は遠慮なくどうぞ • みんなで解決していきましょう
42.
Happy Haskell Web
Programming!!
Jetzt herunterladen