Kotlin Fest 2018参加レポート

Kotlin Fest2018参加レポート

福岡研究所の渡辺(しかじろう @shikajiro)です。Kotlinのおっきなイベントが東京で開催されるということで福岡から飛んで✈いきました。

福岡でもFukuoka.ktという名前で過去に2回ほどイベントを主催しており、KotlinFest主催の太郎さんに登壇していただいたこともありました。僕自身3か月ほどKotlinから離れてましたが、直近の技術情報などをフォローできたらいいなと思い参加しました。

KotlinFestとは

2018/08/25(土)に開催された有志による日本最大のKotlinイベントです。

kotlin.connpass.com

「Kotlinを愛でる」をビジョンに、Kotlinに関する知見の共有と、Kotlinファンの交流の場を提供する技術カンファレンスです。

とあるように、Kotlinを愛するKotlinユーザーグループのメンバーにより運営されています。

参加者プレゼント

すごい作りのしっかりしたトートバッグをもらいました! まじ嬉しい!

企業ブース

イベントはトークセッションだけでなく企業ブースの参加もありました。CyberAgentさんによるKotlinPuzzlersが人気で、「ぱっと見では間違えてしまいそうなKotlinコード」がどのように動くのかを当てる内容です。 (ぱっと見でわからないコードってそもそも問題だよね) 僕も挑戦しましたがまんまと間違えたので早々に去りました。

Yahooさんのブースではくじ引き(外れました)とモブプロをやっていました。群衆(モブ)プログラミング(プロ)は皆に見せながらプログラミングすることで、外野と「これはこう書くよね」とコミュニケーションを取ることでコードの質を上げていくものです。

オープニング

オープニングセッションでは主催の長澤太郎さん(以下太郎さん)によるKotlinの歴史やこれからのお話がありました。 Kotlinを愛でるが今回のテーマ。Kotlin in Actionの第二部のタイトルが元ネタだそうです。

Kotlinの歴史を振り返ると、発表から1.0まで5年ほど時間がかかりましたが、それからは怒涛の勢いでリリースされています。AndroidやSpring公式になることで利用ユーザーもどんどん増えていっています。

  1. 2011/7 kotlin発表
  2. 2016/2 1.0リリース
  3. 1.1コルーチン
  4. 1.2マルチプラットフォーム
  5. 2016/5 gradle
  6. 2017/4 native
  7. 2017/5 Android公式言語に
  8. 2017/9 Spring Framework5公式に
  9. 1.3コルーチンとインラインクラス

2013/7にはJapan Kotlin User Group(JKUG)も発足しており、勉強会、Slack、読本など精力的に活動しています。

サンフランシスコで開催されたKotlinConf 2017は1200人もの参加があり、世界中の開発者からのKotlinへの期待の高さが伺えます。 プレゼンでは以下のようにAndroidばかりではなく、サーバー用途でKotlinを使ってもらおうとしているようです。

  • Server 30%
  • Android 24%
  • Native 18%

次回のKotlinConf 2018は2018/10にアムステルダムで開催。 3days、61speakerになり、規模が一気に拡大しています。 (僕も行きたいと思ってたけどSold Outでした)

  • Ktor
  • game
  • graphQL
  • GCP

など、Kotlinを色んな所で色んな使い方をする発表がたくさんあるようです(行きたかった)。

話は戻り、KotlinFestは多くの協賛企業に支えられており、積極的にKotlinを採用していっているようです。スポンサーは募集してから即日で埋まったみたいです。

企業名 導入内容
BIZREACH Server
CA Android
LINE Android, Server, Clova
M3 Android, Server
mercari Android
mixi Android
sansan Android
YAHOO Android, Server
dmm ほか

藤原さんからはKotlinの現状のまとめのお話でした。

Kotlinの特徴は以下の通り。

  • マルチプラットフォーム
  • 型言語
  • 関数型、オブジェクト指向
  • OSS

そして、Kotlinには哲学があるとのこと。

  • 実用主義
    • Javaの考え方のまま。学習が容易。
  • 完結
    • 読みやすい。ボイラープレートは少ない
  • 安全
    • 静的型付け、NULL安全、スマートキャスト
  • 相互運用性
    • Javaと仲良し

現在の日本語本は代表的なところで以下があり、入門と中級をカバーしています。

  • Kotlin in Action
  • 赤べこ、黒べこ

みんなでKotlinを愛でましょうということで、KotlinFestはスタートしました。

お昼ごはん

オープニングセッションが終わったらいきなりランチタイムです。KontributorであるshirajiさんがTwitterでぼっち飯を回避するランチの相手を募集していたので、ご一緒させていただきました。

美味しいお肉を皆で食べました。美味しかったです。

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

Android界の著名人であるあんざいゆきさんに拠るアプリ品質のお話です。 JavaのソースをKotlinに移行するとして、移行の難しさ、書き直しコスト、リグレッションなどの問題が出てくるけど、「Kotlin化にはそれを上回る効果あるのか?」を考える内容です。

まず、品質について、[オブジェクト指向入門~原則・コンセプト~](https://www.amazon.co.jp/dp/4798111112) に「品質とは何か」がまとめられているので、この発表ではこれを基準とされていました。

  • 外的品質要因
    • ユーザーが認識
    • スピード、つかいやすさ
    • 要因
      • 正確さ
      • 頑丈さ
      • 拡張性
      • 再利用性
  • 内的品質要因
    • それ以外
    • モジュール性、読みやすさ

JavaからKotlinにソースを書き直しても、アプリの使いやすさは変わりません。しかし、内的品質要因は外的品質要因に影響するので、アプリを使いやすくするときに内的品質を向上していると良い影響が出ると説明されています。

Javaの実装パターンをまとめた名著であるEffective JavaとKotlinの実装をいくつか説明していくことで、Kotlin化の正当性を説明されています。

builder pattern

コンストラクタの引数を増やすのではなく、Builder Patternを使うようにするのがJavaでのテクニックでした。

※このサンプルソースは僕が考えたものです。

コンストラクタの場合 第1引数と第2引数が同じStringのため、2つを間違えてしまう可能性があります。これがbuilder patternを使うと分かりやすくなります。

User user = new User("shikajiro", "fukuoka-city", Gender.MAN);

builder patternの場合。

User user = User.builder()
    .name("shikajiro")
    .gender(Gender.MAN)
    .address("fukuoka-city")
    .build();

nameと"shikajiro"が対になるので分かりやすいですね。

builder patternの欠点は、このための実装をUserクラスにする手間がかかることです。 Kotlinだとこのbuilder patternは名前付き引数でできます。

val user = User(name="shikajiro",
                gender=Gender.MAN,
                address="fukuoka-city"

ただし、Kotlinの名前付き引数は1つの引数に複数個指定とかできないので、場合によってはbuilderの方が良い時もあるとのことでした。

など、他に数パターン、Effective Javaに書いてある問題がKotlinでは解消される事の説明がありました。 これはつまり、Kotlin化を進めることでコードの内的品質が向上し、結果的にはユーザーの使いやすさに繋がるということです。

最後に「明瞭で、正しく、再利用可能で、頑丈で、柔軟性があり、保守可能なプログラムが書ける」 と締めくくられていました。

How to Test Server-side Kotlin

エムスリー株式会社の鈴木さん、前原さんのお二方に拠るテスト実装の実体験です。 Androidアプリはテスト実装の経験があるのですが、サーバーはあまり触ってなかったので聞かせていただきました。

基本的に標準である、JUnit4, Mockito, AssertJを選択したとのことです。テストライブラリはたくさん出てきているそうですが、まずは標準であることの信頼を選んだようです(変なところハマると辛いですもんね…)。 選択するライブラリが沢山あるので、開発チームに合うものを選定するのが大事になりそうです。

歴史的な経緯によりDBが肥大化しているため、実装と切り離す必要があり、 いきなり全てをテストするのは困難なので、まずはアプリケーション層を主にテストしたそうです。 コンストラクタが肥大化したクラスのデータ作成が大変辛くなったので、IDEからテストコードを自動生成するものを作ったそうです。

Kotlinでもテストちゃんと書ける!ということで、サーバー実装をする際は積極的に使っていきたいです。

Kotlin linter

DMM釘宮さんによるLinter開発のお話です。 KotlinにはいくつかLinterがあるので、技術選定の材料にしてほしいので壇上に上がってくださったようです。

Linterは現在有名なものが3種類。

  • ktlint
  • detekt
  • android-lint

ktlint

linterをカスタマイズするにはASTを知る必要がある。 ASTはツリー構造。PsiViewerを使う事でASTをビューできるので、これを使いながら進めると良いとのこと。 (なんとなくAPI responseのパーサーを実装したときを思い出しました)

カスタムルールのformaterも作れるけど、実装する必要がある(lintルールとformatterが乖離するのはとても辛そう)

detekt

ktlintより高機能だが、フォーマット機能は途中からなくなったようです。カスタムルールでは作れるらしいです。

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

株式会社Lang-8八木さんによるコルーチンの解説です。

コルーチンの歴史を紐解くと、1963年にメルヴィンコンウェイがcobolコンパイラでコルーチンの概念を出したそうです。

コルーチンとは一時停止可能な計算インスタンスであり、スレッドに似ているけど、スレッドに束縛されないのが特徴です。継続状況を持つプログラムが容易に記述できます。Future Promiseみたいに値を返すことも可能です。

プレゼンでは、コルーチンがどのように実現しているかをKotlinから生成されたバイトコードを紐解いて探求していきます。 そこから、コルーチンはステートマシンで表現されていることがわかります。

詳しい説明はプレゼン資料を見ていただくとして、ここではサンプルソースを以下にまとめます。

var rootJob: Job = Job()
val job = launch(UI, parent = rootJob) {
  repeat(3) {
    try {
      //直列
      val hoge = async {}
      async { hoge.await() }.await()
      //並列
      async {}.await()
      async {}.await()
      return@launch
    } catch (e: CancellationException) {
    } catch (e: Exception) {
      if (souldRetry(e)) {
        return@repeat
      }
    }
  }
}
job.cancel()
rootJob.cancel()

他にも以下のライブラリがコルーチンに対応しているので、Androidでも使わない理由はないようです。

  • Retrofit
  • EventBus, Channel
    • gistに転がっているらしい
  • android-coroutines
    • onActivityResultをsuspend

How to Kontribute v4 JP

ランチをご一緒したUBieの磯貝さんによる、KotlinプロジェクトへのContributeの仕方の解説です。 磯貝さんはOSSであるKotlinにコントリビュートした日本人として有名になりました。

photos.google.com

KotlinはKotlinで書かれているため、Kotlinを愛している方にはもってこいです。Kotlin Pluginコントリビュータが多いので、決して難しいものばかりではないようです。 Kontribute手順は発表資料に委ねたいと思います。

僕自身、磯貝さんのブログに触発され、DroidKaigi2018のAndroidアプリへのContributeを決意しました。結構エグいIssueを辛うじてfixさせることができ、大きな自信へと繋がりました。 この記事を見ているみなさんも、もしContributeに興味がありましたら磯貝さんの記事をご一読ください!

クロージング

Kotlin Fest 2019は現時点では未定とのことです。もしやるなら次回はBigゲストを招待したいとのことでした。

懇親会

さぁ、ついに本番が始まりました。懇親会にも多くの参加者、発表者の方が参加し、Kotlin愛を語り合っていました。

スタッフの皆さん、本当にお疲れ様でした。

こうして、しかじろうのKotlinFestは幕を下ろしました(この後Android老人会の皆さんと二次会に行きました)。

引用

Top画像は https://kotlin.connpass.com/event/91666/より引用させていただきました

さいごに

スタートトゥデイテクノロジーズではKotlinを使ってアプリ・サーバーを開発するエンジニアをこれでもかというほど募集しております。

www.wantedly.com www.wantedly.com www.wantedly.com

福岡研究所でも機械学習などを使ってファッションを科学する研究者を募集しております。 www.wantedly.com

カテゴリー