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
- 2017年11月にサンフランシスコで開催
- 今年はアムステルダムで開催
- OSS活動
気づき
素敵なオープニングセッションだなと思った理由深掘り
- デザインが綺麗
- マスコットキャラクターがとにかくかわいい
- 日本語でKotlinは「小鳥」と掛けられること・イメージカラーの黄色と青色を見事に合わせた最強のイラスト
- マスコットキャラクターがとにかくかわいい
- ビジョンが明確「Kotlinを愛でる」
- みんながHappyになれるルールを提示
- 登壇者へたくさんリアクションしよう
- パックマンルール | 会話に入ってこれるようにスペースを開ける
- 行動規範
自分で調べてみたこと
2011年7月 発表に関する情報
- JVM Language Summit 2011で初お披露目
- ブログにも投稿されてました
KotlinConfに関する情報
JKUGに関する情報
OSS活動に関する情報
オープニングセッション by 藤原聖さん
見聞きして学んだこと
「Kotlinを愛でる」に隠された思い
- Kotlin in Actionの第2部のタイトル
- 原著だとEmbracing Kotlin (Kotlinを抱きしめる)
- 愛情を持って、より深く知るという意味
- 翻訳の際に、抱きしめるより愛でるが適切という結論に
Kotlinの特徴
- マルチプラットフォーム(Andoroid/サーバサイド/Native/JS)
- 静的型付き言語
- 関数型とオブジェクト指向
- オープンソース
Kotlinの哲学
- 実用主義
- Javaの考え方がそのまま使える。新しい機能は既存のものを利用。学習が容易。
- 簡潔
- 読みやすさを重視。ボイラープレートは極力減らす。
- 安全
- 静的型付け。Null安全。スマートキャスト。
- 相互運用性
- JavaとKotlinの間は自由に行き来。ライブラリも既存のものをそのまま利用できる。
Kotlinを知るためのリソース
- 公式リファレンス
- Kotlin Koans
- チュートリアル
- 著者はKotlin in Actionの著者
- Kotlin Guides (Androidデベロッパー向け)
- Kotlin in Action
気づき
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?が使えるとは限らない
- 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が厳密
自作ツール作成時のモチベーション
- Factlin
- DbSetupのシンタックスは平易とはいえ、カラムの多いテーブルに対するセットアップコードを書くのは大変
- Kotlin Fill Class
- 大量のプロパティを持つクラスのコンストラクタを呼び出して初期化するのは大変
- Kotlinの用のツールはまだまだ少ない印象なので今がチャンス!
気づき
- テストをするにあたって、様々なツールが存在することを知った
- 技術選定の際には、一緒に使うツール群との相性も大事であることに気づけた
- 「大変だな」と思ったらそれはツール作りのチャンス!
自分で調べてみたこと
紹介されていたテスティングフレームワーク
紹介されていたアサーションライブラリ
紹介されていたモックライブラリ
紹介されていたDBセットアップライブラリ
紹介されていた自作ライブラリ
- factlin
- DBスキーマからKotlinのテストフィクスチャを自動生成するgradleプラグインを作った - maeharinの日記
- Kotlin Fill Class
- Kotlinでコンストラクタをシュッと書くためにIntellijのプラグインを作った - suusan2号の戯れ
Kotlin linter by 釘宮愼之介さん
スライド
見聞きして学んだこと
Kotlin用のlint3種とその特徴
- ktlint
- formatをかけることができる(要実装)
- detekt
- lintの修正にかかる時間や複雑度も表示される
- android-lint
- 型を見ることができる
カスタムルールの作り方
- Abstract Syntax Tree(AST)
- コンパイラはツリー構造でコードを解釈している
- PSI Viewerを使おう
- PSI = Project Structure Interface
- これを使うとnodeが持っているプロパティがわかるので、正しいlintを作る手立てに
気づき
- ASTについて先日Rustの勉強会で学んだので、学びと学びが繋がって嬉しかった
自分で調べてみたこと
Kotlin コルーチンを理解しよう by 八木俊広さん
スライド
見聞きして学んだこと
コルーチンとはなにか
- 一時停止可能な計算のインスタンス
- スレッドに似ているが特定のスレッドに束縛されない
- FutureやPromissのように値を返す場合がある
- 継続状況を持つプログラムが容易に記述できる
Kotlinはどのようにコルーチンを実現しているのか
- コルーチンをステートマシンに変換している
- 中断と再開を状態遷移と見立てる
- 再開に必要な情報をステートマシン内にキャプチャする
- 内部状態を変化させながら実行する
- ステートマシン変換のためにsuspend修飾子と継続を導入
- 継続インターセプターにより、実行のスレッドを限定しない
コルーチンの基本的な使い方
- Kotlin 1.1から登場
- 各種機能はライブラリで提供
- 1.3でstableになる予定
- coreライブラリが提供するコルーチンビルダー
- launch関数
- 結果を持たないコルーチンを作成するコルーチンビルダー関数
- async関数
- 結果を持つコルーチンを作成するコルーチンビルダー関数
- launch関数
気づき
- コルーチンがどういうものか理解できた
- しかし、コルーチンの実現方法の理解がまだ追いついていない...
- Rustもasync/awaitが熱いので、理解が深まって嬉しかった
自分で調べてみたこと
- kotlinx-coroutines
- 実例によるkotlinx.coroutinesの手引き(日本語訳) - Qiita
- Kotlinの新しい非同期処理 - QCon SFでのRoman Elizarov氏の講演より
- KotlinConf 2017 - Introduction to Coroutines by Roman Elizarov - YouTube
How to Kontribute (v4 JP) by 磯貝佳典さん
スライド
見聞きして学んだこと
コミュニケーション
- Slack
- Kotlinlang
- YouTrack
- "up-for-grabs"
- 外部のコントリビューターさんよろしくおねがいします!のタグ
- "up-for-grabs"
- GitHub
- プルリクを出すためだけの場
- コミュニケーションの場ではない
- YouTrackでコミュニケーションすること
おすすめのコントリビュート方法
- Update README
- Writing Documentation / Comment
- おすすめはKT-20357
- サンプルコードのないメソッドにサンプルコードを書く
- Inspection
- PSIViewerを使う
- PSIElementVisitor
気づき
- コントリビュートしたい(真顔)
- PSIViewerはlintだけでなくInspectionを作るのにも便利
自分で調べてみたこと
総括
たくさん愛でました
愛でるだけでなく、大きな夢もできました。
Kotlinを書けるようになってきたら、このOSSにコントリビュートするという夢です。
github.com
大好きなRustにKotlinで貢献できるという私得OSSです。
たくさんコーディングして夢を実現させます😊