Save 37% off PRO during our Black Friday Sale! »

Kotlin MPPと戯れるノクチル

7c3b3366947123ba6772698b09edf4e2?s=47 subroh_0508
December 05, 2020

Kotlin MPPと戯れるノクチル

アイマスハッカソン2020 オンライン!のLT資料です。

https://imas.connpass.com/event/194308/

7c3b3366947123ba6772698b09edf4e2?s=128

subroh_0508

December 05, 2020
Tweet

Transcript

  1. ,PUMJO.11ͱٔΕΔϊΫνϧ ΞΠϚεϋοΧιϯΦϯϥΠϯʂ ʹ͜͠Γ͞ͿΖʙ!TVCSPI@

  2. ,PUMJO.11ͱٔΕΔϊΫνϧ ΞΠϚεϋοΧιϯΦϯϥΠϯʂ ʹ͜͠Γ͞ͿΖʙ!TVCSPI@ ˞தͷਓʹΦϑΝʔΛग़͓ۚ͢ͱݖྗ͕ͳ͔ͬͨͨΊ ɹ$7ɾʹ͜͠Γ͞ͿΖʙͰ͓ૹΓ͠·͢

  3. 3 ……………… ✦ ✦

  4. 4 ……͋ʙͬʂɹখࢳͪΌΜɺ͍͍ͨͨʙʂ େมେมʙʙʙʂɹ՝୊ڭ͑ͯʙʙʙʂ ਽ࡊ ✦ ✦

  5. 5 খࢳ ✦ ✦ ……ͽΌ͊ʂʂʂɹͳɺͳΜͩɺ਽ࡊͪΌΜ͔……ɻ ͲɺͲ͏ͨ͠ͷʁɹύιίϯ࣋ͬͯΔͬͯ͜ͱ͸ɺ৘ใॲཧͷ՝୊ʁ

  6. 6 ͦ͏ͦ͏ɺ৘ใॲཧͷतۀɺͳΜ͔αϘΓ͗ͪ͢ΌͬͨΈ͍ͨͰʙɻ ΞϓϦ࡞Δ՝୊ɺ2ͭ΍Βͳ͍ͱ੺఺ʹͳͬͪΌ͏Μͩͬͯʙʙʙʂ ਽ࡊ ✦ ✦

  7. 7 ͑ͬ……͑͑ʙͬʂʂʂͦɺͦΕ͸େมʂʂʂ ୲౰ɺಉ͡ઌੜ͔ͩΒɺ࡞Βͳ͖Ό͍͚ͳ͍ͷ͸AndroidͱWebΞϓϦʁ খࢳ ✦ ✦

  8. 8 ͏ʙΜɺͦ͏ʂͦΕͰͶɺAndroidͷํ͸খࢳͪΌΜ͕ڭ͑ͯ͘Εͨɺ ͔Θ͍͍ʙὑݴޠͰॻ͍ͨΒɺྑ͍ײ͡ʙʙʙʹͰ͖ͨΜͩʙʂ ਽ࡊ ✦ ✦

  9. 9 ͔Θ͍͍ݴޠ……͜ɺKotlinͷ͜ͱʁɹ͢ɺ͍͢͝ɺ΋͏ͦΜͳʹॻ͚ΔΑ͏ʹͳͬͨͷʁ খࢳ ✦ ✦

  10. 10 ͚ͩͲͶʙɺWebͷํ͕શવ෼͔Βͳ͍ʂɹ͔ͩΒখࢳͪΌΜɺڭ͑ͯʙʙʙɻ ਽ࡊ ✦ ✦

  11. 11 ͏ɺ͏Μɺྑ͍͚Ͳ……ɻ਽ࡊͪΌΜɺͲ͕͜෼͔Βͳ͍ͷʁ Webͩͱɺ͡ΌɺJavascript͔ͳʁɹจ๏͕ɺ෼͔Βͳ͍ͱ͔ʁ খࢳ ✦ ✦

  12. 12 ͡Ό͹……͘͢Γ΀ͱʙʁɹ͑ʙʙʙɺ΋͔ͯ͠͠ɺ·ͨ৽͍͠ݴޠ֮͑ͳ͖Όͳͷʙʙʙʁ ΊΜͲ͘͞ʙ͍ʂɹ਽ࡊɺͥʙΜͿKotlinͰॻ͖ͨʙ͍ʂ ਽ࡊ ✦ ✦

  13. 13 ͦɺͦΜͳΘ͕··……ɻͩɺୈҰɺ਽ࡊͪΌΜ͕ͪΌΜͱतۀग़ͯΕ͹……ɻ খࢳ ✦ ✦

  14. 14 ͓ʔ͍ɺখࢳͪΌʔΜɻ ಁ ✦ ✦

  15. 15 ……ͽ͐͑͑͑ʂʂʂɹ……΋ɺ΋͏ʂɹಁͪΌΜʂɹ͓ɺ͓Ͳ͔͞ͳ͍ͰΑ……ʂ খࢳ ✦ ✦

  16. 16 ͝ΊΜ͝ΊΜɻͶɺͦΕΑΓ͞ɺ՝୊ɺॿ͚ͯɻ ಁ ✦ ✦

  17. 17 ……͑ɺ͑͑ʂʁɹͱɺಁͪΌΜ΋…ʁ খࢳ ✦ ✦

  18. 18 ͏Μɻͪΐͬͱɺςετɺ΍͹͔ͬͨɻ ิशͷ՝୊ͰɺWebͱεϚϗͷΞϓϦ࡞ΕͬͯݴΘΕͪΌͬͯ͞ɻ ಁ ✦ ✦

  19. 19 ՝୊ͷఏग़ظݶɺ໌೔͔ͩΒɻ͜Ε͸ؒʹ߹Θͳ͍ɺͬͯࢥͬͯɻ ͔ͩΒɺ͑ʔͬͱ……ɺͳΜͱ͔ͳΜͱ͔……Έ͍ͨͳͷͰόʔͬͱ΍Γ͍ͨɻ ಁ ✦ ✦

  20. 20 ͳɺͳΜͱ͔ͳΜͱ͔……͑ʔͬͱɺ͘ɺΫϩεϓϥοτϑΥʔϜɺͷ͜ͱ͔ͳ……ʁ খࢳ ✦ ✦

  21. 21 ͦ͏ɺͦΕͦΕɻ1ճॻ͍ͨΒɺWeb΋εϚϗ΋ζόʔϯͬͯͰ͖ͪΌ͏΍ͭɻ ಁ ✦ ✦

  22. 22 ͑ʙͳʹͦΕʙʙʙʂɹ͢͝ʙʙʙ͍ʂɹ͋͠Θͤʙὑͦ͏ʂ খࢳͪΌΜɺ਽ࡊ΋ΫϩεϓϥοτϑΥʔϜͱKotlinͰɺͣ͹ʙΜͱΞϓϦ࡞Γͨʙ͍ʂ ਽ࡊ ✦ ✦

  23. 23 ͽɺͽ͑……ɻͨɺ͔֬ʹɺ2ਓͱ΋࢒͞Εͨ࣌ؒ͸গ͚ͩ͠ɺͳΜͩΑͶ……ʁ ͦΕͳΒKotlin MultiplatformΛ࢖͑͹ɺͰɺͰ͖Δ͔΋…ʂ খࢳ ✦ ✦

  24. 24 ͑ʙʙʙɺͦΕͬͯKotlinͰॻ͚Δͷʙʙʙʂʁ ΍͸ʙʙʙʂɹ਽ࡊɺָ͘͠ͳ͖ͬͯͨʙʙʙʂ ਽ࡊ ✦ ✦

  25. 25 ΘɺΘͨ͠΋ͪΐͬͱ͔͠৮ͬͯͳ͍͔Βৄ͘͠͸෼͔Βͳ͍͚Ͳɺ ͰɺͰ΋3ਓ͍Ε͹ɺ͖ͬͱͰ͖ΔΑͶ……ʂ খࢳ ✦ ✦

  26. 26 ;;ɺͦ͏ͩͶɻ͜ͷ3ਓͳΒɺ՝୊ͳΜͯ͋ͬͱ͍͏ؒͰ͠ΐɻ ͦΕ͡Όɺ΍ͬͪΌ͓͏͔ɺ͍͍͓͑͑ʔɻ ಁ ✦ ✦

  27. 27 ͓ɺ͓ʔʂ ͓ʙʙʙʂ খࢳɾ਽ࡊ ✦ ✦

  28. 28 ✦ ✦

  29. 29 ;;ɺKotlin MultiplatformɺͳΜ΋Θ͔ΒΜɻ ಁ ✦ ✦

  30. 30 …… ԁ߳ ✦ ✦

  31. 31 ……Ͳ͏ͨ͠ͷɺ3ਓͱ΋ɻ ԁ߳ ✦ ✦

  32. 32 ……͋ɺ·ɺԁ߳ͪΌΜʂ ࠓɺKotlin MultiplatformͰ৘ใॲཧͷ՝୊΍ͬͯΔΜ͚ͩͲɺશવਐ·ͳͬͯ͘………ɻ খࢳ ✦ ✦

  33. 33 Kotlin Multiplatformʁɹ΢νͷ৘ใॲཧͰͦΜͳʹ೉͍͠՝୊ɺग़ΔΘ͚ͳ͍Ͱ͠ΐɻ ԁ߳ ✦ ✦

  34. 34 ͋ɺ͏͏Μɺ՝୊ͦͷ΋ͷ͸ɺΞϓϦ͕࡞ΕΕ͹OKͳΜͩɻ ͰɺͰ΋ɺಁͪΌΜͱ਽ࡊͪΌΜ͕……ɺͦͷɺޙ͕ͳ͍ঢ়گΒͯ͘͠……ɻ খࢳ ✦ ✦

  35. 35 Ṥޱʔɺ͚ͨͯ͢ʔɻ ಁ ✦ ✦

  36. 36 ……͸͊ɻ࢓ํͳ͍ΘͶɻ Kotlin MultiplatformͳΒɺଟগΘ͔Δɻૡ͍ఠΜͰઆ໌͢Δ͔ΒɺͦΕͰ͍͍ʁ ԁ߳ ✦ ✦ ❓

  37. 37 ͍ɺ͍͍ͷɺԁ߳ͪΌΜʂ খࢳ ✦ ✦

  38. 38 ؾʹ͠ͳ͍ͰɻόΠτ୅͸ɺͦ͜ʹస͕ͬͯΔઙ૔͔ΒΉ͠ΓऔΔ͔Βɻ ԁ߳ ✦ ✦

  39. 39 Kotlin Multiplatform͸ɺKotlin੡ͷX-PlatϑϨʔϜϫʔΫͷ͜ͱΛࢦ͢ͷɻ RN΍Xamarinͱେ͖͘ҟͳΔͷ͸ɺʮϩδοΫͷڞ௨ԽʯʹϑΥʔΧε͍ͯ͠Δͱ͜ΖͶɻ ͦͯ͠࠷ऴతͳ੒Ռ෺͸ɺJVM / Native / JSͷ؀ڥຖʹҟͳΔܗࣜͰग़ྗ͞ΕΔɺ͍͍ʁ ԁ߳

    ✦ ✦ ,PUMJO.VMUJQMBUGPSN .11   ,PUMJO੡ͷ91MBUϑϨʔϜϫʔΫ  ʮϩδοΫͷڞ௨Խʯ΁ͷϑΥʔΧε͕ಛ௃  +7./BUJWF+4ίʔυͷग़ྗ͕Մೳ 3FGFSFODFLPUMJOMBOHPSHEPDTSFGFSFODFNVMUJQMBUGPSNIUNM +7.ग़ྗ +4ग़ྗ /BUJWFग़ྗ
  40. 40 ͸͍͸ʙ͍ʂɹ͡Ό͊͡Ό͊ʙɺݴޠʹґଘ͠ͳ͍ڞ௨ͷϩδοΫΛʮCommon Kotlinʯͷ ͱ͜Ζʹ͏·ʙ͘·ͱΊͯॻ͚Ε͹ʙɺࠓ·Ͱ3ճಉ͜͡ͱΛॻ͍ͯͨͷ͕ͨͬͨ1ճʹऩ·ͬͯ ͋͠ΘͤʙὑʹͳΔͬͯ͜ͱʙʙʙʁ ਽ࡊ ✦ ✦ ,PUMJO.VMUJQMBUGPSN .11

      ,PUMJO੡ͷ91MBUϑϨʔϜϫʔΫ  ʮϩδοΫͷڞ௨Խʯ΁ͷϑΥʔΧε͕ಛ௃  +7./BUJWF+4ίʔυͷग़ྗ͕Մೳ 3FGFSFODFLPUMJOMBOHPSHEPDTSFGFSFODFNVMUJQMBUGPSNIUNM +7.ग़ྗ +4ग़ྗ /BUJWFग़ྗ
  41. 41 ͦΜͳͱ͜ΖɻҿΈࠐΈ͕ૣ͍ΘͶɺ਽ࡊɻ ͜ͷʮڞ௨෦෼ʯΛͰ͖Δ͚ͩCommon Kotlinʹ·ͱΊɺʮϓϥοτϑΥʔϜຖʹҧ͏෦෼ʯΛ Ͱ͖ΔݶΓγϯϓϧʹ࣮૷͢Δɻ͜Ε͕Kotlin MPPͷجຊతͳ࣮૷ํ਑ʹͳΔͷɻ ԁ߳ ✦ ✦ ,PUMJO.VMUJQMBUGPSN

    .11   ,PUMJO੡ͷ91MBUϑϨʔϜϫʔΫ  ʮϩδοΫͷڞ௨Խʯ΁ͷϑΥʔΧε͕ಛ௃  +7./BUJWF+4ίʔυͷग़ྗ͕Մೳ 3FGFSFODFLPUMJOMBOHPSHEPDTSFGFSFODFNVMUJQMBUGPSNIUNM +7.ग़ྗ +4ग़ྗ /BUJWFग़ྗ
  42. 42 ࣮ࡍͷKotlin MPPϓϩδΣΫτͷσΟϨΫτϦߏ੒͸͜Μͳײ͡ɻUIͷߏங͸ɺ ֤ܿ͘ϓϥοτϑΥʔϜຖͷ࣮૷ʹ೚ͤΔͷ͕Kotlin MPPɻ͔ͩΒandroid / ios / jsϞδϡʔϧΛ ༻ҙͯ͠ɺUIʹؔ܎͢ΔϓϥοτϑΥʔϜݻ༗ͷίʔυΛ·ͱΊΔඞཁ͕͋Δͷɻ

    ԁ߳ ✦ ✦ σΟϨΫτϦߏ੒ ᶃBOESPJE ᶄJPT ᶅKT ᶃ ᶄ ᶅ ˞ԼઢͷϑΝΠϧ͕ ϓϥοτϑΥʔϜຖͷϝΠϯը໘
  43. 43 ϓϥοτϑΥʔϜʹґଘͤͣɺڞ௨ԽͰ͖ΔίʔυΛஔ͘ͷ͸͜ͷϞδϡʔϧɻ Ϟδϡʔϧ໊͸ʮsharedʯ΍ʮcommonsʯͱͯ͠؅ཧ͢Δ͜ͱ͕ଟ͍ΘͶɻ σʔλΫϥεͷએݴ΍ۀ຿ϩδοΫɺAPIαʔόʔ΁ͷϦΫΤετ΋·ͱΊΔ͜ͱ͕Ͱ͖ΔΘɻ ԁ߳ ✦ ✦ σΟϨΫτϦߏ੒ ˞TIBSFEʹͨ͘͞Μ ·ͱΊͨϓϩδΣΫτྫ

    BQJ"1*$MJFOUΛఆٛ EC୺຤಺%#PS-PDBM$BDIFͷ$MJFOUΛఆٛ RVFSZ41"32-ΫΤϦͷఆٛ SFQPTJUPSZϞσϧຖʹ$36%ϝιουΛఆٛ NPEFMσʔλΫϥεͷએݴ QSFTFOUBUJPO6*ϩδοΫͷ࣮૷ VUJMJUJFTศརؔ਺܈
  44. 44 ͰɺsharedϞδϡʔϧҎԼͷߏ੒͸͜͏ɻ ԁ߳ ✦ ✦

  45. 45 ͋……ɺ΋ɺ΋͔ͯ͠͠ɺ͜ͷσΟϨΫτϦߏ੒͕ɺ͖ͬ͞ͷಉ৺ԁͷਤͱରԠ͍ͯ͠Δͷʁ commonMainͷԼʹڞ௨ͷϩδοΫΛॻ͍ͯɺͲ͏ͯ͠΋ϓϥοτϑΥʔϜґଘͷίʔυΛ ॻ͔ͳ͖Ό͍͚ͳ͍࣌͸ɺandroidMain΍iosMainʹॻ͍͍͚ͯ͹ɺ͍͍ͷ͔ͳ……ʁ খࢳ ✦ ✦ +7.ग़ྗ +4ग़ྗ /BUJWFग़ྗ

    ڞ௨ͷϩδοΫ "OESPJEʹґଘ͢Δίʔυ J04ʹґଘ͢Δίʔυ +4ʹґଘ͢Δίʔυ
  46. 46 ͦͷ௨ΓΑɺখࢳɻ ͲͷϓϥοτϑΥʔϜͰ΋ڞ௨ͷϩδοΫΛ࣮૷͍ͨ͠ͳΒɺࢥͬͨ௨ΓͷίʔυΛKotlinͰ ͦͷ··commonMainҎԼʹ࣮૷͢Ε͹ऴΘΓɻGradle͕ྑ͍ײ͡ʹ੒Ռ෺Λग़ͯ͘͠ΕΔɻ ԁ߳ ✦ ✦ // จࣈΛग़ྗ͢Δϝιου class

    Greeting { fun greeting() = "Hello!" } // on Android val tv: TextView = findViewById(R.id.text_view) tv.text = Greeting().greeting() // on JS(Kotlin/JS) render(document.getElementById("root")) { h3 { +Greeting().greeting() } } // on iOS(SwiftUI) var body: some View { Text(Greeting().greeting()) } ˞֤ϓϥοτϑΥʔϜͷ)FMMP 8PSME
  47. 47 ҰํͰɺྫ͑͹ϩάग़ྗΈ͍ͨʹɺϓϥοτϑΥʔϜຖʹҧ͏࣮૷͕ෆՄܽͷ৔߹΋͋Δɻ ͦͷ࣌͸ɺ·ͣcommonMainʹexpectम০ࢠΛ͚ͭͯΫϥε / ϝιουΛఆٛ͢Δͷɻ ֤ϓϥοτϑΥʔϜʹ޲͚ͯɺΫϥε / ϝιουͷ"ଘࡏ"Λఆٛ͢ΔΠϝʔδͶɻ ԁ߳ ✦

    ✦ // จࣈΛग़ྗ͢Δϝιου expect object Log { fun debug(message: String) } FYQFDUम০ࢠ ˠϝιουͷத਎͸ϓϥοτϑΥʔϜຖʹ ɹ࣮૷͢ΔͷͰ͜͜Ͱ͸ۭ
  48. 48 actual object Log { actual fun debug(message: String) {

    android.util.Log.d("debug", message) } } actual object Log { actual fun debug(message: String) { println("debug: $message") } } actual object Log { actual fun debug(message: String) { console.log("debug: $message") } } ͦͯ͠ɺandroidMain΍iosMainͰΫϥε / ϝιουͷத਎Λ࣮૷͢Δɻ actualम০ࢠΛઌ಄ʹ͚ͭΔ͜ͱͰɺexpectͳΫϥε / ϝιουͱରԠ͚͕ͮͰ͖ΔɺͦΜͳײ͡ɻ ԁ߳ ✦ ✦ BDUVBMम০ࢠ
  49. 49 ͜͜·Ͱͬ͘͟ΓίʔυΛݟ͚ͤͨͲɺಈ࡞֬ೝલʹΑ͘ϋϚΔͷ͕ɺϏϧυεΫϦϓτपΓɻ ͔ͩΒॳΊͯ৮Δ࣌͸ɺKotlin Multiplatform MobileΛ࢖͏ͱָͶɻ υΩϡϝϯτ΋ॆ࣮͍ͯ͠Δ͠ɺҰ౓ಡΜͰ͓͘ͱ͢ΜͳΓਐΉΜ͡Όͳ͍ʁ ԁ߳ ✦ ✦ ,PUMJO.VMUJQMBUGPSN.PCJMF

    ,..   ,PUMJO.11ͰͷϞόΠϧ։ൃΛָʹ͢Δ1MVHJO  "OESPJE4UVEJP 9DPEFҎ߱  ͜ͷࢿྉͷαϯϓϧίʔυ࡞੒ʹ΋׆༻ ϦϯΫIUUQTLPUMJOMBOHPSHMQNPCJMF
  50. 50 50 ΁͑ɺͳΜ͔ͦ͢͝͏ɻ Ͷ͐ɺKotlin MPPͬͯ͞ɺͲ͜·Ͱڞ௨ԽͰ͖ΔΜͩΖ͏Ͷɻ ಁ ✦ ✦ ,PUMJO.VMUJQMBUGPSN.PCJMF ,..

      ,PUMJO.11ͰͷϞόΠϧ։ൃΛָʹ͢Δ1MVHJO  "OESPJE4UVEJP 9DPEFҎ߱  ͜ͷࢿྉͷαϯϓϧίʔυ࡞੒ʹ΋׆༻ ϦϯΫIUUQTLPUMJOMBOHPSHMQNPCJMF
  51. 51 ฉ͍ͨ͜ͱ͕͋ΔͷͳΒɺʮ֎՟ܭࢉʯ΍ʮ੫ֹܭࢉʯͷڞ௨Խɻ খ͞ͳζϨ΋ڐ͞Εͳ͍ػೳ͔ͩΒಋೖޮՌ΋ߴ͍͠ɺͳ͓͔ͭඇಉظॲཧ΋հࡏ͠ͳ͍͔Βɺ ݱߦͷKotlin MPPͰ΋҆৺ͯ͠ར༻Ͱ͖ΔྖҬͱݴ͑ΔͰ͠ΐ͏Ͷɻ ԁ߳ ✦ ✦

  52. 52 ͦΕ͔Βɺ࠷ۙ͸HttpΫϥΠΞϯτͷKtor΍JSONγϦΞϥΠβͷkotlinx.serializationɺ ඇಉظॲཧΛѻ͏Coroutines΋Kotlin MPPʹରԠ͍ͯ͠Δ͠ɺࣄྫ͕গͳ͍͚ͩͰ ڞ௨ԽͰ͖Δൣғ͸͔ͳΓ޿͍Μ͡Όͳ͍ʁɹ஌Βͳ͍͚Ͳɻ ԁ߳ ✦ ✦ ,PUMJO.11ରԠͷϥΠϒϥϦ 

    ,UPS)UUQΫϥΠΞϯτɻ+FU#SBJOT੡ɻ  LPUMJOYTFSJBMJ[BUJPO+40/γϦΞϥΠβσγϦΞϥΠβɻ+FU#SBJOT੡ɻ  ,PUMJO$PSPVUJOFTඇಉظॲཧΠΠײ͡ʹ͢Δɻ+FU#SBJOT੡ɻ  LPJO,PEFJOґଘੑ஫ೖ %* ϥΠϒϥϦɻ  ,PUFTUϢχοτςετϑϨʔϜϫʔΫɻ
  53. 53 ઌिݟͨLTձͰ͸ɺMVVMΞʔΩςΫνϟͷViewModelɺͭ·ΓUIϩδοΫ·Ͱڞ௨Խͨ͠ɺ ͳΜͯ࿩Λϓϩσϡʔαʔ͕͍͚ͯͨ͠Ͳɺ޿·Δʹ͸͕͔͔࣌ؒΓͦ͏Ͷɻ ԁ߳ ✦ ✦ ࢿྉIUUQTTQFBLFSEFDLDPNTVCSPIKFUQBDLDPNQPTFEFHBO[JUBTJBXBTFOBUPLPSP

  54. 54 ͯ͞ɺઆ໌͸͜ΕͰऴΘΓɻͲ͏ʁɹͰ͖ͦ͏ʁ ԁ߳ ✦ ✦

  55. 55 ΍͸ʙʙʙὑɹԁ߳ઌഐɺઆ໌Θ͔Γ΍͢ʙ͍ʂ ͜ΕͩͬͨΒɺ՝୊΋શ෦ɺԁ߳ઌഐʹ͓ئ͍ͨ͠ํ͕ૣͦ͏ʙʙʙʂʂʂ ਽ࡊ ✦ ✦

  56. 56 צหͯ͠……ɻখࢳɺޙ͸པΜͩɻ ԁ߳ ✦ ✦

  57. 57 ͽΌͬʂʂʂɹ……͋ɺ͋Γ͕ͱ͏ɺԁ߳ͪΌΜʂ ͲɺͲ͏……ʁɹਐΊΒΕͦ͏ɺಁͪΌΜ……ʁ খࢳ ✦ ✦

  58. 58 ;;;ɺେৎ෉ɺ΋͏׬ᘳɻ Kotlin Multiplatformɺ׬શʹཧղͨ͠ɻ ಁ ✦ ✦

  59. 59 …… খࢳ ✦ ✦

  60. 60 …… ԁ߳ ✦ ✦

  61. 61 ……͸͊ɻख఻͏ɻઙ૔ɺ՝୊Έͤͯɻ ԁ߳ ✦ ✦

  62. 62 ͑ʙʙʙͣΔ͍ʙʙʙʂɹ਽ࡊ΋ಁઌഐʹڭ͑Δʙʙʙʂʂʂ ਽ࡊ ✦ ✦

  63. 63 ……ͭͮ͘(?) ✦ ✦

  64. ,PUMJO.11ͱٔΕΔϊΫνϧ ΞΠϚεϋοΧιϯΦϯϥΠϯʂ ʹ͜͠Γ͞ͿΖʙ!TVCSPI@ )BWFBOJDF,PUMJO