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

Kotlin MPPと戯れるノクチル

subroh_0508
December 05, 2020

Kotlin MPPと戯れるノクチル

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

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

subroh_0508

December 05, 2020
Tweet

More Decks by subroh_0508

Other Decks in Technology

Transcript

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

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

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

    .11   ,PUMJO੡ͷ91MBUϑϨʔϜϫʔΫ  ʮϩδοΫͷڞ௨Խʯ΁ͷϑΥʔΧε͕ಛ௃  +7./BUJWF+4ίʔυͷग़ྗ͕Մೳ 3FGFSFODFLPUMJOMBOHPSHEPDTSFGFSFODFNVMUJQMBUGPSNIUNM +7.ग़ྗ +4ग़ྗ /BUJWFग़ྗ
  4. 43 ϓϥοτϑΥʔϜʹґଘͤͣɺڞ௨ԽͰ͖ΔίʔυΛஔ͘ͷ͸͜ͷϞδϡʔϧɻ Ϟδϡʔϧ໊͸ʮsharedʯ΍ʮcommonsʯͱͯ͠؅ཧ͢Δ͜ͱ͕ଟ͍ΘͶɻ σʔλΫϥεͷએݴ΍ۀ຿ϩδοΫɺAPIαʔόʔ΁ͷϦΫΤετ΋·ͱΊΔ͜ͱ͕Ͱ͖ΔΘɻ ԁ߳ ✦ ✦ σΟϨΫτϦߏ੒ ˞TIBSFEʹͨ͘͞Μ ·ͱΊͨϓϩδΣΫτྫ

    BQJ"1*$MJFOUΛఆٛ EC୺຤಺%#PS-PDBM$BDIFͷ$MJFOUΛఆٛ RVFSZ41"32-ΫΤϦͷఆٛ SFQPTJUPSZϞσϧຖʹ$36%ϝιουΛఆٛ NPEFMσʔλΫϥεͷએݴ QSFTFOUBUJPO6*ϩδοΫͷ࣮૷ VUJMJUJFTศརؔ਺܈
  5. 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
  6. 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म০ࢠ
  7. 50 50 ΁͑ɺͳΜ͔ͦ͢͝͏ɻ Ͷ͐ɺKotlin MPPͬͯ͞ɺͲ͜·Ͱڞ௨ԽͰ͖ΔΜͩΖ͏Ͷɻ ಁ ✦ ✦ ,PUMJO.VMUJQMBUGPSN.PCJMF ,..

      ,PUMJO.11ͰͷϞόΠϧ։ൃΛָʹ͢Δ1MVHJO  "OESPJE4UVEJP 9DPEFҎ߱  ͜ͷࢿྉͷαϯϓϧίʔυ࡞੒ʹ΋׆༻ ϦϯΫIUUQTLPUMJOMBOHPSHMQNPCJMF
  8. 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ϢχοτςετϑϨʔϜϫʔΫɻ