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
240
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
61
個人開発にAIレビューを導入しよう
moongift
PRO
0
40
AIによるコードレビューで開発体験を向上させよう!
moongift
PRO
0
740
AIによるコードレビューで開発体験を向上させよう!
moongift
PRO
0
1.2k
開発スピードとスキル向上を両立するAIコードレビューの活かし方
moongift
PRO
0
64
Let's speed up personal development with AI code reviews
moongift
PRO
0
32
DevRelに活かせるAIツールの紹介とレビュー
moongift
PRO
0
120
DevRelの基礎と戦略
moongift
PRO
0
72
DevRelの始め方
moongift
PRO
3
780
Other Decks in Technology
See All in Technology
どこで動かすか、誰が動かすか 〜 kintoneのインフラ基盤刷新と運用体制のシフト 〜
ueokande
0
200
イオン店舗一覧ページのパフォーマンスチューニング事例 / Performance tuning example for AEON store list page
aeonpeople
2
320
Android Studio の 新しいAI機能を試してみよう / Try out the new AI features in Android Studio
yanzm
0
280
Yahoo!広告ビジネス基盤におけるバックエンド開発
lycorptech_jp
PRO
1
280
MySQL HeatWave:サービス概要のご紹介
oracle4engineer
PRO
4
1.7k
AIエージェント就活入門 - MCPが履歴書になる未来
eltociear
0
600
ドキュメントはAIの味方!スタートアップのアジャイルを加速するADR
kawauso
3
420
Gaze-LLE: Gaze Target Estimation via Large-Scale Learned Encoders
kzykmyzw
0
350
事業価値と Engineering
recruitengineers
PRO
4
3k
見てわかるテスト駆動開発
recruitengineers
PRO
6
1.2k
コスト削減の基本の「キ」~ コスト消費3大リソースへの対策 ~
smt7174
2
220
人と組織に偏重したEMへのアンチテーゼ──なぜ、EMに設計力が必要なのか/An antithesis to the overemphasis of people and organizations in EM
dskst
6
650
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Faster Mobile Websites
deanohume
309
31k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
480
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Making Projects Easy
brettharned
117
6.3k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.5k
Mobile First: as difficult as doing things right
swwweet
223
9.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 アカウントから されます