Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kotlin Native ファーストステップ
Search
Atsushi Nakatsugawa
PRO
December 01, 2018
Technology
1
230
Kotlin Native ファーストステップ
Monaca UG OHMIYA #4 ~集まれMonaca ユーザー!~
https://monacaug.connpass.com/event/109607
の発表資料です。
Atsushi Nakatsugawa
PRO
December 01, 2018
Tweet
Share
More Decks by Atsushi Nakatsugawa
See All by Atsushi Nakatsugawa
開発スピードとスキル向上を両立するAIコードレビューの活かし方
moongift
PRO
0
43
個人開発にAIレビューを導入しよう
moongift
PRO
0
32
AIによるコードレビューで開発体験を向上させよう!
moongift
PRO
0
610
AIによるコードレビューで開発体験を向上させよう!
moongift
PRO
0
1.2k
開発スピードとスキル向上を両立するAIコードレビューの活かし方
moongift
PRO
0
54
Let's speed up personal development with AI code reviews
moongift
PRO
0
22
DevRelに活かせるAIツールの紹介とレビュー
moongift
PRO
0
110
DevRelの基礎と戦略
moongift
PRO
0
58
DevRelの始め方
moongift
PRO
3
730
Other Decks in Technology
See All in Technology
生成AI活用の組織格差を解消する 〜ビジネス職のCursor導入が開発効率に与えた好循環〜 / Closing the Organizational Gap in AI Adoption
upamune
2
950
_第3回__AIxIoTビジネス共創ラボ紹介資料_20250617.pdf
iotcomjpadmin
0
150
Snowflake Summit 2025 データエンジニアリング関連新機能紹介 / Snowflake Summit 2025 What's New about Data Engineering
tiltmax3
0
310
HiMoR: Monocular Deformable Gaussian Reconstruction with Hierarchical Motion Representation
spatial_ai_network
0
110
ハノーバーメッセ2025座談会.pdf
iotcomjpadmin
0
160
BrainPadプログラミングコンテスト記念LT会2025_社内イベント&問題解説
brainpadpr
1
160
AWS CDK 実践的アプローチ N選 / aws-cdk-practical-approaches
gotok365
6
740
AIのAIによるAIのための出力評価と改善
chocoyama
2
550
Prox Industries株式会社 会社紹介資料
proxindustries
0
280
Observability в PHP без боли. Олег Мифле, тимлид Altenar
lamodatech
0
340
Wasm元年
askua
0
140
製造業からパッケージ製品まで、あらゆる領域をカバー!生成AIを利用したテストシナリオ生成 / 20250627 Suguru Ishii
shift_evolve
PRO
1
140
Featured
See All Featured
Visualization
eitanlees
146
16k
A Modern Web Designer's Workflow
chriscoyier
694
190k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
930
A designer walks into a library…
pauljervisheath
207
24k
How GitHub (no longer) Works
holman
314
140k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.8k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Side Projects
sachag
455
42k
It's Worth the Effort
3n
185
28k
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.5k
Transcript
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Kotlin/Native ファーストタッチ
# MOONGIFT DAY 2018/09/20 自己紹介 @goofmint fb.me/goofmint 中津川 篤司 株式会社MOONGIFT
代表取締役 www.moongift.jp エバンジェリスト コミュニティ
# MOONGIFT DAY 2018/09/20 Kotlinとは? • 2011年7月20日 ! 生まれ •
Jet Brain社製 • JVM上で動作 • 静的型付けのオブジェクト指 向言語 • 2017年 Androidの公式言語に привет там ! https://kotlinlang.org
# 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") }
# 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 } } }
# MOONGIFT DAY 2018/09/20 Kotlin/Native
# MOONGIFT DAY 2018/09/20 Kotlinの進化 • 1.0 : Kotlin ->
JVM • 1.1 : Kotlin/JS • 1.3 : Kotlin/Native
# MOONGIFT DAY 2018/09/20 Kotlin/JSはどうなの? 一記事にツライが5回出るくらい辛い現状っぽい https://qiita.com/nosix/items/45a8054a93455a69afab
# MOONGIFT DAY 2018/09/20 Kotlin/Nativeの注意点 • ワンソース マルチプラットフォームでは " •
ロジックの共有化 #
# MOONGIFT DAY 2018/09/20 マルチプラットフォームの違い ロジック共有 React Native Kotlin/Native Xamarin
Learn once, write anywhere UI共通化 Monaca(Cordova) Unity Titanium Write once, run anywhere
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Kotlin/Nativeの始め方
PAGE DAY 2017/11/01 # MOONGIFT X / 12 全部で3パターン •
軽くはじめる • 苦しくはじめる • スマホアプリ開発ではじめる
PAGE DAY 2017/11/01 # MOONGIFT X / 12 軽くはじめる バイナリをダウンロードしてパスを通す
https://github.com/JetBrains/kotlin/releases/tag/v1.3.10
PAGE DAY 2017/11/01 # MOONGIFT X / 12 コードを書く fun
main(args: Array<String>) { println("Hello Kotlin/Native!") }
PAGE DAY 2017/11/01 # MOONGIFT X / 12 コンパイルする $
kotlinc-native hello.kt
PAGE DAY 2017/11/01 # MOONGIFT X / 12 実行する $
./program.kexe Hello Kotlin/Native!
PAGE DAY 2017/11/01 # MOONGIFT X / 12
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にパスを通す
PAGE DAY 2017/11/01 # MOONGIFT X / 12 アプリ開発ではじめる
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Android Studioで
Kotlinプロジェクト作成
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Kotlinをインストール
PAGE DAY 2017/11/01 # MOONGIFT X / 12 ビルド用ファイルを編集 gradle-wrapper.properties
build.gradle settings.gradle SharedCode/build.gradle app/build.gradle
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 }
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() } }
PAGE DAY 2017/11/01 # MOONGIFT X / 12 ''' できた!
PAGE DAY 2017/11/01 # MOONGIFT X / 12 共通コードの出力 •
SharedCode/build.gradleの編集 • Gradleの実行
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Frameworkの生成
PAGE DAY 2017/11/01 # MOONGIFT X / 12 iOSでの使い方
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Xcodeでインポート
PAGE DAY 2017/11/01 # MOONGIFT X / 12 設定を編集 Build
Settingsの変更 Build Phasesの変更
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) }
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() } }
PAGE DAY 2017/11/01 # MOONGIFT X / 12 ''' できた!
PAGE DAY 2017/11/01 # MOONGIFT X / 12 感想
PAGE DAY 2017/11/01 # MOONGIFT X / 12 ハマりどころが多い •
ネット上の情報が古いものが多い(Objective-Cだけとか、 Kotlinのバージョンが低いとか) • Android Studioのバージョンでハマる。やたらアップデート がかかって動作がおかしくなる • Android StudioからJavaのモジュールしか作れない。余計な ファイルが作られる • Gradleのフォーマットが分からないと死ねる
PAGE DAY 2017/11/01 # MOONGIFT X / 12 基本的にはAndroid前提 •
開発はAndroid Studio上で行う • でもiOSでの結果を想像しながら作らないといけない • AndroidはKotlinで開発できて楽。iOSでロジックを共通化し たい時に使えるかも?
PAGE DAY 2017/11/01 # MOONGIFT X / 12 UIは基本的に別 •
Kotline/NativeでiOSすべての開発は行えない(現状) • ロジックの共通化に留めないといけない • OS特有の機能は触れないので注意
PAGE DAY 2017/11/01 # MOONGIFT X / 12 結論 •
使いたいかと言われると、使いたくない " • Kotlin自体はSwiftに似てて分かりやすい • 今後の進化に期待
PAGE DAY 2017/11/01 # MOONGIFT X / 12 おまけ
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Kotolinって書くと… not
kotolin, kotlin アカウントから されます