Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Scotty + Aeson + Persistentで作るJSON Web API
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Fujimura Daisuke
July 07, 2012
Programming
12
9.8k
Scotty + Aeson + Persistentで作るJSON Web API
Fujimura Daisuke
July 07, 2012
Tweet
Share
More Decks by Fujimura Daisuke
See All by Fujimura Daisuke
現役スタートアップCTOが解説する、ソフトウェア開発という仕事の理論・実践・キャリア
fujimura
0
110
庭と負債
fujimura
4
2.5k
AIの時代で我々はどのようにコードを書くのか
fujimura
4
1.1k
SaaSを作るという仕事について
fujimura
13
6.5k
一文字エイリアスのすすめ
fujimura
0
500
現役CTOが語る!RubyKaigiの楽しみ方
fujimura
0
1.3k
いかにして文系新卒エンジニアが「大きな問い」を大事にするCTOになったのか
fujimura
2
790
Kaigi on Rails 2022 - 既存Railsアプリ攻略法 CTOが見ること・やること・考えること
fujimura
14
5.5k
SimpleDelegator活用のご提案
fujimura
0
1.7k
Other Decks in Programming
See All in Programming
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
200
Data-Centric Kaggle
isax1015
2
770
Implementation Patterns
denyspoltorak
0
280
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
430
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
140
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
460
AI時代の認知負荷との向き合い方
optfit
0
160
Smart Handoff/Pickup ガイド - Claude Code セッション管理
yukiigarashi
0
130
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
200
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
230
CSC307 Lecture 09
javiergs
PRO
1
830
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
Evolving SEO for Evolving Search Engines
ryanjones
0
120
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Producing Creativity
orderedlist
PRO
348
40k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
110
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Speed Design
sergeychernyshev
33
1.5k
Done Done
chrislema
186
16k
Transcript
Scotty + Aeson + PersistentͰ࡞ΔJSON Web API גࣜձࣾAiming ౻ଜେհ @
Yesodษڧձୈ2ճ, 2012-07-07
ࣗݾհ • ౻ଜେհ • http://fujimuradaisuke.com @ffu_ • גࣜձࣾAimingॴଐ • Haskell͖ͷRuby
on RailsϓϩάϥϚʔ • ࠷ۙJavaScript/CoffeeScriptΑ͘ॻ͍͍ͯΔ • ΞδΞͷྉཧͱΞϝϦΧͷϏʔϧɺΞϧβεͷϫΠϯ͕͖ • ϥςϯΞϝϦΧจֶ͖
ͱ͜ΖͰɺͳͥࠓJSON Web APIͳͷ͔ • ͳΜ͔ͩ࠷ۙJSON Web APIΛ࡞Δػձ͕ଟ͍ • ҰͭͷΞϓϦέʔγϣϯΛෳΫϥΠΞϯτͰಈ͔͢ࣄྫ͕૿͖͑ͯͨ •
Mobile, PC, iOS/Android Nativeશ෦ʹల։ͱ͔ • ϑϩϯτΤϯυͰUIΛߏங͢Δٕज़ͷൃୡɾਁಁ • ΫϥΠΞϯτɾαʔόʔͷۀਐΈͦ͏
ಥવͰ͕͢Yesod͍·͍ͪͩͱࢥ͏ • ࠷ۙWebσβΠϯ/ϑϩϯτΤϯυ։ൃ͕Ұஈͱ͘͠ͳ͖ͬͯͨؾ͕͢Δ • ͳͷͰΫϥΠΞϯτʗαʔόʔͰۀ͕Ͱ͖ͳ͍ͱݫ͍͠ • Έͳ͞ΜHamletͱCassiusͰϓϩμΫγϣϯϨϕϧͷϨεϙϯγϒͳϚʔΫ ΞοϓͰ͖·͔͢ʁ • Α͏͘sass/less͕ਁಁ͖ͯͨ͠ͷʹ·ͨ৽͍ٕ͠ज़Λ…
• ͔͠΄ͱΜͲҰॹͩ͠… • Web APIͱͯ͠͏ͱͳΔͱϑϧελοΫͷ͕ա͗Δ • ͳͥ͏༧ఆͷͳ͍ೝূϥΠϒϥϦͷΠϯετʔϧΛٻΊΒΕΔͷ͔
ͦ͜ͰWeb APIscottyͰ࡞Ζ͏Ͱͳ͍͔ • Web API࡞ΓDBΞΫηεͱϧʔςΟϯά͑͞Ͱ͖ΕجຊOK • ྫ͑RubyͩͱWeb API࡞Δ࣌RailsͰͳ͘sinatraͬͯͷΑ͋͘Δ • ϥΠϒϥϦͷґଘؔগͳ͍΄͏͕Կ͔ͱͤ
• DBpersistentɺJSONaesonͰͬͯΈΑ͏
scottyʹ͍ͭͯ • RubyͷsinatraΠϯεύΠΞͷWeb Application Framework • https://github.com/xich/scotty/ • γϯϓϧͳAPI •
Yesodͱಉ͘͡waiϕʔε
aesonʹ͍ͭͯ • Real World HaskellͷஶऀɺBryan O'Sullivan͞Μͷ࡞ͬͨJSONϥΠϒϥϦ • https://github.com/bos/aeson • ·ΔͰJSONͷΑ͏ͳߏจͰॻ͚ΔDSL(?)͕େมศར
• ͍Β͍͠
persistentʹ͍ͭͯ • ͝ଘYesodಉࠝͷORM • (͔͠͠ɺ”Object”ʹϚοϐϯά͞ΕͯΔؾશ͘ແ͍ʣ • http://www.yesodweb.com/book/persistent • PostgreSQL, SQLite,
MongoDB, MySQLʹରԠ • QuasiQuoteͰςʔϒϧఆٛɺϚΠάϨʔγϣϯ͋Δ • ܕνΣοΫ͖ͷSQLͬͯײ͡Ͱ͍͍͢
Ͱ͖·ͨ͠ • ͔݁Βݴ͏ͱͱͯͤͳΈ߹ΘͤͰͨ͠
persistentͱaesonͷ૬ੑ͕͢Β͔ͬͨ͠(1) • ςʔϒϧఆٛͨ͠ΒɺͦΕΛToJSON/FromJSONͷΠϯελϯεʹ͢Δ
persistentͱaesonͷ૬ੑ͕͢Β͔ͬͨ͠(2) • ͢ΔͱɺDBͷߦΛJSONͱͯ͠ѻ͑Δ(ToJSONͷΠϯελϯεʹͳΔͷͰʣ • ͳͷͰɺscottyͰͦͷ··JSONϨεϙϯεͱͯ͠ฦͤΔ
persistentͱaesonͷ૬ੑ͕͢Β͔ͬͨ͠(3) • ࠓςʔϒϧͱಉ͡εΩʔϚͷJSONΛPOST͢Δͱɺ • ͦͷ··ߦͱͯ͠DBʹೖΕΒΕΔʢFromJSONͷߦͱͯ͠ड͚औΕΔ͔Βʣ
͜Ε͔ͳΓΤϨΨϯτͳͷͰ • ͜ͷهड़ྔͰDB͔Βͷऔಘ/DBͷՃ͕Ͱ͖·͢ • ͍͢͝ʂ
ΩϥʔϥΠϒϥϦͷ༧ײ • ґଘ͕ؔগͳ͍ͷͰίϯύΠϧָ • ܕΫϥεΛ׆͔ͤΔ • Web APIͳΒHaskellͰΫϥΠΞϯτ։ൃͱͷڠಇͳ͠ • Ή͠ΖϥϯλΠϜΤϥʔ͕ແ͍ͷͰΫϥΠΞϯτ։ൃͤ
༨ஊ • ͪͳΈʹҐஔใܥͷWebαʔϏεΛ࡞Ζ͏ͱͯ͠·ͨ͠ • ΫϥΠΞϯτBackbone.js, CoffeeScriptɺGoogle Maps͋ͨΓΛར༻ • ࣮ࡍͷͱ͜ΖɺΫϥΠΞϯτͷίʔυΛॻ͍ͯΔํ͕͔ͬͨ… •
HTMLςϯϓϨʔτmustacheΛͬͨɻ͜Εྑ͔ͬͨ • ·ͩෳࡶͳ͜ͱΛͬͯͳ͍ͷͰɺམͱ͕݀͋͠Γͦ͏ • ೝূ·ΘΓ·ͩະணखɻམͱ͔݀͜͜͠…ʁ • Template HaskellΛͬͨΒToJSON/FromJSONʹ͢ΔͷࣗಈͰͰ͖ͦ͏ͳ ؾ͕…
͓ΘΓ • ιʔείʔυ https://github.com/fujimura/spot • ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ