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
620
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
740
Other Decks in Technology
See All in Technology
Microsoft Build 2025 技術/製品動向 for Microsoft Startup Tech Community
torumakabe
2
300
How Community Opened Global Doors
hiroramos4
PRO
1
120
「Chatwork」の認証基盤の移行とログ活用によるプロダクト改善
kubell_hr
1
200
AIのAIによるAIのための出力評価と改善
chocoyama
2
580
あなたの声を届けよう! 女性エンジニア登壇の意義とアウトプット実践ガイド #wttjp / Call for Your Voice
kondoyuko
4
480
AWS アーキテクチャ作図入門/aws-architecture-diagram-101
ma2shita
30
11k
2025-06-26_Lightning_Talk_for_Lightning_Talks
_hashimo2
2
100
AWS Summit Japan 2025 Community Stage - App workflow automation by AWS Step Functions
matsuihidetoshi
1
290
データプラットフォーム技術におけるメダリオンアーキテクチャという考え方/DataPlatformWithMedallionArchitecture
smdmts
5
650
Amazon S3標準/ S3 Tables/S3 Express One Zoneを使ったログ分析
shigeruoda
4
550
Welcome to the LLM Club
koic
0
190
SalesforceArchitectGroupOsaka#20_CNX'25_Report
atomica7sei
0
200
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Raft: Consensus for Rubyists
vanstee
140
7k
Embracing the Ebb and Flow
colly
86
4.7k
The Straight Up "How To Draw Better" Workshop
denniskardys
234
140k
Automating Front-end Workflow
addyosmani
1370
200k
Docker and Python
trallard
44
3.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
How STYLIGHT went responsive
nonsquared
100
5.6k
The Cult of Friendly URLs
andyhume
79
6.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
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 アカウントから されます