Mi in progress

研究者ではなく、エンジニアになることを決意した人のブログ。

Kotlin Fest 2018で学んだこと・気づき・自分で調べてみたこと

概要

Kotlin Fest 2018に行ってきました。
今日のブログ記事は、そこで見聞きして学んだこと・気づき・自分で調べてみたことをまとめたものです。

オープニングセッション by 長澤太郎さん

見聞きして学んだこと

Kotlinの歴史
  • 2011年7月 発表
  • 2012年2月 実装公開
  • 2016年2月 バージョン1.0リリース
  • 2017年3月 バージョン1.1リリース
  • 2017年11月 バージョン1.2リリース
Kotlinのリリーススタイル
Kotlinのコミュニティについて
  • JKUG
    • 2013年7月に創立
    • 活動目的
      • 勉強会の企画・運営・支援
      • Slackの運営
      • 助走読本(無料配布しているらしいので後でチェック)
  • KotlinConf
  • OSS活動
    • KEEP (言語への提案やそれに関する議論)
    • コンパイラIDE、ライブラリへのコントリビュートが可能
    • コントリビュートするとKotlinブログに名前が載る

気づき

素敵なオープニングセッションだなと思った理由深掘り
  • デザインが綺麗
    • マスコットキャラクターがとにかくかわいい
      • 日本語でKotlinは「小鳥」と掛けられること・イメージカラーの黄色と青色を見事に合わせた最強のイラスト
  • ビジョンが明確「Kotlinを愛でる」
  • みんながHappyになれるルールを提示
    • 登壇者へたくさんリアクションしよう
    • パックマンルール | 会話に入ってこれるようにスペースを開ける
    • 行動規範

自分で調べてみたこと

2011年7月 発表に関する情報
KotlinConfに関する情報
JKUGに関する情報
OSS活動に関する情報

オープニングセッション by 藤原聖さん

見聞きして学んだこと

「Kotlinを愛でる」に隠された思い
  • Kotlin in Actionの第2部のタイトル
  • 原著だとEmbracing Kotlin (Kotlinを抱きしめる)
  • 愛情を持って、より深く知るという意味
  • 翻訳の際に、抱きしめるより愛でるが適切という結論に
Kotlinの特徴
Kotlinの哲学
  • 実用主義
    • Javaの考え方がそのまま使える。新しい機能は既存のものを利用。学習が容易。
  • 簡潔
    • 読みやすさを重視。ボイラープレートは極力減らす。
  • 安全
    • 静的型付け。Null安全。スマートキャスト。
  • 相互運用性
    • JavaとKotlinの間は自由に行き来。ライブラリも既存のものをそのまま利用できる。
Kotlinを知るためのリソース

気づき

Kotlinの哲学に感激した
  • better Javaだけでなくrespect Javaも感じられる
    • まさに巨人の肩の上に立つの姿勢
    • respectな精神はユーザーフレンドリーにも繋がる
      • 新しいプロダクトを作るときに大事な姿勢だなと思った

自分で調べてみたこと

Kotlinを知るためのリソースに関する情報

Kotlinもう一歩 by 森洋之さん

スライド

見聞きして学んだこと

型(タイプ)とは
  • クラスと型は異なるもの
  • 型によって決まるもの
    • 変数や式のとりうる値の範囲
    • 行える演算や操作
<: という書き方
  • B <: A
    • AはBのスーパータイプ
    • BはAのサブタイプ
    • Aが期待される全ての箇所でBは使用可能
    • 例) Int <: Number
      • Int型はNumber型の範囲内
      • Number型はInt型の範囲内とは限らない (DoubleやLongかもしれないから)

Any

  • すべてのnull非許容型は、Anyのサブタイプである
    • Int <: Any, String <: Any はOK
    • String?はAnyのサブタイプではない

Nothing

  • Nothingは、あらゆる型のサブタイプである
    • Nothing <: Int, Nothing <: String?
    • どんな型が期待されている箇所であろうとNothingは使える

null許容型(Nullable)とnull非許容型(NonNull)

  • NonNullは、Nullable型のサブタイプである
    • String <: String?
      • String?が使えるところでStringは使える
      • Stringが使えるところでString?が使えるとは限らない

変位

  • B <: Aのときに、Foo<B>Foo<A>にどういう関係があるかを表すもの
  • invariant | 不変 <T>
    • サブタイプを引き継がない
    • B <: Aのときに、Foo<B><:Foo<A>でもなくFoo<A><:Foo<B>でもない
  • covariant | 共変 <out T>
    • サブタイプを引き継ぐ
    • B <: Aのとき、Foo<B><:Foo<A>
  • contravariant | 反変 <in T>
    • サブタイプが逆転する
    • B <: Aのとき、Foo<A><:Foo<B>
  • 変位アノテーションとしてinとoutがある

out修飾子

  • valしか使えない
  • getメソッドのみ
  • 戻り値にしか使えない

in修飾子

  • setメソッドのみ
  • 引数にしか使われない

気づき

理解できたこと
  • <:
  • Any
  • Nothing
  • null許容型(Nullable)とnull非許容型(NonNull)の関係性
ちょっとだけ理解できたこと
  • 変位
  • out修飾子
  • in修飾子

自分で調べてみたこと

Genericsに対する理解不足補填

How to Test Server-side Kotlin by 鈴木健太さん、前原秀徳さん

スライド

見聞きして学んだこと

テスティングフレームワーク選定基準
  • 自分たちが使用するwebアプリケーションフレームワークとの相性
    • spring-boot-starter-testのデフォルトがJUnit4だったのでそれを利用
  • IDEとの相性
    • KotlinTest 3.1.9では、クラス毎のテスト実行はできるがメソッド毎のテスト実行はできない
Kotlinならではのつまづきポイント
  • Kotlinのクラス/メソッドはデフォルトでfinal
  • Null / NonNollが厳密
    • nullを返すようなJavaのメソッドがあるとランタイムエラーになることがある | 例) Mockito.any()
    • DB上Nullを取りうるカラムの値をNot Nullプロパティにマッピングするようなコードがあると簡単に実行時例外になる
自作ツール作成時のモチベーション
  • Factlin
    • DbSetupのシンタックスは平易とはいえ、カラムの多いテーブルに対するセットアップコードを書くのは大変
  • Kotlin Fill Class
    • 大量のプロパティを持つクラスのコンストラクタを呼び出して初期化するのは大変
  • Kotlinの用のツールはまだまだ少ない印象なので今がチャンス!

気づき

  • テストをするにあたって、様々なツールが存在することを知った
  • 技術選定の際には、一緒に使うツール群との相性も大事であることに気づけた
  • 「大変だな」と思ったらそれはツール作りのチャンス!

自分で調べてみたこと

紹介されていたテスティングフレームワーク
紹介されていたアサーションライブラリ
紹介されていたモックライブラリ
紹介されていたDBセットアップライブラリ
紹介されていた自作ライブラリ

Kotlin linter by 釘宮愼之介さん

スライド

見聞きして学んだこと

Kotlin用のlint3種とその特徴
  • ktlint
    • formatをかけることができる(要実装)
  • detekt
    • lintの修正にかかる時間や複雑度も表示される
  • android-lint
    • 型を見ることができる
カスタムルールの作り方
  • Abstract Syntax Tree(AST)
  • PSI Viewerを使おう
    • PSI = Project Structure Interface
    • これを使うとnodeが持っているプロパティがわかるので、正しいlintを作る手立てに

気づき

自分で調べてみたこと

Kotlin コルーチンを理解しよう by 八木俊広さん

スライド

見聞きして学んだこと

コルーチンとはなにか
  • 一時停止可能な計算のインスタンス
  • スレッドに似ているが特定のスレッドに束縛されない
  • FutureやPromissのように値を返す場合がある
  • 継続状況を持つプログラムが容易に記述できる
Kotlinはどのようにコルーチンを実現しているのか
  • コルーチンをステートマシンに変換している
    • 中断と再開を状態遷移と見立てる
    • 再開に必要な情報をステートマシン内にキャプチャする
    • 内部状態を変化させながら実行する
  • ステートマシン変換のためにsuspend修飾子と継続を導入
  • 継続インターセプターにより、実行のスレッドを限定しない
コルーチンの基本的な使い方
  • Kotlin 1.1から登場
  • 各種機能はライブラリで提供
  • 1.3でstableになる予定
  • coreライブラリが提供するコルーチンビルダー
    • launch関数
      • 結果を持たないコルーチンを作成するコルーチンビルダー関数
    • async関数
      • 結果を持つコルーチンを作成するコルーチンビルダー関数

気づき

自分で調べてみたこと

How to Kontribute (v4 JP) by 磯貝佳典さん

スライド

photos.google.com

見聞きして学んだこと

コミュニケーション
  • Slack
    • Kotlinlang
  • YouTrack
    • "up-for-grabs"
      • 外部のコントリビューターさんよろしくおねがいします!のタグ
  • GitHub
    • プルリクを出すためだけの場
    • コミュニケーションの場ではない
    • YouTrackでコミュニケーションすること
おすすめのコントリビュート方法
  • Update README
  • Writing Documentation / Comment
  • おすすめはKT-20357
    • サンプルコードのないメソッドにサンプルコードを書く
  • Inspection
    • PSIViewerを使う
    • PSIElementVisitor

気づき

  • コントリビュートしたい(真顔)
  • PSIViewerはlintだけでなくInspectionを作るのにも便利
自分で調べてみたこと

総括

f:id:mi_progress_oOo:20180826230158j:plain

たくさん愛でました

愛でるだけでなく、大きな夢もできました。
Kotlinを書けるようになってきたら、このOSSにコントリビュートするという夢です。
github.com
大好きなRustにKotlinで貢献できるという私得OSSです。
たくさんコーディングして夢を実現させます😊