頭のメモリが少ない

プログラミングと日々の生活

【初心者歓迎】Kotlin開発Tech Talks 参加レポート

f:id:chick-developer:20170713124133p:plain

【初心者歓迎】Kotlin開発Tech Talks 参加レポート

概要

Google I/Oにて、ついにKotlinがAndroidの正式な開発言語として追加されました。今後より盛り上がっていくと考えられるAndroidでのKotlin利用に関する勉強会を開催します。

この勉強会で登壇するスピーカーが所属する5社は、Kotlinの導入度合いも会社の規模や成長フェーズもバラバラですが、いずれも「ヒトをつなぐ」自社サービスを展開しています。それぞれのサービスでのAndroid開発におけるKotlin利用について、その取り組みやノウハウなどを発表します。

【日時】7月12日(水)19:30~22:00
【場所】スタートアップベースキャンプ オープンスペース
【住所】東京都渋谷区円山町28-1 渋谷道玄坂スカイビル8F
【費用】¥1,000 ※飲み物と軽食をご用意します
【URL】https://connpass.com/event/59898/

■ほぼ毎週リリースアプリのKotlin書き換えの道のり

  • 株式会社葵 近藤 和宏

    Kotlin事情

  • アオイゼミ(iOS, Android, Web版)
  • 去年夏頃よりリニューアル計画
  • 10月には言語や内部仕様、リニューアル内容の決定
  • Kotlinの熱量と書きやすさ採用などを鑑み採用
  • 12月から開発開始
  • 12月末一部KotlinとJavaが併存している状態でリリース

  • ほぼ毎週リリース

  • 1月〜4月までの間、Kotlin Onlyで書き直しているブランチと試作用の2つのブランチを使って開発していた
  • 約20万行以上のコードを書き直し

メリット編

  • null safe
  • 公式サポート
  • 採用にインパクトある

色々あったよ編

  • Android 65K
  • Null safeなKotlinでもnullpointerexceptionは発生する “?"でマーク、コード側で防御、NPEが入り込まないように設計
  • 動画が再生されない事件 一部ユーザーが動画がされない報告が続出
    CDNがHTTP2.0に対応TLS1.1.以下を切り捨てていた
    急なトラブル対応にはまだJavaのコードを読む必要がある

■開発 4 年目のアプリへの Kotlin 導入

speakerdeck.com

ChatWork株式会社 宮下 竜大郎(チームリーダー)
国産のビジネスチャットサービス
最初はTitanium製
Android版(2014年12月からネイティブ)

なぜKotlinを導入するのか?

急ぐ必要はあるのか?
-> 急がなければならない理由はない
あくまでも公式サポート言語が増えただけ

  • それでもKotlinを導入する理由
    • エンジニア的な楽しさ
    • エンドユーザーのメリットにもなる言語機能

      • ボイラーテンプレートを少なく出来る
        • Lambda式
          java8のラムダ式よりもカンタンに書ける(スッキリ書ける)
    • 脳内の処理イメージをコードに反映しやすい
      スコープ関数
      拡張関数
      if, try, when

チームにどう効いていくるか

  • ユースケースを表したコードになりやすい
  • 無駄が無いのでコードレビューがやりやすい、確認と指摘の漏れが少なくなる

気をつけること

  • 7200メソッドほど増える
  • 65Kメソッド制限にぶつかる可能性が高まる
  • kaptが生成するコードに問題があることもある(たまにドハマリ注意)

どう導入を進めていくか

  • すべてのコードをKotlinにするのは先が遠い
  • 部分的にKotlin化していくのがよい、Chatworksでは下記の手順で行った
    • はじめに、シンプルなDialogFragmentをKotlin化して、誰でもJavaのコードがイメージできるように
    • 次に既存のコードを一つKotlin化
    • 新規機能コードをKotlinで追加

課題

  • 何をどこまでKotlinで書くかは定まっていない
  • 非同期処理でasync/awaitを使っていくとか
  • 全員が足並みを揃えられるかどうか
  • チームにとって、ひいてはユーザーの価値になるか
  • Kotlinのコードを負債にしてはいけない

■1年ぶりにやりなおすKotlinアプリ開発

speakerdeck.com

株式会社m-gram 北原 和也

エムグラム正確診断
もうすぐリリース予定
AndroidはKotlinで開発

思ったこと

Annotationプロセッサーを使用しているライブラリをするっと使えるようになっている
Kotlin記事も増えている(一年で倍以上増えている)

一年前のlintの結果がイマイチだった
クラスによってはwarning出たり出なかったりしてまだ使えない印象

Kotlinと一緒に使ったライブ

  • Retrofit2, OkHttp3, rxjava
  • Parceler
    -> Parcelableの実装がクソ楽になる
  • Dart
  • android-state
    -> icepickのkotlin版

■テストから始めるKotlin導入

speakerdeck.com

株式会社エウレカ 二川 隆浩
futabooo

  • Pairsの歴史
    大昔のPairsAndroid
    Scala(90%)
  • 現在
    java 6割
    kotlin 2割

  • 最近リニューアルした、Global版
    Kotlin, ProtcolBuffer

十分に発達したバグはどれも、機能と見分けがつかない
-> 主要な機能でバグが発生

  • テストが書いてあれば防げた
    -> しかし、テストが書ける状態ではなかった

テストが書きやす構成にする
レイヤーをはっきり分ける
詳細は、Activityを改善した話のスライド見て!

■KotlinとJavaの相互運用

コネヒト株式会社 富田 健二
@tommykw

ママリのkotlin導入

  • javaだと冗長、複雑になるコードもすっきり可読性が上がる
  • Swift使いのiOSエンジニアにもなじみやすい文法
  • javaぬるぽを駆逐
  • デメリットが少なかった

導入方針

Kotlin導入結果

10月からスタートして54%導入完了
2割くらいコード行数が減った
簡潔に記述できるようになった

KotlinとJavaの相互運用

難しい点

  • PlatformType
    T!を表す
    IDEAでPlatformTypeだと警告を表示してくれる場合がある
    java側で@nullable, @nonnullを定義する

  • MappedType
    javaとkotlinの型テーブル

  • デフォルトfinal class
    kotlinのクラスはデフォルトfinal
    javaとは異なり、継承する場合にopenをつける

  • 検査例外について
    Kotlin側で@Throwを定義する
    IDEA側で警告を定義する

  • ドキュメント
    コメントの書式が統一出来る
    コメントがまとまっていてコードが読みやすい
    コメントを書くことによって読みやすいコードを意識できる

    • KDoc
      マークダウン記法
    • dokka(htmlとして吐き出してくれる)
      共存したプロジェクトにも対応

メリット

生産性の高さ
コレクションの操作が直感的で楽
学習コストもそれほど高くない
IDEAの補完が強力

デメリット

既存である場合は相互関係の辛さがある

ごちそうさまでした🍕

f:id:chick-developer:20170713123750j:plain