個人のブログを書くのはかなり久々ですね。久々に技術的な記事になります!

8月25日にあったKotlin Fest 2018に参加してきました。

なぜ参加したか

昔から趣味でAndroidアプリサーバープラグインをKotlinで開発しているのでKotlinコミュニティに参加してみたいと思っていた。(地方学生はつらい)

Kotlin Fest 2018 には無料の学生枠が10人あったのですが、申し込み開始1時間後にはすでに埋まっていてチケットを取れずにいたところを、インターン先のメルカリさんに相談したところスポンサー枠でチケットを頂きました。ありがとうございます!

ちなみに、メルカリはKotlin Fest 2018の「ことりスポンサー」です。

オープニングセッション

非常に大きい会場だったのですが、私が開始時刻ギリギリに着いた時にはほとんどすべて埋まっていました。(スライドの色飛びがすごい)

  • Kotlinの歴史
    • 2011/07に発表
    • マイルストーン形式で小出しリリース
    • 2016/02にv1.0がリリース
    • coroutineはv1.1から登場
  • 日本Kotlinユーザーグループ
    • JKUG
    • 勉強会やSlackチャンネルを運用
  • 意外とサーバーサイドKotlinの導入事例は多い
  • Kotlinを知る
    • 「Kotlinを愛でる」は「Embracing Kotlin」の訳
    • Kotlinの哲学
      • 実用主義
      • 簡潔
      • 安全
      • 相互運用性
  • Kotlinの公式チュートリアル Kotlin Koans
  • Kotlin Guides
    • スタイルガイドの確認にお世話になるところ
  • KotlinのWebフレームワーク Ktor

感想

Kotlinの歴史は、最近Androidプラットフォームの公式言語になった程度だったのですが、v1.0は2016年だという驚きがありました。

Kotlin KoansやGuidesなど、Kotlin入門向けの内容だと思いました。また、Kotlinコミュニティの雰囲気もなんとなく感じれた気がします!

 

Kotlin で改善する Android アプリの品質


KotlinはJVM言語なのでJavaとよく比較されるが、なんとなくKotlinの方がいいと言ってるけど具体的にこういう点が優れているよねというお話

  • Androidアプリ品質とは
    • 速い
    • 落ちない
    • 使いやすい
  • 品質とは何か
    • 外的品質要因
      • スピード、使いやすさなどユーザーが認識できるもの
    • 内的品質要因
      • モジュール性、読みやすさなど、外的品質要因以外
  • Effective Javaの多くの項目が言語仕様で対応している
  • Kotlinを使用することで「明瞭で、正しく、再利用可能で、強固で柔軟性があり、保守可能なプログラムを書く」エッセンスが自然と取り入れられる

感想

具体的にKotlinがどういった点でJavaより優れているか知ることができたのがよかったです。スライドを見てもらうと分かると思うのですが、Effective Javaの項目を一つ一つ丁寧に解説されていたのも勉強になりました。

Kotlinアプリのリファクタリングポイント

  • Gradle Kotlin DSL
    • Groovyよく分からない。Kotlinで書きたい。
    • 知っている言語で書くことによってメンテナンス性が向上する
  • 重複した処理
    • 拡張関数が便利 <= わかる
      • 公式が使いそうな命名はしない
    • 乱用には注意
  • Collection
    • Listはimutableとは言い切れない
    • 2つのリストを同時に使い場合は .zip
    • 変換 .mapNotNull
    • N個づつに分割 .withIndex, groupBy
    • 否定はほとんど書き換え可能
  • スコープ関数
    • 処理をまとめることができる
    • ローカル変数が優先されるので注意
    • let/elvis は if/else と等価ではない
  • data class
    • ありえない状態を考慮したくない
      • sealed class, Either, Pair

感想

Kotlinのリファクタポイント、様々な気付きがありました。今まで、Listはイミュータブルだと思ってた。。(基本的にはそう)

data class も、簡単なモデルだと非常に便利ですが、巨大なモデルになると注意が必要になってきますね。全体的に、すぐ使える知見が詰まっていたと思います。

Kotlin linter

  • Linterの使い方や特徴
  • Linterの小スタムルールを作る
  • Linterとは怪しいとこにフラグを立てるプログラム
  • ktlint
    • gradle plugin(ktlint-gradle, kotlinter-gradle)
  • detekt
    • 高機能
    • configファイルで個々にルールの有効を変更可
    • visitは複数のメソッドがある
    • カスタムルールでフォーマットできる
  • android-lint
    • xml, java, kotlin をカバー
    • カスタムルールは googlesamples

感想

はじめて lint の世界を覗いた気がします。IDEなどでいつもオレンジ文字を出してくれるやつはこうやって解析して動いているんだなと知ることができました。

Kotlin コルーチンを理解しよう

  • サブルーチン: 親子
  • コルーチン: お互い対等
  • 一時停止可能な計算インスタンス
  • スレッドに似ているが特定のスレッドに束縛されない
  • 継続状況を容易にかける
  • 継続条件が増えても .await() なのでネストが深くならない
  • どうやって実現してるの?
    • Kotlinで動くならJavaで動くはず
    • コルーチンをステートマシーンにする
    • 中断と再開を状態遷移と見立てる
    • suspend修飾子: コンパイル時に自動的に継続オブジェクト引数が増える
    • suspendにはいくつか拡張関数がある
    • コルーチンビルダー: launch, asyncとか
    • 実行スレッドをコントロールできる
    • launch関数
    • 結果を持たない
    • 開始の開始も変えれる
    • 親jobを渡すことで一斉にcancelとかもできる
    • async 値を返す
    • 例外はlaunchの中でcatchする
    • await(), await() で並列化
    • リトライ: repeat(3) { return@repeat }
  • android-coroutines
    • onActivityResult, PermissionRequest とかあるよ

感想

Kotlin coroutines はよく使っているのですが、イメージとして「謎技術でいい感じにしてくれるやつ」としか思っていなかった。KotlinはJVM言語だからJavaでも書けるよね というアプローチはとてもわかり易かった!Kotlin coroutines は「ステートマシーンの考え方で状態遷移させてるんだよ」って言えるようになりました。

ピンポイントな技術的な話で非常に面白かった。

How to Kontribute (v4 JP)

スライド

こちらはコントリビュートの具体的な手順の説明だったので要約を見るよりスライド↑を見たほうが分かりやすいと思います。(なので要約はナイデス)

感想

発表のプロだと思わせるようなプレゼンでした。(どうすればあんなスムーズに進めれるんだ…)個人的には、初心者から始めやすいチケットが紹介されていたのが知見としてありました。JDKのバージョン4つもいるんですね…

まとめ

こういった技術カンファレンスに参加するのは初めてだったのでとても勉強になりました!特に、コルーチンの話は本当によかった。趣味やインターンでKotlin好きと言えるレベルで書いてはいるのですが、まだまだ知らないことも多いのだと感じることができました。

積極的にKotlinコミュニティに関わっていきたいですね!