SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

081108huge_data.ppt
081108huge_data.ppt081108huge_data.ppt
081108huge_data.ppt
Naoya Ito
 
オフラインファーストの思想と実践
オフラインファーストの思想と実践オフラインファーストの思想と実践
オフラインファーストの思想と実践
Shumpei Shiraishi
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
emasaka
 

La actualidad más candente (20)

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

Destacado

Yahoo! JAPANが持つデータ分析ソリューションの紹介 #yjdsnight
Yahoo! JAPANが持つデータ分析ソリューションの紹介 #yjdsnightYahoo! JAPANが持つデータ分析ソリューションの紹介 #yjdsnight
Yahoo! JAPANが持つデータ分析ソリューションの紹介 #yjdsnight
Yahoo!デベロッパーネットワーク
 
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
Yahoo!デベロッパーネットワーク
 

Destacado (7)

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

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

20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみた
ngi group.
 
Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4
Koji SHIMADA
 
丸山先生レクチャーシリーズ2007-2008
丸山先生レクチャーシリーズ2007-2008丸山先生レクチャーシリーズ2007-2008
丸山先生レクチャーシリーズ2007-2008
Yoichiro Tanaka
 

Similar a Scotty を利用した "ゆるふわ" Web サービス作成 (20)

Ruby on Rails Tutorial Chapter5-7
Ruby on Rails Tutorial Chapter5-7Ruby on Rails Tutorial Chapter5-7
Ruby on Rails Tutorial Chapter5-7
 
徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925徳島OSS勉強会第四回 シラサギハンズオン 0925
徳島OSS勉強会第四回 シラサギハンズオン 0925
 
シラサギハンズオン 大阪
シラサギハンズオン 大阪シラサギハンズオン 大阪
シラサギハンズオン 大阪
 
シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016
 
REACT & WEB API
REACT & WEB APIREACT & WEB API
REACT & WEB API
 
Rake
RakeRake
Rake
 
シラサギハンズオン 東京
シラサギハンズオン 東京シラサギハンズオン 東京
シラサギハンズオン 東京
 
Rails と Rack と HTTP と通信の話
Rails と Rack と HTTP と通信の話Rails と Rack と HTTP と通信の話
Rails と Rack と HTTP と通信の話
 
RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~RでつくるWebアプリ~rApache編~
RでつくるWebアプリ~rApache編~
 
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみた
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
第8回 天領倉敷 ScalaScala In Kurashiki 8
第8回 天領倉敷 ScalaScala In Kurashiki 8第8回 天領倉敷 ScalaScala In Kurashiki 8
第8回 天領倉敷 ScalaScala In Kurashiki 8
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4
 
ASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おうASP.NET Core WebAPIでODataを使おう
ASP.NET Core WebAPIでODataを使おう
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
 
丸山先生レクチャーシリーズ2007-2008
丸山先生レクチャーシリーズ2007-2008丸山先生レクチャーシリーズ2007-2008
丸山先生レクチャーシリーズ2007-2008
 
20101106 ramaze発表
20101106 ramaze発表20101106 ramaze発表
20101106 ramaze発表
 

Último

Último (10)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: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
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: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...
 
論文紹介: 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
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

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