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
52
庭と負債
fujimura
4
2.3k
AIの時代で我々はどのようにコードを書くのか
fujimura
4
990
SaaSを作るという仕事について
fujimura
13
6.3k
一文字エイリアスのすすめ
fujimura
0
440
現役CTOが語る!RubyKaigiの楽しみ方
fujimura
0
1.3k
いかにして文系新卒エンジニアが「大きな問い」を大事にするCTOになったのか
fujimura
2
740
Kaigi on Rails 2022 - 既存Railsアプリ攻略法 CTOが見ること・やること・考えること
fujimura
14
5.2k
SimpleDelegator活用のご提案
fujimura
0
1.7k
Other Decks in Programming
See All in Programming
MCP連携で加速するAI駆動開発/mcp integration accelerates ai-driven-development
bpstudy
0
310
Bedrock AgentCore ObservabilityによるAIエージェントの運用
licux
9
710
バイブコーディング × 設計思考
nogu66
0
120
AI時代のドメイン駆動設計-DDD実践におけるAI活用のあり方 / ddd-in-ai-era
minodriven
21
8.5k
CLI ツールを Go ライブラリ として再実装する理由 / Why reimplement a CLI tool as a Go library
ktr_0731
3
1.1k
Understanding Ruby Grammar Through Conflicts
yui_knk
1
120
DynamoDBは怖くない!〜テーブル設計の勘所とテスト戦略〜
hyamazaki
1
200
「リーダーは意思決定する人」って本当?~ 学びを現場で活かす、リーダー4ヶ月目の試行錯誤 ~
marina1017
0
230
『リコリス・リコイル』に学ぶ!! 〜キャリア戦略における計画的偶発性理論と変わる勇気の重要性〜
wanko_it
1
570
コーディングは技術者(エンジニア)の嗜みでして / Learning the System Development Mindset from Rock Lady
mackey0225
2
540
AI OCR API on Lambdaを Datadogで可視化してみた
nealle
0
120
技術的負債で信頼性が限界だったWordPress運用をShifterで完全復活させた話
rvirus0817
1
1.9k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
For a Future-Friendly Web
brad_frost
179
9.9k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
How to train your dragon (web standard)
notwaldorf
96
6.2k
How GitHub (no longer) Works
holman
314
140k
Art, The Web, and Tiny UX
lynnandtonic
302
21k
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 • ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ