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

Kotlin Native ファーストステップ

Kotlin Native ファーストステップ

Monaca UG OHMIYA #4 ~集まれMonaca ユーザー!~
https://monacaug.connpass.com/event/109607

の発表資料です。

Atsushi Nakatsugawa

December 01, 2018
Tweet

More Decks by Atsushi Nakatsugawa

Other Decks in Technology

Transcript

  1. # MOONGIFT DAY 2018/09/20 自己紹介 @goofmint fb.me/goofmint 中津川 篤司 株式会社MOONGIFT

    代表取締役 www.moongift.jp エバンジェリスト コミュニティ
  2. # MOONGIFT DAY 2018/09/20 Kotlinとは? • 2011年7月20日 ! 生まれ •

    Jet Brain社製 • JVM上で動作 • 静的型付けのオブジェクト指 向言語 • 2017年 Androidの公式言語に привет там ! https://kotlinlang.org
  3. # MOONGIFT DAY 2018/09/20 サンプル fun calculate(x: Int, y: Int,

    operation: (Int, Int) -> Int): Int { // 1 return operation(x, y) // 2 } fun sum(x: Int, y: Int) = x + y // 3 fun main() { val sumResult = calculate(4, 5, ::sum) // 4 val mulResult = calculate(4, 5) { a, b -> a * b } // 5 println("sumResult $sumResult, mulResult $mulResult") }
  4. # MOONGIFT DAY 2018/09/20 vs typealias Alias = () ->

    Unit class Child { var alias: Alias? = null fun doSomething(){ alias?.invoke() } } class Parent { var child = Child() init { child.alias = { // do something } } } typealias Alias = () -> () class Child { var alias: Alias? = nil func doSomething(){ alias?() } } class Parent { var child = Child() init() { child.alias = { [weak self] in // do something } } }
  5. # MOONGIFT DAY 2018/09/20 Kotlinの進化 • 1.0 : Kotlin ->

    JVM • 1.1 : Kotlin/JS • 1.3 : Kotlin/Native
  6. # MOONGIFT DAY 2018/09/20 マルチプラットフォームの違い ロジック共有 React Native Kotlin/Native
 Xamarin

    Learn once, write anywhere UI共通化 Monaca(Cordova)
 Unity
 Titanium Write once, run anywhere
  7. PAGE DAY 2017/11/01 # MOONGIFT X / 12 全部で3パターン •

    軽くはじめる • 苦しくはじめる • スマホアプリ開発ではじめる
  8. PAGE DAY 2017/11/01 # MOONGIFT X / 12 コードを書く fun

    main(args: Array<String>) { println("Hello Kotlin/Native!") }
  9. PAGE DAY 2017/11/01 # MOONGIFT X / 12 実行する $

    ./program.kexe
 Hello Kotlin/Native!
  10. PAGE DAY 2017/11/01 # MOONGIFT X / 12 苦しくはじめる ソースを取得する

    $ git clone https://github.com/JetBrains/kotlin-native.git
 $ cd kotlin-native $ ./gradlew dependencies:update # 30分くらい?
 $ ./gradlew bundle # MBPで1時間くらい distにパスを通す
  11. PAGE DAY 2017/11/01 # MOONGIFT X / 12 ビルド用ファイルを編集 gradle-wrapper.properties

    build.gradle settings.gradle SharedCode/build.gradle app/build.gradle
  12. PAGE DAY 2017/11/01 # MOONGIFT X / 12 共通コードの作成 package

    org.kotlin.mpp.mobile expect fun platformName(): String fun createApplicationScreenMessage() : String { return "Kotlin Rocks on ${platformName()}" } package org.kotlin.mpp.mobile actual fun platformName(): String { return "Android" } package org.kotlin.mpp.mobile import platform.UIKit.UIDevice actual fun platformName(): String { return UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion }
  13. PAGE DAY 2017/11/01 # MOONGIFT X / 12 画面上で呼び出し import

    org.kotlin.mpp.mobile.createApplicationScreenMessage class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) findViewById<TextView>(R.id.main_text).text = createApplicationScreenMessage() } }
  14. PAGE DAY 2017/11/01 # MOONGIFT X / 12 共通コードの出力 •

    SharedCode/build.gradleの編集 • Gradleの実行
  15. PAGE DAY 2017/11/01 # MOONGIFT X / 12 設定を編集 Build

    Settingsの変更 Build Phasesの変更
  16. PAGE DAY 2017/11/01 # MOONGIFT X / 12 Swiftの記述 import

    SharedCode :
 override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let label = UILabel(frame: CGRect(x: 0, y: 0, width: 300, height: 21)) label.center = CGPoint(x: 160, y: 285) label.textAlignment = .center label.font = label.font.withSize(25) label.text = CommonKt.createApplicationScreenMessage() view.addSubview(label) }
  17. PAGE DAY 2017/11/01 # MOONGIFT X / 12 Androidの記述 import

    org.kotlin.mpp.mobile.createApplicationScreenMessage class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) findViewById<TextView>(R.id.main_text).text = createApplicationScreenMessage() } }
  18. PAGE DAY 2017/11/01 # MOONGIFT X / 12 ハマりどころが多い •

    ネット上の情報が古いものが多い(Objective-Cだけとか、 Kotlinのバージョンが低いとか) • Android Studioのバージョンでハマる。やたらアップデート がかかって動作がおかしくなる • Android StudioからJavaのモジュールしか作れない。余計な ファイルが作られる • Gradleのフォーマットが分からないと死ねる
  19. PAGE DAY 2017/11/01 # MOONGIFT X / 12 基本的にはAndroid前提 •

    開発はAndroid Studio上で行う • でもiOSでの結果を想像しながら作らないといけない • AndroidはKotlinで開発できて楽。iOSでロジックを共通化し たい時に使えるかも?
  20. PAGE DAY 2017/11/01 # MOONGIFT X / 12 UIは基本的に別 •

    Kotline/NativeでiOSすべての開発は行えない(現状) • ロジックの共通化に留めないといけない • OS特有の機能は触れないので注意
  21. PAGE DAY 2017/11/01 # MOONGIFT X / 12 結論 •

    使いたいかと言われると、使いたくない " • Kotlin自体はSwiftに似てて分かりやすい • 今後の進化に期待
  22. PAGE DAY 2017/11/01 # MOONGIFT X / 12 Kotolinって書くと… not

    kotolin, kotlin アカウントから されます