JSON serializers and Alba

JSON serializers and Alba

Rubyにおける各種JSONシリアライザの2020年版比較と自作のgemであるAlbaのご紹介です。

110cd4dcaed019b3bd9809e541afdeb6?s=128

Masafumi Okura

July 22, 2020
Tweet

Transcript

  1. RubyͷJSONγϦΞϥΠβΛ ൺֱͯ͠Έͨ2020೥൛ Gotanda.rb#44 2020-07-22 ©େ૔խ࢙

  2. ࣗݾ঺հ • ໊લɿେ૔խ࢙ • ॴଐɿϑϦʔϥϯεʢྺ͸1೥ͪΐͬͱɺRubyࣗମ͸8೥΄Ͳʣ • ΤσΟλɿNeovimʢVimྺ͸8೥΄Ͳʣ • ޷͖ͳϝιουɿinstance_exec •

    झຯɿᘖᘣ☕
  3. ࣗݾ঺հʢଓ͖ʣ • Kaigi on RailsͷνʔϑΦʔΨφΠβʔΛ͍ͯ͠·͢ • CFP͸ࠓ݄຤·ͰͳͷͰ࿩͢ωλ͕͋Δํ͸ͥͻʂ • ʰϚελϦϯάVimʱͷ຋༁Λ͠·ͨ͠ •

    Grow.rbͱEntaku.rbͱ͍͏ίϛϡχςΟΛιϩͰӡӦ͍ͯ͠·͢ • Shibuya.rbͱTama.rbͷڞಉΦʔΨφΠβʔͰ΋͋Γ·͢
  4. ࠓ೔ͷςʔϚɿ API/JSONʹ͍ͭͯ

  5. RubyΛ࢖ͬͯJSONΛฦ͢ํ๏

  6. JSONγϦΞϥΠβ

  7. ϝδϟʔͲ͜ΖΛൺֱͯ͠Έͨ

  8. JSONγϦΞϥΠβ3ܼʢେ૔ௐ΂ʣ • ActiveModelSerializersʢҎԼAMSʣ • ελʔ਺5k௒ɺ • jbuilder • ελʔ਺3.8kɺRailsͷσϑΥϧτʹؚ·ΕΔɺ •

    fast_jsonapi • ελʔ਺5k௒
  9. ͦͷଞͷJSONγϦΞϥΠβ • jsonapi-rb • jsonapi-resources • blueprinter • jb •

    representable • jsonapi-serializer
  10. AMS • ݹࢀͷJSONγϦΞϥΠβ • Pros • ྺ࢙͕௕͘ɺWebʹهࣄ͕๛෋ʹ͋Δ • ͲΜͳJSONεΩʔϚʹ΋ରԠՄೳ •

    Cons • ΄΅ϝϯς͞Ε͍ͯͳ͍༷ࢠ • ଎౓ʹ೉͕͋Δʢಛʹfast_jsonapiͱͷൺֱͰʣ
  11. jbuilder • Railsͷ४ެࣜJSONγϦΞϥΠβ • Pros • RailsͷίΞνʔϜʹϝϯς͞Ε͍ͯΔ҆৺ײ • RailsͰ࢖͏ͳΒґଘؔ܎Λ૿΍ͣ͞ʹࡁΉ •

    Cons • ஗͍ɺ͔ͳΓ஗͍ • ه๏ʢDSLʣ͕ಠಛͰशಘ͕େม
  12. fast_jsonapi • Netflix͕ग़ͨ͠JSON:APIಛԽܕͷJSONγϦΞϥΠβ • Pros • ඇৗʹߴ଎ • Cons •

    JSON:APIʹ४ڌͨ͠APIʹͨ͠࢖͑ͳ͍ • Netflix͕ϝϯςΛ൒͹์غ͠ɺ༗ࢤͷϑΥʔΫ͕ଘࡏ͢Δ͕gemͷ໊લ͕ มΘ͍ͬͯͨΓͯࠞ͠ಱͱ͍ͯ͠Δ
  13. ".4 KCVJMEFS GBTU@KTPOBQJ ύϑΥʔϚϯε ͦͦ͜͜ ѱ͍ ඇৗʹྑ͍ ϝϯςφϯε ͞Ε͍ͯͳ͍ ͞Ε͍ͯΔ

    ͞Ε͍ͯͳ͍ ೚ҙͷ+40/εΩʔ ϚʹରԠ͍ͯ͠Δ ͍Δ ͍Δ ͍ͳ͍
  14. ͜͜·Ͱͷ݁࿦

  15. • ߴ଎ • ϝϯς͞Ε͍ͯΔ • ೚ҙͷεΩʔϚͷJSON͕ग़ྗͰ͖ ΔʢJSON:APIܗࣜҎ֎ʹ΋ରԠ͠ ͍ͯΔʣ

  16. ͳ͍ʁ

  17. ͓Εͷ͔Μ͕͍͖͑ͨ͞ΐ͏ ͷJSONγϦΞϥΠβɺAlba ͷ͝঺հ Gotanda.rb#44 2020-07-22 ©େ૔խ࢙

  18. • ߴ଎ • ϝϯς͞Ε͍ͯΔ • ೚ҙͷεΩʔϚͷJSON͕ग़ྗͰ͖ ΔʢJSON:APIܗࣜҎ֎ʹ΋ରԠ͠ ͍ͯΔʣ

  19. ػೳΛߜΔ

  20. ໨ࢦ͢΂͖ͩͱࢥ͏΋ͷ

  21. • ΑΓখ͞ͳίΞ • ΑΓগͳ͍DSL • ΑΓগͳ͍ґଘؔ܎

  22. ΑΓখ͍͞ίΞ • ShrineʢϑΝΠϧΞοϓϩʔυϥΠϒϥϦʣ΍Rodaʢ௒ܰྔ΢ΣϒΞ ϓϦέʔγϣϯϑϨʔϜϫʔΫʣͷΑ͏ͳϓϥάΠϯϕʔεͷߏ଄ʹ ಌΕ͍ͯΔ • ໨ࢦ͢͸ίΞͷResourceϞδϡʔϧΛ100ߦҎԼʹཹΊΔ͜ͱ • ֎෦͔Β֦ுՄೳʹ͍ͨ͠ •

    ίΞͷϝϯςΛָʹ͍ͨ͠
  23. ΑΓগͳ͍DSL • attribute, one, many͘Β͍Ͱे෼͔ͳͱࢥ͍ͬͯΔ • jbuilderͷDSL͕͔ͳΓۤखͱ͍͏ݸਓతͳؾ࣋ͪ • has_manyΛΑ͘ݟ͔͚Δ͚ͲɺRuboCopʹޡղ͞ΕͨΓ͢Δ͋͠· Γ͍͍ΞΠσΞͰ͸ͳ͍Α͏ͳ…

  24. ΑΓগͳ͍ґଘؔ܎ • ҙݻ஍ʹͳͬͯActiveSupport΁ͷґଘΛ௥Ճ͍ͯ͠ͳ͍ • ͦͷ݁Ռͱͯ͠Inflection͕࢖͑ͳͯͭ͘Β͍ • ͦ΋ͦ΋ʮΦϒδΣΫτΛJSONʹม׵͢Δʯ͜ͱʹґଘؔ܎͕ͨ͘ ͞Μඞཁͬͯ͜ͱͳ͍ͷͰ͸ɺͱ͍͏ؾ࣋ͪ • ϝϯςָ͕

    • ґଘؔ܎͕ͳ͍gem΁ͷಌΕ
  25. ͕࣌ؒ͋Ε͹ιʔείʔυΛ͔ΜͨΜ ʹ͓ݟͤͰ͖Δ͔ͳ