Slide 1

Slide 1 text

Scotty + Aeson + PersistentͰ࡞ΔJSON Web API גࣜձࣾAiming ౻ଜେհ @ Yesodษڧձୈ2ճ, 2012-07-07

Slide 2

Slide 2 text

ࣗݾ঺հ • ౻ଜେհ • http://fujimuradaisuke.com @ffu_ • גࣜձࣾAimingॴଐ • Haskell޷͖ͷRuby on RailsϓϩάϥϚʔ • ࠷ۙ͸JavaScript/CoffeeScript΋Α͘ॻ͍͍ͯΔ • ΞδΞͷྉཧͱΞϝϦΧͷϏʔϧɺΞϧβεͷϫΠϯ͕޷͖ • ϥςϯΞϝϦΧจֶ΋޷͖

Slide 3

Slide 3 text

ͱ͜ΖͰɺͳͥࠓJSON Web APIͳͷ͔ • ͳΜ͔ͩ࠷ۙJSON Web APIΛ࡞Δػձ͕ଟ͍ • ҰͭͷΞϓϦέʔγϣϯΛෳ਺ΫϥΠΞϯτͰಈ͔͢ࣄྫ͕૿͖͑ͯͨ • Mobile, PC, iOS/Android Nativeશ෦ʹల։ͱ͔ • ϑϩϯτΤϯυͰUIΛߏங͢Δٕज़ͷൃୡɾਁಁ • ΫϥΠΞϯτɾαʔόʔͷ෼ۀ͸ਐΈͦ͏

Slide 4

Slide 4 text

ಥવͰ͕͢Yesod͸͍·͍ͪͩͱࢥ͏ • ࠷ۙWebσβΠϯ/ϑϩϯτΤϯυ։ൃ͕Ұஈͱ೉͘͠ͳ͖ͬͯͨؾ͕͢Δ • ͳͷͰΫϥΠΞϯτʗαʔόʔͰ෼ۀ͕Ͱ͖ͳ͍ͱݫ͍͠ • Έͳ͞ΜHamletͱCassiusͰϓϩμΫγϣϯϨϕϧͷϨεϙϯγϒͳϚʔΫ ΞοϓͰ͖·͔͢ʁ • Α͏΍͘sass/less͕ਁಁ͖ͯͨ͠ͷʹ·ͨ৽͍ٕ͠ज़Λ… • ͔͠΋΄ͱΜͲҰॹͩ͠… • Web APIͱͯ͠࢖͏ͱͳΔͱϑϧελοΫͷ౓͕ա͗Δ • ͳͥ࢖͏༧ఆͷͳ͍ೝূϥΠϒϥϦͷΠϯετʔϧΛٻΊΒΕΔͷ͔

Slide 5

Slide 5 text

ͦ͜ͰWeb API͸scottyͰ࡞Ζ͏Ͱ͸ͳ͍͔ • Web API࡞Γ͸DBΞΫηεͱϧʔςΟϯά͑͞Ͱ͖Ε͹جຊOK • ྫ͑͹RubyͩͱWeb API࡞Δ࣌RailsͰ͸ͳ͘sinatraͬͯͷ͸Α͋͘Δ • ϥΠϒϥϦͷґଘؔ܎͸গͳ͍΄͏͕Կ͔ͱ޾ͤ • DB͸persistentɺJSON͸aesonͰ΍ͬͯΈΑ͏

Slide 6

Slide 6 text

scottyʹ͍ͭͯ • RubyͷsinatraΠϯεύΠΞͷWeb Application Framework • https://github.com/xich/scotty/ • γϯϓϧͳAPI • Yesodͱಉ͘͡waiϕʔε

Slide 7

Slide 7 text

aesonʹ͍ͭͯ • Real World HaskellͷஶऀɺBryan O'Sullivan͞Μͷ࡞ͬͨJSONϥΠϒϥϦ • https://github.com/bos/aeson • ·ΔͰJSONͷΑ͏ͳߏจͰॻ͚ΔDSL(?)͕େมศར • ଎͍Β͍͠

Slide 8

Slide 8 text

persistentʹ͍ͭͯ • ͝ଘ஌YesodಉࠝͷORM • (͔͠͠ɺ”Object”ʹϚοϐϯά͞ΕͯΔؾ഑͸શ͘ແ͍ʣ • http://www.yesodweb.com/book/persistent • PostgreSQL, SQLite, MongoDB, MySQLʹରԠ • QuasiQuoteͰςʔϒϧఆٛɺϚΠάϨʔγϣϯ΋͋Δ • ܕνΣοΫ෇͖ͷSQLͬͯײ͡Ͱ࢖͍΍͍͢

Slide 9

Slide 9 text

Ͱ͖·ͨ͠ • ݁࿦͔Βݴ͏ͱͱͯ΋޾ͤͳ૊Έ߹ΘͤͰͨ͠

Slide 10

Slide 10 text

persistentͱaesonͷ૬ੑ͕͢͹Β͔ͬͨ͠(1) • ςʔϒϧఆٛͨ͠ΒɺͦΕΛToJSON/FromJSONͷΠϯελϯεʹ͢Δ

Slide 11

Slide 11 text

persistentͱaesonͷ૬ੑ͕͢͹Β͔ͬͨ͠(2) • ͢ΔͱɺDBͷߦΛJSONͱͯ͠ѻ͑Δ(ToJSONͷΠϯελϯεʹͳΔͷͰʣ • ͳͷͰɺscottyͰͦͷ··JSONϨεϙϯεͱͯ͠ฦͤΔ

Slide 12

Slide 12 text

persistentͱaesonͷ૬ੑ͕͢͹Β͔ͬͨ͠(3) • ࠓ౓͸ςʔϒϧͱಉ͡εΩʔϚͷJSONΛPOST͢Δͱɺ • ͦͷ··ߦͱͯ͠DBʹೖΕΒΕΔʢFromJSONͷߦͱͯ͠ड͚औΕΔ͔Βʣ

Slide 13

Slide 13 text

͜Ε͸͔ͳΓΤϨΨϯτͳͷͰ͸ • ͜ͷهड़ྔͰDB͔Βͷऔಘ/DB΁ͷ௥Ճ͕Ͱ͖·͢ • ͍͢͝ʂ

Slide 14

Slide 14 text

ΩϥʔϥΠϒϥϦͷ༧ײ • ґଘؔ܎͕গͳ͍ͷͰίϯύΠϧ΋ָ • ܕΫϥεΛ׆͔ͤΔ • Web APIͳΒHaskellͰ΋ΫϥΠΞϯτ։ൃͱͷڠಇ΋໰୊ͳ͠ • Ή͠ΖϥϯλΠϜΤϥʔ͕ແ͍ͷͰΫϥΠΞϯτ։ൃ͸޾ͤ

Slide 15

Slide 15 text

༨ஊ • ͪͳΈʹҐஔ৘ใܥͷWebαʔϏεΛ࡞Ζ͏ͱͯ͠·ͨ͠ • ΫϥΠΞϯτ͸Backbone.js, CoffeeScriptɺGoogle Maps͋ͨΓΛར༻ • ࣮ࡍͷͱ͜ΖɺΫϥΠΞϯτͷίʔυΛॻ͍ͯΔํ͕௕͔ͬͨ… • HTMLςϯϓϨʔτ͸mustacheΛ࢖ͬͨɻ͜Ε΋ྑ͔ͬͨ • ·ͩෳࡶͳ͜ͱΛ΍ͬͯͳ͍ͷͰɺམͱ͕݀͋͠Γͦ͏ • ೝূ·ΘΓ͸·ͩະணखɻམͱ݀͠͸͔͜͜…ʁ • Template HaskellΛ࢖ͬͨΒToJSON/FromJSONʹ͢Δͷ΋ࣗಈͰͰ͖ͦ͏ͳ ؾ͕…

Slide 16

Slide 16 text

͓ΘΓ • ιʔείʔυ https://github.com/fujimura/spot • ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ