Slide 1

Slide 1 text

͓ຍʹϙʔλϧαΠτΛϦϦʔεͨ͠ 2016/08/17 @Speee LTେձ

Slide 2

Slide 2 text

ࣗݾ঺հ • @hatappi (yusaku.hatanaka) • ذෞग़਎ • ࠷ۙ͸Angular2Λॻ͍ͨΓRailsॻ͍ͨ Γͯ͠·͢

Slide 3

Slide 3 text

ੈͷதʹ͋Γ;ΕΔ֤ۀքͷϙʔλϧ αΠτ

Slide 4

Slide 4 text

ͳΜ͔୳͠ʹ͍͘ɾɾɾ

Slide 5

Slide 5 text

࡞Ζ͏ʂʂ

Slide 6

Slide 6 text

࡞ͬͨ!! • ׬੒ͨ͠΋ͷ͸༁͋ͬͯݟͤΒΕ·ͤΜ

Slide 7

Slide 7 text

·ͣ͸ڝ߹ͷ෼ੳ͔Β

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

ٕज़બఆɹ • Rails5 api mode • Angular2.rc4 • GCP

Slide 11

Slide 11 text

Rails5 api mode ݩʑ͸gemͩͬͨrails-api͕RailsʹϚʔδ͞Εͨ • helper΍assets, views͕ͬͦ͝Γফ͑ͯΔ • cookieͱ͔session storeͷఆٛ΋ͳ͚Ε͹assets΋ͳ͍

Slide 12

Slide 12 text

Angular2 Google੡ͷJSϑϨʔϜϫʔΫ ݩʑ͋ͬͨAngular1ͷޙܧ͕ͩޓ׵ੑ͸΄ͱΜͲͳ͍ͱͷ͜ͱ! ਖ਼ࣜϦϦʔε͸͞Ε͓ͯΒͣ࠷৽͸rc5 rc6͕ग़ΔΒ͍͕͠େ͖ͳΞοϓσʔτ͸rc5ͰऴΘΓΒ͍͠

Slide 13

Slide 13 text

GCP • railsͱangularʹؔͯ͠͸GCE(AWSͰ͍ ͏EC2) • ը૾ͷ഑৴ʹؔͯ͠͸GCS(AWSͰ͍͏ ͱ͜ͷS3)ʹ͓͖ɺͦͷ··CDNͱ͠ ͯ࢖͏ • GCE͸let's encryptͰূ໌ॻΛͱͬͯɺ http/2Ͱఏڙ

Slide 14

Slide 14 text

ࠓճ͸Railsͱ͍͏͔JSONΑΓͷ࿩

Slide 15

Slide 15 text

Έͳ͞Μ͸RailsͰJSONͷϨεϙϯε Λฦ͢͜ͱ͕͋Γ·͔͢ʁ

Slide 16

Slide 16 text

༻్͸༷ʑ • ΞϓϦͱ͔Ͱ࢖༻͢ΔAPIαʔόʔͷߏங࣌ • AJAXͰ௨৴Λ͢Δ࣌ • etc...

Slide 17

Slide 17 text

RFC4627,7159ʹJSONͷ࢓༷͕͔͔Ε ͍ͯΔ • arrayͷ։࢝ʹ͸ [ ɺऴྃʹ͸ ] • ஋ͷ۠੾Γʹ͸ , • string͸ " Ͱғ΋͏ • etc...

Slide 18

Slide 18 text

RFC4627,7159ʹJSONͷ࢓༷͕͔͔Ε ͍ͯΔ • arrayͷ։࢝ʹ͸ [ ɺऴྃʹ͸ ] • ஋ͷ۠੾Γʹ͸ , • string͸ " Ͱғ΋͏ • etc... ࢓༷कͬͯ͋Ε͹ޙ͸ࣗ༝

Slide 19

Slide 19 text

/users { "result":[ { "id":1, "name":"yusaku.hatanaka" }, { "id":2, "name":"hoge.taro" } ] }

Slide 20

Slide 20 text

/users { "response":{ "status":200, "users":[ { "id":1, "name":"yusaku.hatanaka" }, { "id":2, "name":"hoge.taro" } ] } }

Slide 21

Slide 21 text

ϑΥʔϚοτ͕ఆ·Βͳ͍!

Slide 22

Slide 22 text

ϑϩϯτܹ͓͜! • API͝ͱʹϨεϙϯεͷܗ͕ࣜҟͳΔͷͰɺͦΕͧΕͰύʔαʔ Λॻ͔ͳ͍ͱ͍͚ͳ͍

Slide 23

Slide 23 text

ੈͷதʹ͸JSONͷϑΥʔϚοτΛఆ Ίͨ΋ͷ͕͋Δ

Slide 24

Slide 24 text

HAL

Slide 25

Slide 25 text

{ "_links": { "self": { "href": "/comments/1" } }, "id": 1, "message": "LTେձʹࢀՃͯ͠·͢", "_embedded": { "user": { "_links": { "self": { "href": "/users/7" } }, "id": 7, "name": "yusaku.hatanaka" } } }

Slide 26

Slide 26 text

JSON:API

Slide 27

Slide 27 text

{ "data":{ "id":"1", "type":"users", "links":{ "self":"http://hoge.com/users/1" }, "attributes":{ "name":"yusaku.hatanaka" }, "relationships":{ "comments":{ "links":{ "self":"http://hoge.com/users/1/relationships/comments", "related":"http://hoge.com/users/1/comments" }, "data":{ "type":"comments", "id":"8" } } }, "included":[ { "id":"8", "type":"comments", "links":{ "self":"http://hoge.com/comments/8" }, "attributes":{ "context":"LTେձʹࢀՃͯ͠·͢" }, "relationships":{ } } ] } }

Slide 28

Slide 28 text

JSON:APIͱHAL • HAL • intergent draftʹೖ͍ͬͯΔ • AWSͷAPIGatewayͰ࢖༻͞Ε͍ͯΔ࣮੷ • JSON:API • error࣌ͷϨεϙϯεͳͲͷݴٴ΋͋Δ • ձࣾͷϓϩμΫτͰ࢖༻͞Ε͍ͯΔ࣮੷ • GET͚ͩͰͳ͘ɺPOST΍DELETEͳͲCRUD΁ͷݴٴ΋͋Δ

Slide 29

Slide 29 text

ͦΕͧΕͷϑΥʔϚοτͰϨεϙϯε Λฦ͠΍͘͢͢Δgem΋͋Δ • HAL => apotonick/roar • JSON:API => cerebris/jsonapi-resources

Slide 30

Slide 30 text

·ͱΊ • ෳ਺ਓͰ։ൃ͢Δࡍʹ͸JSONͷϑΥʔϚοτΛ͖Ί͓ͯ͘ͱɺ ϑϩϯτͱ஥ྑ͘ͳΕΔʢ͔΋͠Εͳ͍ʣ • νʔϜ಺ͰܾΊͯ΋ྑ͍͕ɺάμάμʹͳΒͳ͍Α͏ʹ

Slide 31

Slide 31 text

࠷ޙʹ

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

ΞΫηε͸·ͩ·ͩ

Slide 34

Slide 34 text

index͸1݅ɾɾɾɾ ͜͜͸·༷ͩࢠݟ ΋͔ͨ͠͠ΒSPAͰ࡞ͬͨ͜ͱʹΑΓbot͕͏·͘ճ༡ग़དྷͯͳ͍ ͔΋͠Εͳ͍

Slide 35

Slide 35 text

౰໘͸index਺Λ૿΍͍ͯ͘͠