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
260
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kotlin Native ファーストステップ
Monaca UG OHMIYA #4 ~集まれMonaca ユーザー!~
https://monacaug.connpass.com/event/109607
の発表資料です。
Atsushi Nakatsugawa
PRO
December 01, 2018
More Decks by Atsushi Nakatsugawa
See All by Atsushi Nakatsugawa
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
5
2.6k
コーディングだけ速くとも意味がない。自動レビューによる開発の高速化
moongift
PRO
0
81
AI 支援研究開発におけるコードレビューの役割と限界
moongift
PRO
0
150
個人AIからチームAIへ:開発における品質と生産性の再設計
moongift
PRO
0
450
AI活用の格差をなくす:チーム全体のAI開発生産性を底上げする方法
moongift
PRO
1
620
CodeRabbit 2026年04月アップデート
moongift
PRO
0
89
AI時代のIssue駆動開発のススメ
moongift
PRO
0
530
プロダクト開発の品質を守るAIコードレビュー:事例に見る導入ポイント
moongift
PRO
1
9.3k
AIで急増した生産量の荒波をCodeRabbitで乗りこなそう
moongift
PRO
1
97
Other Decks in Technology
See All in Technology
Claude CodeとAmazon Bedrock AgentCoreでつくる、自分だけのAIアシスタント
ymae
0
110
41歳でAWSが好きすぎてITエンジニアになったおっさんの話
yama3133
1
770
論語・武士道・産業革命から見る かわるもの、かわらないもの
ichimichi
6
710
2026年のソフトウェア開発を考える(2026/07版) / Agentic Software Engineering 2026-07 Findy Edition
twada
PRO
28
14k
OpenTelemetryにおけるGoのゼロコード・コンパイル時計装について #fukuokago
quiver
0
300
AI時代の開発生産性を捉え直す — 経営と現場をつなぐ「開発組織のオブザーバビリティ」— / AI Dev Ex Conference 2026
tkyowa
1
1.5k
Claude Mythos、Fable...フロンティアAIの最新動向と企業のセキュリティ対策
flatt_security
0
130
副作用のある Lambda でも Lambda Power Tuning は使えるのか / lambda-power-tuning-side-effects
koukihosaka
2
150
ここは地獄!つらい朝会を体験することで、チームとしてのより良い振る舞いに気づくワークショップ / The stand-up meeting from hell in the game industry
scrummasudar
0
310
AI x 開発生産性を取り巻く予算戦略と投資対効果
i35_267
7
3.2k
書籍セキュアAPIについて
riiimparm
0
320
CloudWatchから始めるAWS監視
butadora
0
120
Featured
See All Featured
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Typedesign – Prime Four
hannesfritz
42
3.1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Leo the Paperboy
mayatellez
8
1.9k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
190
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
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 アカウントから されます