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
庭と負債
fujimura
2
270
AIの時代で我々はどのようにコードを書くのか
fujimura
3
770
SaaSを作るという仕事について
fujimura
12
5.7k
一文字エイリアスのすすめ
fujimura
0
310
現役CTOが語る!RubyKaigiの楽しみ方
fujimura
0
1.2k
いかにして文系新卒エンジニアが「大きな問い」を大事にするCTOになったのか
fujimura
2
660
Kaigi on Rails 2022 - 既存Railsアプリ攻略法 CTOが見ること・やること・考えること
fujimura
14
3.9k
SimpleDelegator活用のご提案
fujimura
0
1.5k
入門 名前
fujimura
23
13k
Other Decks in Programming
See All in Programming
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
330
3rd party scriptでもReactを使いたい! Preact + Reactのハイブリッド開発
righttouch
PRO
1
600
Jakarta EE meets AI
ivargrimstad
0
120
OSSで起業してもうすぐ10年 / Open Source Conference 2024 Shimane
furukawayasuto
0
100
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
330
Less waste, more joy, and a lot more green: How Quarkus makes Java better
hollycummins
0
100
「今のプロジェクトいろいろ大変なんですよ、app/services とかもあって……」/After Kaigi on Rails 2024 LT Night
junk0612
5
2.1k
受け取る人から提供する人になるということ
little_rubyist
0
230
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
Enabling DevOps and Team Topologies Through Architecture: Architecting for Fast Flow
cer
PRO
0
310
リアーキテクチャxDDD 1年間の取り組みと進化
hsawaji
1
220
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
170
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
We Have a Design System, Now What?
morganepeng
50
7.2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
Speed Design
sergeychernyshev
24
610
Embracing the Ebb and Flow
colly
84
4.5k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Being A Developer After 40
akosma
86
590k
GraphQLとの向き合い方2022年版
quramy
43
13k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Documentation Writing (for coders)
carmenintech
65
4.4k
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 • ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ