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
Fujimura Daisuke
July 07, 2012
Programming
12
9.7k
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
76
庭と負債
fujimura
4
2.4k
AIの時代で我々はどのようにコードを書くのか
fujimura
4
1k
SaaSを作るという仕事について
fujimura
13
6.4k
一文字エイリアスのすすめ
fujimura
0
460
現役CTOが語る!RubyKaigiの楽しみ方
fujimura
0
1.3k
いかにして文系新卒エンジニアが「大きな問い」を大事にするCTOになったのか
fujimura
2
760
Kaigi on Rails 2022 - 既存Railsアプリ攻略法 CTOが見ること・やること・考えること
fujimura
14
5.3k
SimpleDelegator活用のご提案
fujimura
0
1.7k
Other Decks in Programming
See All in Programming
KoogではじめるAIエージェント開発
hiroaki404
1
420
なぜ強調表示できず ** が表示されるのか — Perlで始まったMarkdownの歴史と日本語文書における課題
kwahiro
8
4.7k
CloudflareのSandbox SDKを試してみた
syumai
0
130
Verilator + Rust + gRPC と Efinix の RISC-V でAIアクセラレータをAIで作ってる話 RTLを語る会(18) 2025/11/08
ryuz88
0
330
CSC305 Lecture 15
javiergs
PRO
0
190
Blazing Fast UI Development with Compose Hot Reload (droidcon London 2025)
zsmb
0
500
なんでRustの環境構築してないのにRust製のツールが動くの? / Why Do Rust-Based Tools Run Without a Rust Environment?
ssssota
15
48k
アーキテクチャと考える迷子にならない開発者テスト
irof
2
140
競馬で学ぶ機械学習の基本と実践 / Machine Learning with Horse Racing
shoheimitani
0
130
Claude Code on the Web を超える!? Codex Cloud の実践テク5選
sunagaku
0
460
Temporal Knowledge Graphで作る! 時間変化するナレッジを扱うAI Agentの世界
po3rin
5
1.3k
flutter_kaigi_2025.pdf
kyoheig3
1
180
Featured
See All Featured
Fireside Chat
paigeccino
41
3.7k
Into the Great Unknown - MozCon
thekraken
40
2.1k
What's in a price? How to price your products and services
michaelherold
246
12k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Stop Working from a Prison Cell
hatefulcrawdad
272
21k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
1.8k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
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 • ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ