Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MicronautでgRPCに入門!実践!サーバーサイドKotlin/sskm2_sample

 MicronautでgRPCに入門!実践!サーバーサイドKotlin/sskm2_sample

技術書典 18の新刊「MicronautでgRPCに入門!実践!サーバーサイドKotlin」のサンプルです
お求めは技術書典か、BOOTHまで!

Avatar for FORTE

FORTE

May 11, 2025
Tweet

More Decks by FORTE

Other Decks in Programming

Transcript

  1. ͸͡Ίʹ ஶऀͷ FORTE(ϑΥϧς) Ͱ͢ɻMicronaut ͰαʔόʔαΠυ Kotlinɺ2 ࡭໨Ͱ ͢ɻࠓճ͸ Micronaut Λ࢖ͬͯ

    gRPC ʹೖ໳࣮͠ફ͍ͯ͘͠಺༰ʹͳΓ·͢ɻ͍· ·Ͱ͸ͣͬͱ REST API ϕʔεͰ঺հ͖ͯ͠·ͨ͠ɻ࠷ۙ͸ gRPC Ͱ API Λॻ͍ ͍ͯΔͷͰɺ͍͜͜ΒͰͪΌΜͱ gRPC ʹೖ໳͓͖͍ͯͨ͠ͳͱࢥͬͨͷ͕͖͔ͬ ͚Ͱ͢ɻ ຊஶͷ಺༰ ͜ͷຊ͸චऀ͕ Micronaut ͰαʔόʔαΠυ Kotlin Λࢼͯ͠ΈͨதͰٙ໰ʹࢥͬ ͨ͜ͱ΍ௐ΂ͨ͜ͱΛٕज़ॻͷܗͰΞ΢τϓοτͨ͠ 2 ࡭໨ͱͳΓ·͢ɻͦͷͨΊɺ Micronaut ͱ͸ʁ ͷΑ͏ͳೖ໳తͳ಺༰͸લஶʮMicronaut Ͱೖ໳!࣮ફ!αʔόʔ αΠυ KotlinʯΛ͝ཡ͍ͩ͘͞ɻ ਤ 1: Micronaut Ͱೖ໳!࣮ફ!αʔόʔαΠυ Kotlin 2
  2. 2 ࡭໨ͱͳΔຊஶͰ͸ɺMicronaut Ͱ gRPC ʹ͍ͭͯೖ໳࣮͠ફͯ͠ΈΔ಺༰ͱ ͳΓ·͢ɻ͜ͷຊΛಡΉ͜ͱͰ࣍ͷ߲໨͕ಘΒΕ·͢ɻ • gRPC ʹ͍ͭͯ֓ཁ͕આ໌Ͱ͖Δ •

    αʔόʔαΠυ Kotlin Ͱಈ͘ gRPC ίʔυ͕࣮૷Ͱ͖Δ • I/F ఆٛͱͳΔ proto ϑΝΠϧΛ࣮૷Ͱ͖Δ ͲΜͳਓ޲͚͔ ຊஶ͸ Micronaut ΍ Kotlin ʹڵຯ͕͋ΔɺKotlin Ͳ͜Ζ͔ϓϩάϥϜະܦݧͩ ͚ͲԿ͔΍ͬͯΈ͍ͨɺόοΫΤϯυʹೖ໳ͯ͠Έ͍ͨͳͲओʹೖ໳ॻͱͯ͠ॳ৺ऀ ޲͚ʹॻ͔Ε͍ͯ·͢ɻ΋ͪΖΜɺ͢Ͱʹ Spring Boot ΍ Ktor ͳͲଞͷϑϨʔϜ ϫʔΫΛ৮ͬͨ͜ͱ͕͋ΓผͷϑϨʔϜϫʔΫΛ৮ͬͯΈ͍ͨͱ͍͏ํʹ΋͓קΊ Ͱ͢ɻ ຊஶͰ͸঺հͨ͠खॱͷ௨Γʹ͢Ε͹ɺίʔυ΋ίϐϖ͢Ε͹ಈ͘Α͏ʹͳͬ ͍ͯ·͢ͷͰɺͱΓ͋͑ͣಈ͔͍ͨ͠ͱ͍͏ํʹ΋҆৺Ͱ͢ɻ·ͨɺOS ͱͯ͠͸ WindowsɺMac ྆ରԠͰ͋ΓɺΤσΟλ΋ IntelliJ IDEAɺVS Code ͷ྆ํʹରԠ ͍ͯ͠·͢ɻ͓ख࣋ͪͷ؀ڥɺ͓޷͖ͳΤσΟλͰ͓ࢼ͍ͩ͘͠͞ɻ ͜ͷຊͰಘΒΕΔ͜ͱ ຊஶΛಡΈऴΘΔͱ࣍ͷΑ͏ͳঢ়ଶʹͳΓ·͢ɻ • gRPC ʹ͍ͭͯઆ໌Ͱ͖ΔΑ͏ʹͳΔ • gRPC Ͱ API Λ࣮૷Ͱ͖Δ ͋ͳͨͷ Kotlin Ͱ Web ΞϓϦέʔγϣϯͷόοΫΤϯυΛ࡞Γ͍ͨɺ৽͍͠ϑ ϨʔϜϫʔΫʹ৮ͬͯΈ͍ͨͱ͍͏ࢥ͍ʹԠ͑ΒΕͨͷͳΒɺ͜Μͳʹخ͍͜͠ͱ͸ ͋Γ·ͤΜɻ ͜ͷຊͰ͸ղઆ͠ͳ͍͜ͱ ຊஶͰ͸ Micronaut Λ࢖༻͍ͯ͠·͕͢ɺ͋͘·Ͱ࢖͍ํͷΈͰ͋Γৄࡉͳ࢓૊ Έ΍ιʔείʔυͷத਎ʹ͍ͭͯ͸ղઆ͍ͯ͠·ͤΜɻ ·ͨɺKotlin ͱ͍͏ϓϩάϥϛϯάݴޠͦͷ΋ͷʹ͍ͭͯ΋ৄࡉ͸આ໌͓ͯ͠Γ ·ͤΜɻಉ༷ʹ Web ΞϓϦέʔγϣϯʹ͍ͭͯ΋ৄࡉͳղઆ͸͍ͯ͠·ͤΜͷͰɺ ͦͷ͋ͨΓͷ Web γεςϜ։ൃͷجૅʹؔ͢Δ࢓૊Έ΍ղઆ͸·ͨผͷػձͱͳΓ ·͢ɻͦͷଞɺGradle ʹ͍ͭͯ΋࢖༻͍ͯ͠·͕͢ղઆ͸͓ͯ͠Γ·ͤΜɻ΋͜͠ 3
  3. ͷ͋ͨΓʹ͍ͭͯڵຯ͕͋Ε͹ɺݹ͍ຊʹͳΓ·͕͢੿ஶʮೖ໳!࣮ફ!αʔόʔαΠ υ KotlinʯΛ͝ཡ͍ͩ͘͞·ͤɻ ਤ 2: ೖ໳!࣮ફ!αʔόʔαΠυ Kotlin ͜ͷຊͷ࢖͍ํ ຊॻ͸͜ͷຊͷͱ͓Γʹ΍Ε͹ Micronaut

    Λ࢖༻ͨ͠αʔόʔαΠυ Kotlin Ͱ gRPC ʹΑΔ API ͕ಈ͘ͱ͍͏ͱ͜ΖΛ໨ࢦͯ͠ॻ͔Ε͍ͯ·͢ɻ͜ͷຊΛಡΊ͹ ཧ۶΍࢓૊Έ͕͢΂ͯཧղͰ͖ΔΑ͏ʹ͸ॻ͔Ε͍ͯ·ͤΜɻ͜ͷຊΛೖΓޱͱͯ͠ ͞ΒʹͦͷԞʹ͋Δ͜ͱʹڵຯΛ͍͚࣋ͬͯͨͩͨΒ޾͍Ͱ͢ɻ جຊతʹ಄͔ΒಡΈਐΊ͍͚ͯ͹͍͍Ͱ͕͢ɺ͍͖ͳΓίʔυΛݟ͍ͨͱ͍͏ํ͸ ࠷ॳͷํ͸ඈ͹͍͍ͯͨͩͯ͠΋େৎ෉Ͱ͢ɻ ಡΈऴΘͬͨײ૝΍ؒҧ͍ͷࢦఠɺ௥Ճཁ๬ͳͲ͸࣍ͷϋογϡλάΛ༻͍ͯ Twitter Ͱᄁ͍͍͚ͯͨͩΔͱخ͍͠Ͱ͢ɻͥͻɺײ૝Λ͓଴͓ͪͯ͠Γ·͢ɻ #sskm2 ໔੹ࣄ߲ ຊॻʹهࡌ͢Δ಺༰͸චऀͷॴଐ͢Δ૊৫ͷެࣜݟղͰ͸͋Γ·ͤΜɻ ·ͨɺຊॻ͸ՄೳͳݶΓਖ਼֬Λظ͢Α͏ʹ౒Ί͍ͯ·͕͢ɺචऀ͕ͦͷ಺༰Λอূ ͢Δ΋ͷͰ͸͋Γ·ͤΜɻͦͷͨΊɺຊॻͷهࡌ಺༰ʹج͍ͮͨಡऀͷߦҝɺٴͼಡ ऀ͕ඃͬͨଛ֐ʹ͍ͭͯචऀ͸ͳΜΒ੹೚Λෛ͏΋ͷͰ͸͋Γ·ͤΜɻ 4
  4. ໨࣍ ͸͡Ίʹ 2 ຊஶͷ಺༰ . . . . . .

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 ͲΜͳਓ޲͚͔ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 ͜ͷຊͰಘΒΕΔ͜ͱ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 ͜ͷຊͰ͸ղઆ͠ͳ͍͜ͱ . . . . . . . . . . . . . . . . . . . . . . . . . 3 ͜ͷຊͷ࢖͍ํ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 ໔੹ࣄ߲ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 ୈ 1 ষ Micronaut ͱ gRPC 7 1.1 gRPC ͱ͸ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 RPC ͱ͸ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 ୈ 2 ষ Micronaut Ͱೖ໳ gRPC 11 2.1 ֬ೝ؀ڥ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2 όʔδϣϯΞοϓ . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Micronaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Kotlin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.3 gRPC Ͱ API Λಈ͔ͯ͠ΈΔ . . . . . . . . . . . . . . . . . . . 15 αʔόʔଆͷϓϩδΣΫτΛ࡞੒ . . . . . . . . . . . . . . . . . . 16 αʔόʔΛ࣮૷ . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 ΫϥΠΞϯτଆͷϓϩδΣΫτΛ࡞੒ . . . . . . . . . . . . . . . 24 ΫϥΠΞϯτΛ࣮૷ . . . . . . . . . . . . . . . . . . . . . . . . . 24 gRPC ΫϥΠΞϯτΛىಈ͠ API ͷૄ௨Λ֬ೝ . . . . . . . . . . 26 ୈ 3 ষ ίʔυղઆ 27 3.1 protobuf ϓϥάΠϯ . . . . . . . . . . . . . . . . . . . . . . . . 27 3.2 Gradle ͷґଘؔ܎ . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.3 ࣗಈੜ੒ؔ܎ͷઃఆ . . . . . . . . . . . . . . . . . . . . . . . . . 29 5
  5. ໨࣍ 3.4 proto ϑΝΠϧ . . . . . .

    . . . . . . . . . . . . . . . . . . . . . 29 3.5 αʔόʔଆͷιʔε . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.6 gRPC αʔόʔ . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.7 gRPC ΫϥΠΞϯτ . . . . . . . . . . . . . . . . . . . . . . . . 32 3.8 όʔδϣϯʹ͍ͭͯ . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.9 ࢀߟࢿྉ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 ෇࿥ A ࠓճ͸ղઆͰ͖ͳ͔ͬͨ಺༰ʹ͍ͭͯ 35 ͋ͱ͕͖ 36 ిࢠ൛ʹ͍ͭͯ 37 ஶऀ঺հ 38 จষ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 ॴଐαʔΫϧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Πϥετ୲౰ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 6