SlideShare a Scribd company logo
Scotty を用いた “ゆるふわ” Web サービス作成
KrdLab
(2014/02/16)
はじめに
 Yesod も良いけれど,
 ゆるりと,ふわりと,お手軽に

 Scotty を使って Web サービスを作ってみましょう
 そんな主旨
 (Haskell の基本文法については,ここまでの発表で既に触れているに違いない)
Scotty 概要
 Ruby の Sinatra ライクな Web Framework
 ‘Scotty is the cheap and cheerful way to write RESTful,
declarative web applications.’

(引用元 → http://hackage.haskell.org/package/scotty)
基本的な書き方
書式: {method} {route-pattern} {したいこと}
get

"/" $
file "/var/www/simple-webapp/index.html"

post "/memos" $ do
data <- jsonData
memo <- saveMemo data
json memo

delete "/memos/:id" $ do
mid <- param "id"
deleteMemo mid
noContent
Route Pattern
 capture
 get "/foo/:bar" のように書くと,これになる
 コロンでパラメータを表現できる

 regex
 正規表現を使える

 function
 関数でパターンを記述できる
 「リクエストの内容が~の時にマッチさせる」みたいな

 literal
 コロンが特殊扱いされない

基本的に capture をよく
使います
Request
 request

 リクエスト本体

 reqHeader

 ヘッダを返す

 body

 ボディを返す

 param, params
 パラメータを返す

 jsonData

 ボディをパースして JSON オブジェクトを返す
 失敗すると例外が飛ぶ (← rescue で対応)

 files

 アップロードされたファイルを返す

簡単なことなら
すぐできそうですよね
Response and Redirecting
 status
 ステータスをいじる

 addHeader, setHeader
 ヘッダをいじる

 redirect
 リダイレクトを返す

こっちもほら
Setting Response Body
 text
 html

 file
 json
 source
 Conduit でボディを構築する

 raw
 ByteString をそのまま返す

いけそうじゃない?
例外処理
 raise :: Text -> ActionM a

当然エラー処理もね

 例外を投げる
 捕まえないと,クライアントに 500 として返る

 rescue :: ActionM a -> (Text -> ActionM a) -> ActionM a
 例外を捕まえる
 param や jsonData 等で発生する例外を補足して,400 を返すとか

 next :: ActionM a
 次の Route Pattern に処理を渡す
単純なメモアプリ
 https://github.com/krdlab/examples/tree/master/simple-scottywebapp
 試す時は以下の手順で
 $ cabal sandbox init
 $ cabal install --only-dependencies
 $ cabal build
おわりに
 気軽さを感じられたでしょうか?
 ちょっと persistent 周りがつらかったかもしれませんね…

 参考
 http://hackage.haskell.org/package/scotty
 https://www.fpcomplete.com/school/starting-with-haskell/libraries-andframeworks/persistent-db
 http://ocharles.org.uk/blog/posts/2013-12-05-24-days-of-hackage-scotty.html
 http://adit.io/posts/2013-04-15-making-a-website-with-haskell.html

More Related Content

PPTX
Yesod勉強会
KEY
Yesodを支える技術
PDF
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
PDF
Crawler Commons
PPTX
Couch Db勉強会0623 by yssk22
PDF
Rubyで作るクローラー Ruby crawler
PDF
Rubyで始めるWebスクレイピング
Yesod勉強会
Yesodを支える技術
2015年GMOペパボ新卒エンジニア研修 Web開発研修イントロダクション
Crawler Commons
Couch Db勉強会0623 by yssk22
Rubyで作るクローラー Ruby crawler
Rubyで始めるWebスクレイピング

What's hot (20)

PDF
Yesod(at FPM2012)
PDF
Service worker が拓く mobile web の新しいかたち
PPT
081108huge_data.ppt
PDF
Asset Pipeline for Perl
PPTX
オフラインファーストの思想と実践
PDF
JAWSUG architecture-crowler
PDF
RESTとRailsスタイル
PPTX
20161208 Classmethod Codenize Tools
PDF
200k/sec
PDF
PHPコードではなく PHPコードの「書き方」を知る
PDF
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
PDF
ES6 in Practice
KEY
CMS for Cloud by Ruby
PDF
Anemoneによるクローラー入門
PDF
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
PDF
AWS SDK for Go in #jawsmeguro
PDF
Closure Compiler Updates for ES6
PDF
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
PPTX
Github pagesで独自ドメインのサイトを作る
PDF
Sass/Compass よくあるトラブルと 解決方法・回避方法
Yesod(at FPM2012)
Service worker が拓く mobile web の新しいかたち
081108huge_data.ppt
Asset Pipeline for Perl
オフラインファーストの思想と実践
JAWSUG architecture-crowler
RESTとRailsスタイル
20161208 Classmethod Codenize Tools
200k/sec
PHPコードではなく PHPコードの「書き方」を知る
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ES6 in Practice
CMS for Cloud by Ruby
Anemoneによるクローラー入門
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
AWS SDK for Go in #jawsmeguro
Closure Compiler Updates for ES6
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Github pagesで独自ドメインのサイトを作る
Sass/Compass よくあるトラブルと 解決方法・回避方法
Ad

Viewers also liked (7)

PDF
Prestoクエリログの保存/分析機能の構築 #yjdsnight
PDF
Presto in Yahoo! JAPAN #yjdsnight
PDF
Yahoo!ブラウザーにおける市場環境の分析と戦略化
PDF
Yahoo! JAPANが持つデータ分析ソリューションの紹介 #yjdsnight
PDF
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
PDF
Railway Oriented Programming
PDF
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Prestoクエリログの保存/分析機能の構築 #yjdsnight
Presto in Yahoo! JAPAN #yjdsnight
Yahoo!ブラウザーにおける市場環境の分析と戦略化
Yahoo! JAPANが持つデータ分析ソリューションの紹介 #yjdsnight
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
Railway Oriented Programming
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Ad

Scotty を利用した "ゆるふわ" Web サービス作成

  • 1. Scotty を用いた “ゆるふわ” Web サービス作成 KrdLab (2014/02/16)
  • 2. はじめに  Yesod も良いけれど,  ゆるりと,ふわりと,お手軽に  Scotty を使って Web サービスを作ってみましょう  そんな主旨  (Haskell の基本文法については,ここまでの発表で既に触れているに違いない)
  • 3. Scotty 概要  Ruby の Sinatra ライクな Web Framework  ‘Scotty is the cheap and cheerful way to write RESTful, declarative web applications.’ (引用元 → http://hackage.haskell.org/package/scotty)
  • 4. 基本的な書き方 書式: {method} {route-pattern} {したいこと} get "/" $ file "/var/www/simple-webapp/index.html" post "/memos" $ do data <- jsonData memo <- saveMemo data json memo delete "/memos/:id" $ do mid <- param "id" deleteMemo mid noContent
  • 5. Route Pattern  capture  get "/foo/:bar" のように書くと,これになる  コロンでパラメータを表現できる  regex  正規表現を使える  function  関数でパターンを記述できる  「リクエストの内容が~の時にマッチさせる」みたいな  literal  コロンが特殊扱いされない 基本的に capture をよく 使います
  • 6. Request  request  リクエスト本体  reqHeader  ヘッダを返す  body  ボディを返す  param, params  パラメータを返す  jsonData  ボディをパースして JSON オブジェクトを返す  失敗すると例外が飛ぶ (← rescue で対応)  files  アップロードされたファイルを返す 簡単なことなら すぐできそうですよね
  • 7. Response and Redirecting  status  ステータスをいじる  addHeader, setHeader  ヘッダをいじる  redirect  リダイレクトを返す こっちもほら
  • 8. Setting Response Body  text  html  file  json  source  Conduit でボディを構築する  raw  ByteString をそのまま返す いけそうじゃない?
  • 9. 例外処理  raise :: Text -> ActionM a 当然エラー処理もね  例外を投げる  捕まえないと,クライアントに 500 として返る  rescue :: ActionM a -> (Text -> ActionM a) -> ActionM a  例外を捕まえる  param や jsonData 等で発生する例外を補足して,400 を返すとか  next :: ActionM a  次の Route Pattern に処理を渡す
  • 11. おわりに  気軽さを感じられたでしょうか?  ちょっと persistent 周りがつらかったかもしれませんね…  参考  http://hackage.haskell.org/package/scotty  https://www.fpcomplete.com/school/starting-with-haskell/libraries-andframeworks/persistent-db  http://ocharles.org.uk/blog/posts/2013-12-05-24-days-of-hackage-scotty.html  http://adit.io/posts/2013-04-15-making-a-website-with-haskell.html