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

Micronautで入門!実践!サーバーサイドKotlin/sskm1_sample

FORTE
October 24, 2024
9

 Micronautで入門!実践!サーバーサイドKotlin/sskm1_sample

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

FORTE

October 24, 2024
Tweet

More Decks by FORTE

Transcript

  1. ͸͡Ίʹ ஶऀͷ FORTE(ϑΥϧς) Ͱ͢ɻαʔόʔαΠυ Kotlin ͷ৽ץΛॻ͘ͷ͸ 3 ʙ4 ೥ͿΓ͘Β͍ͷΑ͏Ͱ͢ɻϑϨʔϜϫʔΫͱͯ͠͸ͣͬͱ Spring

    Boot Ͱ ঺հ͖͓ͯͯ͠Γɺ࣍͸ Ktor ͔ɺSpring Boot Ͱผͷํ໘ʹ͍͔͘ͱ೰ΜͰ͍ Δ͏ͪʹ͍ͭͷ·ʹ͔ผͷϑϨʔϜϫʔΫ͕ొ৔͖͍ͯͯ͠·ͨ͠ɻͳ͔Ͱ΋ MicronautɺQuarkus ͕ؾʹͳ͓ͬͯΓɺKotlin Fest 2024 Ͱ Micronaut ʹΑ ΔαʔόʔαΠυ Kotlin ͷ࿩Λฉ͍ͨͷͰधཁ͕͋Δͷ͔ͳͱࢥ͍ Micronaut ʹͨ࣍͠ୈͰ͢ɻ ͳ͓ɺ࠷ۙۀ຿ҕୗͰαʔόʔαΠυ Kotlin Λۀ຿ͱͯ͠ॻ͖࢝ΊͨͷͰ͢ ͕ɺͦͷݱ৔Ͱ͸͍ΘΏΔϑϧελοΫͩͬͨΓߴػೳͳϑϨʔϜϫʔΫ͸࢖༻ ͓ͯ͠ΒͣɺඞཁͳػೳʹԠͯ͡ϥΠϒϥϦΛ௥Ճ͢ΔܗΛͱ͍ͬͯ·͢ɻͦ͏ ݴͬͨҙຯͰϑϨʔϜϫʔΫͱ͍͏֓೦ʹͱΒΘΕΔͷͰ͸ແ͘ɺϥΠϒϥϦ୯ ҐͰ঺հ͍ͯ͘͠ͷ΋໘നͦ͏Ͱ͢Ͷɻ ͦΕ͸ͦΕͱͯ͠ɺࠓճ͸ Micronaut Λ࢖ͬͯαʔόʔαΠυ Kotlin ʹೖ໳ ͍͖ͯ͠·͢ɻ ຊஶͷ಺༰ ͜ͷຊ͸චऀ͕ Micronaut ͰαʔόʔαΠυ Kotlin Λࢼͯ͠ΈͨதͰٙ໰ʹ ࢥͬͨ͜ͱ΍ௐ΂ͨ͜ͱΛٕज़ॻͷܗͰΞ΢τϓοτͨ͠΋ͷͰ͢ɻMicronaut ͱ͸ͳΜͧ΍?ͱ͍͏ͱ͜Ζ͔Βɺ ࣮ࡍʹίʔυΛॻ͖αʔόʔαΠυͱͯ͠ API ͕ಈ͘ஈ֊·ͰΛ঺հ͍ͯ͠·͢ɻ ೖ໳ॻͳͷͰ Kotlin Λॻ͍ͨ͜ͱ͕ͳ͍ɺ؀ڥ͢Βͳ͍ͱ͍͏ํͰ΋େৎ෉Ͱ ͢ɻ؀ڥߏஙͱͯ͠ Micronaut ͸΋ͪΖΜɺΤσΟλʔ΍ JavaɺKotlin ͷΠϯ ετʔϧํ๏΋આ໌͍͖ͯ͠·͢ɻຊஶΛಡΊ͹จࣈ௨Γೖ໳͸ऴΘΓ·͢ɻͦ ͔͜ΒΦϦδφϧͰΞϓϦΛ࡞ͬͯΈΔͷ΋Α͠ɺଞͷϑϨʔϜϫʔΫʹೖ໳͠ ͯΈΔͷ΋Α͠ɺ΍ΕΔࣄ͸ແݶେͰ͢ɻ ͳ͓ɺೖ໳޲͚ͱ͍͏ࣄͰຊ֨తʹۀ຿Ͱ Micronaut Λ࢖༻͍ͯ͠Δਓʹͱͬ ͯ͸෺଍Γͳ͍͔΋͠Ε·ͤΜɻͦ͏ݴͬͨํ͸ͥͻࣗ͝਎ͰΞ΢τϓοτ͞Ε ͯΈͯ͸͍͔͕Ͱ͠ΐ͏͔ɻೖ໳͗͢Δͱࢥ͏ͷͰ͋Ε͹ಡΈ͔ͨͬͨͷʹॻ͔ Ε͍ͯͳ͍߲໨͕۩ମతʹΠϝʔδͰ͖͍ͯΔ͸ͣͰ͢ɻ࢒೦ͳ͕Βචऀ͸ͦ͜ ·Ͱߦ͖ண͚͍ͯͳ͍ͷͰɺͥͻޙֶͷͨΊʹ΋ಡΜͰΈ͍ͨͰ͢ɻͥͻصͷ͜ ͪΒଆ΁ɺαʔΫϧࢀՃͯ͠Έ·ͤΜ͔? 2
  2. ͲΜͳਓ޲͚͔ ຊஶ͸ Micronaut ΍ Kotlin ʹڵຯ͕͋ΔɺKotlin Ͳ͜Ζ͔ϓϩάϥϜະܦݧ ͚ͩͲԿ͔΍ͬͯΈ͍ͨɺόοΫΤϯυʹೖ໳ͯ͠Έ͍ͨͳͲओʹೖ໳ॻͱͯ͠ ॳ৺ऀ޲͚ʹॻ͔Ε͍ͯ·͢ɻ΋ͪΖΜɺ͢Ͱʹ Spring

    Boot ΍ Ktor ͳͲଞͷ ϑϨʔϜϫʔΫΛ৮ͬͨ͜ͱ͕͋ΓผͷϑϨʔϜϫʔΫΛ৮ͬͯΈ͍ͨͱ͍͏ํ ʹ΋͓קΊͰ͢ɻ ຊஶͰ͸঺հͨ͠खॱͷ௨Γʹ͢Ε͹ɺίʔυ΋ίϐϖ͢Ε͹ಈ͘Α͏ʹͳͬ ͍ͯ·͢ͷͰɺͱΓ͋͑ͣಈ͔͍ͨ͠ͱ͍͏ํʹ΋҆৺Ͱ͢ɻ·ͨɺOS ͱͯ͠ ͸ WindowsɺMac ྆ରԠͰ͋ΓɺΤσΟλ΋ Intellij IDEAɺVS Code ͷ྆ํ ʹରԠ͍ͯ͠·͢ɻ͓ख࣋ͪͷ؀ڥɺ͓޷͖ͳΤσΟλͰ͓ࢼ͍ͩ͘͠͞ɻ ͜ͷຊͰಘΒΕΔ͜ͱ ຊஶΛಡΈऴΘΔͱ࣍ͷΑ͏ͳঢ়ଶʹͳΓ·͢ɻ • Micronaut ͕ͳΜͳͷ͔෼͔Δ • Windows ·ͨ͸ Mac Ͱ Micronaut ͷ؀ڥߏங͕Ͱ͖Δ • ࣮ࡍʹίʔυΛॻ͖ϩʔΧϧͰαʔόʔαΠυ Kotlin ʹΑΔ API αʔ όʔΛߏஙͰ͖Δ • API Λ࣮૷Ͱ͖Δ ͋ͳͨͷ Kotlin Ͱ Web ΞϓϦέʔγϣϯͷόοΫΤϯυΛ࡞Γ͍ͨɺ৽͍͠ ϑϨʔϜϫʔΫʹ৮ͬͯΈ͍ͨͱ͍͏ࢥ͍ʹԠ͑ΒΕͨͷͳΒɺ͜Μͳʹخ͍͠ ͜ͱ͸͋Γ·ͤΜɻ ͜ͷຊͰ͸ղઆ͠ͳ͍͜ͱ ຊஶͰ͸ Micronaut ͷղઆΛ͍ͯ͠·͕͢ɺ͋͘·Ͱ࢖͍ํͷΈͰ͋Γৄࡉͳ ࢓૊Έ΍ιʔείʔυͷத਎ʹ͍ͭͯ͸ղઆ͍ͯ͠·ͤΜɻ ·ͨɺKotlin ͱ͍͏ϓϥάϥϛϯάݴޠͦͷ΋ͷʹ͍ͭͯ΋ৄࡉ͸આ໌͓ͯ͠ Γ·ͤΜɻಉ༷ʹ Web ΞϓϦέʔγϣϯʹ͍ͭͯ΋ৄࡉͳղઆ͸͍ͯ͠·ͤΜ ͷͰɺͦͷ͋ͨΓͷ Web γεςϜ։ൃͷجૅʹؔ͢Δ࢓૊Έ΍ղઆ͸·ͨผͷ ػձͱͳΓ·͢ɻͦͷଞɺGradle ʹ͍ͭͯ΋࢖༻͍ͯ͠·͕͢ղઆ͸͓ͯ͠Γ· ͤΜɻ ͜ͷຊͷ࢖͍ํ ຊॻ͸͜ͷຊͷͱ͓Γʹ΍Ε͹ Micronaut Λ࢖༻ͨ͠αʔόʔαΠυ Kotlin Ͱ API ͕ಈ͘ͱ͍͏ͱ͜ΖΛ໨ࢦͯ͠ॻ͔Ε͍ͯ·͢ɻ͜ͷຊΛಡΊ͹ཧ۶΍ 3
  3. ໨࣍ ͸͡Ίʹ 2 ຊஶͷ಺༰ . . . . . .

    . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 ͲΜͳਓ޲͚͔ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 ͜ͷຊͰಘΒΕΔ͜ͱ . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 ͜ͷຊͰ͸ղઆ͠ͳ͍͜ͱ . . . . . . . . . . . . . . . . . . . . . . . . 3 ͜ͷຊͷ࢖͍ํ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 ໔੹ࣄ߲ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 ୈ 1 ষ Micronaut ͱ͸? 7 1.1 Micronaut ͷར༻࣮੷ . . . . . . . . . . . . . . . . . . . . . . 8 1.2 ຊஶͰ঺հ͍ͯ͠Δαϯϓϧίʔυʹ͍ͭͯ . . . . . . . . . . . 8 ୈ 2 ষ ؀ڥߏங 9 2.1 Java ͷΠϯετʔϧ . . . . . . . . . . . . . . . . . . . . . . . 10 Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2 ΤσΟλͷ४උ . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3 Kotlin ͷΠϯετʔϧ . . . . . . . . . . . . . . . . . . . . . . 13 Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.4 Micronaut ͷΠϯετʔϧ . . . . . . . . . . . . . . . . . . . . 14 Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 ୈ 3 ষ Micronaut Ͱೖ໳!αʔόʔαΠυ Kotlin 16 3.1 ΞϓϦͷ࡞੒ . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 8080 ϙʔτ͸ҙ֎ͱ࢖ΘΕ͍ͯΔ . . . . . . . . . . . . . . . . 18 3.2 API ΤϯυϙΠϯτΛ࣮૷͢Δ . . . . . . . . . . . . . . . . . . 18 ୈ 4 ষ ࣮ફͦͷ 1 GET Ҏ֎ͷ HTTP ϝιουΛ࣮૷ͯ͠ΈΔ 20 5
  4. 4.1 GET . . . . . . . .

    . . . . . . . . . . . . . . . . . . . . . . . 20 4.2 PUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.3 POST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.4 DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 ୈ 5 ষ ࣮ફͦͷ 2 ύϥϝʔλΛૹΔ 24 5.1 ΫΤϦύϥϝʔλͷૹ৴ͱ֬ೝ . . . . . . . . . . . . . . . . . . 24 ෳ਺ͷΫΤϦύϥϝʔλ . . . . . . . . . . . . . . . . . . . . . 25 5.2 ϦΫΤετϘσΟͷૹ৴ . . . . . . . . . . . . . . . . . . . . . 25 ୈ 6 ষ ࣮ફͦͷ 3 H2 Ͱσʔλϕʔεૢ࡞Λ࣮૷ͯ͠ΈΔ 27 6.1 H2 ͱ͸ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 6.2 H2 ͷ͓ࢼ͠ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 6.3 ೚ҙͷύϥϝʔλΛొ࿥͢Δ . . . . . . . . . . . . . . . . . . . 30 6.4 ߋ৽ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6.5 ࡟আ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 ୈ 7 ষ ࣮ફͦͷ 4 ୯ମςετ 33 7.1 API ͷ୯ମςετ . . . . . . . . . . . . . . . . . . . . . . . . . 33 ϦΫΤετύϥϝʔλ͋Γͷςετ . . . . . . . . . . . . . . . . 36 ୈ 8 ষ ࣮ફͦͷ 5 Micronaut ͷґଘੑ஫ೖʹ͍ͭͯ 38 8.1 Ͳͷґଘੑ஫ೖํ๏͕ྑ͍ͷ͔? . . . . . . . . . . . . . . . . . 39 8.2 ίϯετϥΫλΠϯδΣΫγϣϯʹॻ͖׵͑Δ . . . . . . . . . . 39 ୈ 9 ষ ࣮ફͦͷ 6 ୯ମςετͷվળ 41 9.1 ςετ༻ࣄલσʔλͷ४උ . . . . . . . . . . . . . . . . . . . . 41 9.2 ୯ମςετͷ௥Ճ . . . . . . . . . . . . . . . . . . . . . . . . . 42 ෇࿥ A ͜Ε͔Βͷ Micronaut ࣮ફʹ͍ͭͯ 44 ͋ͱ͕͖ 45 ిࢠ൛ʹ͍ͭͯ 46 ஶऀ঺հ 47 จষ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Πϥετ୲౰ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6