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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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で急増した生産量の荒波をCodeRabbitで乗りこなそう
moongift
PRO
1
62
AIによるコードレビューで 開発体験を向上させよう!
moongift
PRO
0
48
レビュー負債を解消する ― CodeRabbitが支えるAI駆動開発
moongift
PRO
0
590
個人開発からエンプラまで。AIコードレビューで開発を楽しもう
moongift
PRO
0
420
AIで急増した生産「量」の荒波をCodeRabbitで乗りこなそう
moongift
PRO
1
1.6k
Codexとも仲良く。CodeRabbit CLIの紹介
moongift
PRO
1
880
リレーションからマーケティングへ。継続するDevRelのために行うべきこと
moongift
PRO
0
32
開発スピードとスキル向上を両立するAIコードレビューの活かし方
moongift
PRO
0
84
個人開発にAIレビューを導入しよう
moongift
PRO
0
74
Other Decks in Technology
See All in Technology
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
610
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
SREじゃなかった僕らがenablingを通じて「SRE実践者」になるまでのリアル / SRE Kaigi 2026
aeonpeople
6
2.5k
ランサムウェア対策としてのpnpm導入のススメ
ishikawa_satoru
0
210
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
710
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
210
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
590
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
480
SRE Enabling戦記 - 急成長する組織にSREを浸透させる戦いの歴史
markie1009
0
140
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
3
210
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
4
220
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
WENDY [Excerpt]
tessaabrams
9
36k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
Being A Developer After 40
akosma
91
590k
[SF Ruby Conf 2025] Rails X
palkan
1
760
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Visualization
eitanlees
150
17k
Designing for humans not robots
tammielis
254
26k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
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 アカウントから されます