Kotlin 使いになりました
2016/07/09 Kansai.kt LT #kansaikt@株式会社はてな 京都オフィスSansan 株式会社 辰濱健一
Copyright © 2014 Sansan, Inc. All rights reserved.
自己紹介
2
Copyright © 2014 Sansan, Inc. All rights reserved.
>自己紹介
3
• 辰濱健一
• 徳島生まれ、奈良育ち、徳島県在住
• 2 回転職するも、いずれも徳島県内勤務
• Tokushima.app 主催(徳島でのスマホアプリの勉強会)
• Sansan 株式会社所属
• 古民家を改修した神山ラボ勤務
• 名刺アプリ Eight Android 版の開発
• Kotlin, RxJava, Realm, … を使ってます
• リモートワーク
• 趣味は楽器演奏
Copyright © 2014 Sansan, Inc. All rights reserved.
>Sansan 神山ラボ
4
Copyright © 2014 Sansan, Inc. All rights reserved.
>趣味
5
• 楽器演奏(エレクトーン・トランペット)
• 徳島県内のイベントで、ちらほら演奏する機会を頂いてます
Copyright © 2014 Sansan, Inc. All rights reserved.
>Tokushima.app
6
• http://tokushima-app.connpass.com• 徳島のスマホアプリ開発の勉強会
• 基本もくもく会、たまにハンズオン
• 場所は徳島市内、 10:00 〜 16:00• 初心者でも OK 、入退出自由、参加費無料
• 月 1 ペースで開催(したいと思ってはいる)
• 辰濱が東京の勉強会で仕入れてきた情報なども共有します
• 要望あれば、近隣に出張ハンズオンなども始めようかな…とか思っている。
Copyright © 2014 Sansan, Inc. All rights reserved. 7
京都にもオフィス!
Copyright © 2014 Sansan, Inc. All rights reserved.
>Sansan 京都ラボ
8
• 京都で Kotlin 書きたい方、お待ちしております!!
• 京都ラボ:
• http://jp.corp-sansan.com/blog/jinji/2014/141125.html
Copyright © 2014 Sansan, Inc. All rights reserved. 9
本題へ…
Copyright © 2014 Sansan, Inc. All rights reserved.
Kotlin 使いになりました
10
Copyright © 2014 Sansan, Inc. All rights reserved.
>モバイル経験
11
• 前職 2012/09 〜
• iOS, Android, Windows8(C#)• 機能担当制で、 3OS ともやる
• Sansan 2014/03 〜
• 2014/03 〜 法人向け部門
• Android アプリ
• Java, SQLite, DefaultHttpClient(Deprecated...), 生 Activity
• 2016/03 〜 個人向け部門( Eight )に部署異動!
• Android アプリ
• Kotlin, Realm, Retrofit, Rx ( UI も) , MaterialDesign, ...
Copyright © 2014 Sansan, Inc. All rights reserved. 12
同じ「 Android エンジニア」といえど、使われている技術が違う部署への異動はかなり大変。。。
Copyright © 2014 Sansan, Inc. All rights reserved. 13
さらに、異動後の即戦力の期待値感が高い… orz(端から見れば、 Android → Android 。そりゃそうだ。)
Copyright © 2014 Sansan, Inc. All rights reserved. 14
不慣れと、わからないことの焦りと不安
なかなか終わらないビルド…
Copyright © 2014 Sansan, Inc. All rights reserved. 15
辛い。。。
Copyright © 2014 Sansan, Inc. All rights reserved. 16
でも、
Copyright © 2014 Sansan, Inc. All rights reserved.
>社内に Kotlin の師匠
17
• コードレビューによる助言、知見の共有
Copyright © 2014 Sansan, Inc. All rights reserved.
>弊社主催の Kotlin 勉強会@東京
18
• 他社事例や自社外の知見の共有!(リモート視聴)
Copyright © 2014 Sansan, Inc. All rights reserved. 19
恵まれた環境です。
Copyright © 2014 Sansan, Inc. All rights reserved. 20
異動から…
Copyright © 2014 Sansan, Inc. All rights reserved. 21
ヶ月
ヶ月
※Input に注力する期間を自分で 定めただけです。※転職するわけではないです
Copyright © 2014 Sansan, Inc. All rights reserved. 22
Input に注力する期間が終わったので…
Output を!
Copyright © 2014 Sansan, Inc. All rights reserved. 23
Kotlin 使っててハマった所を共有します。
Copyright © 2014 Sansan, Inc. All rights reserved.
Java → Kotlin コンバータの注意点
24
Copyright © 2014 Sansan, Inc. All rights reserved.
>Code > Convert Java File to Kotlin File
25
Copyright © 2014 Sansan, Inc. All rights reserved.
>Before / After
26
↓ Java to Kotlin ↓
Copyright © 2014 Sansan, Inc. All rights reserved.
>Before / After
27
↓ Java to Kotlin ↓
NewActivity に遷移して、バックキーで戻ると…
Copyright © 2014 Sansan, Inc. All rights reserved.
>RuntimeException...
28
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=123, result=0, data=null} to activity {jp.tokushima.tatsuhama.myapplication/jp.tokushima.tatsuhama.myapplication.MainActivity}: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter data at android.app.ActivityThread.deliverResults(ActivityThread.java:3699) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) at android.app.ActivityThread.-wrap16(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
Copyright © 2014 Sansan, Inc. All rights reserved.
>Nullable にする必要があった
29
× : data: Intent ↓
○ : data: Intent?※ 色々試してみたところ、 data を関数内で null チェックしてたら、
ちゃんと Intent? になりました!
Copyright © 2014 Sansan, Inc. All rights reserved. 30
コンバータを使っても、関数パラメータの
NonNull / Nullable はちゃんと確認しよう!
Copyright © 2014 Sansan, Inc. All rights reserved.
使っているのに、 Unused Resources
31
Copyright © 2014 Sansan, Inc. All rights reserved.
>Lint の実行結果
32
• ./gradlew lint で実行
• kt ファイルで使ってるのに、 Unused Resources …リソースを消すときは要注意!
Copyright © 2014 Sansan, Inc. All rights reserved. 33
Kotlin 1.0.2 で Lint 対応って書いてたんだけど…
まだ、過信しない方が良い
Copyright © 2014 Sansan, Inc. All rights reserved.
使えるのに、警告…
34
Copyright © 2014 Sansan, Inc. All rights reserved.
>Android Studio 上に警告が…
35
• Bundle#putBoolean が API 22 以上??
Copyright © 2014 Sansan, Inc. All rights reserved.
>Android Studio 上に警告が…
36
• Bundle#putBoolean が API 22 以上??
• いいえ、 API 1 からです。
Copyright © 2014 Sansan, Inc. All rights reserved. 37
Plugin も発展途上。怪しいと思ったら、
ちゃんと本家で確認を!
Copyright © 2014 Sansan, Inc. All rights reserved.
呼んでるのに…
38
Copyright © 2014 Sansan, Inc. All rights reserved.
>呼ばれてないことになってしまう
39
• property アクセスが、 Hierarchy Callcs で出ない…
• 削除時は要注意!!
使っているのに… 出てない!?
Copyright © 2014 Sansan, Inc. All rights reserved. 40
色々発展途上。
修正したら、ちゃんとビルドが通ることを
確認しよう!!(ビルド遅いけど…)
Copyright © 2014 Sansan, Inc. All rights reserved.
IcePick が動かない…
41
Copyright © 2014 Sansan, Inc. All rights reserved.
>アノテーションプロセッサが原因?
42
• IcePick :
• Activity/Fragment のインスタンスフィールドを簡単に保存・復元してくれるライブラリ
Copyright © 2014 Sansan, Inc. All rights reserved. 43
使ってるライブラリがKotlin で動くことを
ちゃんと確認しよう!
Kotlin 版 IcePick は弊社の yamamotj が Pikkel を公開しています。
https://github.com/yamamotoj/Pikkel
Copyright © 2014 Sansan, Inc. All rights reserved. 44
まとめ。
Copyright © 2014 Sansan, Inc. All rights reserved. 45
まだ発展途上のツールもあるけど、
慣れてくると Kotlin 良い!
※安心して下さい、 Kotlin 本体はプロダクトコードでも問題なく使えています!
Copyright © 2014 Sansan, Inc. All rights reserved. 46
先人の知見が、Kotlin 習得に役立ちました!
Copyright © 2014 Sansan, Inc. All rights reserved. 47
この内容も誰かの役に立てば幸いです。
Copyright © 2014 Sansan, Inc. All rights reserved. 48
四国住まいですが、また Kotlin の経験積んで
Kansai.kt にてOutput しに来たいと思いま
す!
Copyright © 2014 Sansan, Inc. All rights reserved. 49
本日はありがとうございました!&
これからも、よろしくお願いします!
Copyright © 2014 Sansan, Inc. All rights reserved.
ステッカー欲しい方、お声がけ下さい!!
50