Slide 1

Slide 1 text

行こう to Kotlin Y.Sakamoto

Slide 2

Slide 2 text

今日の発表 レシぽんというレシピアプリを作ってます https://recipom.com/ 今日は、これからKotlinを導入しようと思って いる人向けに移行の具体的な事例を語ろうと 思います Y.Sakamoto カカクコムでエンジニアをしています

Slide 3

Slide 3 text

祝 https://developer.android.com/kotlin/index.html

Slide 4

Slide 4 text

Kotlin正式サポート よし、じゃあKotlin書くぞ!

Slide 5

Slide 5 text

すでに存在する大量のJavaコード

Slide 6

Slide 6 text

募る不安 すでにJavaで書かれたAndroidアプリは大量に存在する そこには大量のJavaコード・・・・ 新技術を導入して何かトラブったら・・・ 私たちはJavaを書き続けなければならない・・・・のか? そんなことはない!

Slide 7

Slide 7 text

Kotlinは少しずつ移行可能 Javaで書かれたプロジェクトを少しずつKotlinに移行中です

Slide 8

Slide 8 text

どのように移行しているか① ● Androidアプリを1人で担当(その他スクラムマスターも兼任) ● 2016年8月から開始 ● 最初の2〜3ヶ月は少しずつ試しに書きながら様子を見る ○ 新技術導入なので若干慎重に ■ 画面を書き換えたりはせずに、小さいコンポーネントを Kotlinで書いて見る ● 一番最初にやったのはボタンの共通化 ○ 同時に新しいアーキテクチャの検討を行う ■ MVVMパターンを採用 ■ RxJava + 関数型プログラミングを導入 ■ 極力nullを使わない

Slide 9

Slide 9 text

どのように移行しているか② ● アーキテクチャが固まったら ○ 新規に実装するコードは原則 Kotlinで書く ○ 既存のJavaコードの修正も、極力 Kotlinの新しいファイルに切り出す ○ 特定の画面をまるごと書き換える ■ 利用者数が少ない画面から初めてみる ■ 徐々に重要な画面も書き換えていく ● 大きな変更のタイミングで工数を確保して既存部分を一気に作り直す

Slide 10

Slide 10 text

ソースコード行数の変遷

Slide 11

Slide 11 text

現状 ● 移行開始から半年で、ソースコードの行数ベースではJava:Kotlin=1:1ぐらい ● 画面数ベースではJava:Kotlin = 3:7 ぐらい ○ Kotlinの方が行数あたりの機能実現量が大きい (*1) → 高生産性(*2)  ✳ 1. アーキテクチャ見直しによる効率アップや機能削減の影響も含む ✳ 2. ソースコードの行数で言語を語るのはナンセンスなので、あくまで参考値ということで

Slide 12

Slide 12 text

感想 ● AndroidStudioでKotlinは快適に書けます ○ コード補完が動き、リファクタリングもできる ● JavaとKotlinのコードは問題なく共存できる ○ KotlinのコードをJavaから呼び出すと冗長な記述になることがある ● KotlinプラグインのJava->Kotlin変換機能が強力 ● Kotlinの生産性の高さが、プロダクトに良い影響を与えている ○ 機能改修・追加の速度が上がった ○ 品質が向上 ■ 特にNPEをかなり減らせた

Slide 13

Slide 13 text

冗長な記述になる例(Activityの拡張関数) Kotlin Java 定義 * staticインポートを使うことによって「ActivityExtensionKt」の記述は不要にすることもできます。長澤さんご指摘ありがとうございます!

Slide 14

Slide 14 text

技術戦略上の観点 ● 新技術への移行は常にリスクが伴う ● Objective-C -> Swift移行時の経験 ○ IDEのサポートが十分でない ○ 言語仕様変更 ○ 旧言語と新言語間のやりとりの面倒さ ● Kotlin移行は(経験した限りでは)リスクが非常に小さい

Slide 15

Slide 15 text

Kotlinはなぜ移行しやすい? ● IDEを作っている会社が開発しており、開発環境のサポートが十分にされている ● 後方互換性が保証されている ● すでに採用例も多く、実績がある ● オープンソースである

Slide 16

Slide 16 text

移行時のポイント ● JavaのコードをそのままKotlinに置き換えるだけではもったいない ● Null Safety, 関数型プログラミングなどの新しい考え方を導入して設計に組み込む ことによってKotlinの力を引き出し生産性を上げることができる

Slide 17

Slide 17 text

結論 行こう! to Kotlin

Slide 18

Slide 18 text

カカクコムではKotlinを積極的に導入しています。 一緒に働いてくれる仲間を随時募集しています! http://kakaku.com/info/recruit/job/career.html