20200427 Kotlin愛好会発表 『2週間前にリリースされたばかりのgRPC Kolinライブラリについて調べてみた』

20200427 Kotlin愛好会発表 『2週間前にリリースされたばかりのgRPC Kolinライブラリについて調べてみた』

20200427 Kotlin愛好会発表 『2週間前にリリースされたばかりのgRPC Kolinライブラリについて調べてみた』

Ee398a67f5017cc2ad5c02d67d10e516?s=128

doyaaaaaken

April 28, 2020
Tweet

Transcript

  1. 2िؒલʹϦϦʔε͞Εͨ͹͔Γͷ gRPCͷެࣜKotlinϥΠϒϥϦʹ͍ͭͯௐ΂ͯΈͨ KotlinѪ޷ձvol.21 (2020/04/27) @doyaaaaaken (Twitter/Github/Qiita) খࢁ ݈ଠ

  2. ࣗݾ঺հ • ۀ຿Ͱ΍ͬͯΔ͜ͱ • smartroundͱ͍͏SaaSελʔτΞοϓͰϦʔυΤϯδχΞͯ͠·͢ • αʔόαΠυʢKotlin JVMʣͷଞɺϑϩϯτʢVueʣɾΠϯϑϥʢAWSʣ΋৮ͬͯ·͢ • ࠷ۙFigma΍GoogleAnalytics΋ΨγΨγ৮ͬͯ·͢

    • OSSपΓͷ׆ಈ • Kotlin੡OSS΁ͷίϯτϦϏϡʔτ(ktor, Exposed, kotlintest, kohttp) • ktorͷυΩϡϝϯτ೔ຊޠ຋༁ϓϩδΣΫτͷ্ཱ͛ਓͰ͢ʢࢀՃऀৗ࣌ืूதʂʣ • kotlin-csvͱ͍͏ࣗ࡞OSS࡞ͬͯ·͢ʢStar਺80ͪΐ͍ɻPR΋͓଴ͪͯ͠·͢ʂʣ
  3. smartroundʹ͍ͭͯ • ελʔτΞοϓͷࢿۚௐୡલޙͷۀ຿Λ ޮ཰Խ͢ΔαʔϏε܈Λఏڙ͍ͯ͠·͢ • LPɿhttps://jp.smartround.com/ • ࢿۚௐୡϚχϡΞϧ΋ແྉެ։தͰ͢ • KotlinJVMΛ͸͡Ίͱͨ͠Ϟμϯͳ

    ٕज़ελοΫͰ͢ • ٕज़঺հࢿྉɿ https://gitpitch.com/smartround/ smartround-tech-presentation • ktor͸όʔδϣϯ1.0.0-betaͷ࣌୅͔Βಋೖ • KotlinJVMɺVueJsॻ͖͍ͨΤϯδχΞɺ ઈࢍେืूதͰ͢ʂʂ
  4. ࠓճͷൃදͷ͓୊ • gRPC͕ެࣜʹKotlinΛαϙʔτͨ݅͠ • 2िؒલͷ4/10ʹϦϦʔε͞ΕͨgRPCެࣜͷϥΠϒϥϦʢv0.1.1ʣʹ͍ͭͯ • GithubͷStar਺͕Θ͔ͣ2िͰ240௒͑ • ʰKotlin, meet

    gRPC: a new open-source project for modern appsʱ
  5. gRPCެࣜυΩϡϝϯτ΋౰વରԠ • 4/16͔ΒKotlinʹؔ͢ΔQuickStart͕௥Ճ͞Ε·ͨ͠ • https://grpc.io/docs/quickstart/kotlin/

  6. ͦ΋ͦ΋gRPCͱ͸ʁʢwikiతઆ໌ʣ • Google͕։ൃͨ͠OSSͷϦϞʔτϓϩγʔδϟίʔϧγεςϜ • RPCɿ͋ΔϓϩάϥϜ͔ΒผωοτϫʔΫʹ͋ΔϓϩάϥϜͷॲཧΛݺͼग़ͤΔ • Protocol Buffersͱ͍͏ݴޠͰΠϯλʔϑΣʔεΛఆٛ • ௨৴ʹ͸HTTP/2Λ༻͍Δ

    • ϝϦοτ • ݴޠඇґଘʢҟͳΔݴޠͷϚΠΫϩαʔϏεؒͷݺͼग़͠΍ɺϒϥ΢β㱺αʔό΁ͷݺͼग़͠ʹར༻Մೳʣ • ߴ଎ʢσʔλΛγϦΞϥΠζܰ͠ྔʹ͢Δ͜ͱͰ࣮ݱʣ • ΠϯλʔϑΣʔεͷมߋ͕༰қʹʢProtocol BuffersʹଇΔ͜ͱͰ࣮ݱʣ • ※ Mericari, AbemaTV, dowango౳Ͱ࠾༻͞Ε͍ͯΔ
  7. Kotlinʹ͓͚Δࠓ·ͰͷgPRCϥΠϒϥϦͷঢ়گ • awsome-grpcͳΔυΩϡϝϯτʹ4ͭ঺հ͞Ε͍ͯ·ͨ͠ • https://github.com/grpc-ecosystem/awesome-grpc#lang-kotlin • ※ grpc-kotlinͱ͍͏ಉ໊ͷผϥΠϒϥϦ΋͋ΔͷͰ஫ҙʂʂʢࠓճͷൃද͸grpc/grpc-kotlinʣ • ※

    Kotlin(JVM)͔ΒJavaͷϥΠϒϥϦ͕࢖͑Δ͜ͱ΋ߟ͑Δͱɺ ࠓ·Ͱ΋gRPCΛ࢖͑Δ͜ͱ͸࢖͑ͨΑ͏Ͱ͢
  8. ࠓճग़ͨϥΠϒϥϦΛ࢖͏ϝϦοτ • μϯτπͰͰ͔͍ϝϦοτ ʰgRPC͕ެࣜϥΠϒϥϦͱͯ͠αϙʔτ͍ͯ͠Δ͜ͱʱ • ͦΕҎ֎ͩͱGoogle Cloudͷϒϩά͸ҎԼͷΑ͏ͳϝϦοτΛ঺հ • Kotlin੡ϥΠϒϥϦͳͷͰcoroutine΍Flow APIΛ࢖͍ඇಉظϓϩάϥϜ͕͖Ε͍ʹॻ͚Δ

    • GCPͷCloud RunͰ΋ར༻Ͱ͖Δ
  9. ͔͜͜Β͸αϯϓϧίʔυΛ งғؾϨϕϧͰݟͯΈ·͢

  10. ࢀߟʹͨ͠υΩϡϝϯτ • gRPCެࣜυΩϡϝϯτͷҎԼ2ͭͷϖʔδ͕Θ͔Γ΍͍͢Ͱ͢ • QuickStart (https://grpc.io/docs/quickstart/kotlin/) • gRPC Basics -

    Kotlin/JVM (https://grpc.io/docs/tutorials/basic/kotlin/)
  11. ࠓճऔΓ্͛Δαϯϓϧίʔυͷશମਤ ΫϥΠΞϯταΠυ ϓϩάϥϜ (Kotlin) αʔόαΠυ ϓϩάϥϜ (Kotlin) gPPC઀ଓ༻ ϓϩάϥϜ gPPC઀ଓ༻

    ϓϩάϥϜ gRPCݺͼग़͠ ΫϥΠΞϯταΠυ αʔόαΠυ ΠϯλʔϑΣʔεఆٛ .protoϑΝΠϧ ʢProtocol Buffersʣ .protoϑΝΠϧ͔Βੜ੒ .protoϑΝΠϧ͔Βੜ੒
  12. 1. ΠϯλʔϑΣʔεఆٛʢ.protoʣϑΝΠϧʹ͍ͭͯ • ϝιουఆٛɺϦΫΤετɾϨεϙϯεܕఆٛͳͲ͕ Protocol BuffersʹΑΓهࡌ͞Ε͍ͯΔ

  13. 2. Protocol Buffers͔ΒϓϩάϥϜࣗಈੜ੒ʹ͍ͭͯ • Protocol BuffersίϯύΠϥprotocΛ༻͍.protoϑΝΠϧ͔ΒKotlinϓϩάϥϜ Λࣗಈੜ੒͢Δ ࣗಈੜ੒͞ΕͨίʔυͰ͢

  14. 3. αʔό͔ΒgRPCϓϩάϥϜΛར༻ • ࣗಈੜ੒͞ΕͨgPRCϓϩάϥϜΛ༻͍ͯ αʔόଆʹ͓͍ͯListen͢ΔgPRCΤϯυϙΠϯτΛఆ͓ٛͯ͘͠

  15. 4. ΫϥΠΞϯτ͔ΒgRPCϓϩάϥϜΛར༻ • ࣗಈੜ੒͞ΕͨgPRCϓϩάϥϜʹsuspend funϝιου͕͋ΔͷͰɺ ͦΕΛ࣮ߦ͢Δ͜ͱͰαʔό΁RPCͰ͖Δ

  16. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ by @doyaaaaaken