【イベントレポート】【LT発表】夏のKotlin LT祭

どうもukaznilです。
最近は早寝早起きを実践していて,だいたい11時くらいには床につくようにしています。そしたら朝5時くらいには起きられるので1日が長い上に朝作業もできるのでいいライフハックになっています。

さて,報告が遅くなってしまいましたが,
先日(2017/8/22)に以下のイベントに参加&LT発表してきました。
発表者の方のスライドを見ながら,イベントレポートしたいと思います。

イベント概要

該当イベントはこちら。

connpass

夏と言えばLT大会! ということで、まったりビール片手にLTしたり聞いたりしましょう! (ソフトドリンクのご用意もありま…

今回のイベントも,「日本でKotlinと言えば」なたろうさんも所属しているJKUG(Japan Kotlin User Group)の主催です。
また,本勉強会のLTは「トラディショナル・ルール」で行われます。しっかり話そうとすると5分ってあっという間なので,そのあたりの案配が難しい注文です。
[aside type=”normal”]トラディショナル・ルールとは
発表時間は5分厳守! タイムアウトで強制終了です! 熱い想いを5分間の発表に詰め込んでください。
[/aside] 会場は渋谷はヒカリエにあるディー・エヌ・エーさんのカフェ。ご厚意によりアルコール&軽食も振る舞われました。

それではスライドを順番に見ていきましょうー。

イベント詳細

○○ by Kenji Otsukaさん

<資料がアップロードされ次第追記します>

“Hello Kotlin”の次におさえたいKotlinの勘所 by Kenichi Kambaraさん

国内外で講演もしているすごい方。今回の内容のターゲットは「Kotlin初心者」ですね。
Kotlinブームが到来して久しいですが,こうして未だに勉強会で「初心者向け」のLTがあるのは,実際に初心者の人にとっては(そしてKotlin業界においても)いいことだなぁと感じるところであります。
LTっていうと,ついつい「ハックしてみたぜ(ニッチだけどな)」みたいな話をしがちなので,人材ファーストなエンジニア界隈ならではの粋な計らいですね。

“Convert Java File to Kotlin File”の甘い罠 by


私です。

動画も上げておきますね。

よく「JavaのコードをAndroid Studio(もしくはIntelliJ IDEA)に貼りつけると,Kotlinコードに自動変換してくれるよ」という売り文句があるのですが,この変換は完璧ではないよ,というニッチな話。コードも載せてるので詳しくはスライドをご覧ください。
5分間のトラディショナル・ルールということで,オーバーしないように早口になりすぎた嫌いがあります。このあたりの時間感覚も徐々に付けていかないといけませんね。
自分で言うのもなんですが,多少ウケたのでLTしてよかったです。

8 Kotlin Pop Quizzes by hydrakecatさん


スーパー良LT。Kotlinの言語仕様に関する(変態チックな)クイズを順番に解いていきます。
「関数とメソッドは違うぞ」とか,non local returnとか,宣言時の予約語とか,循環参照とか,nullとNothingの胸熱な関係性とか,初期化にまつわる微妙なタイミングとか,nullable Intと数値のキャッシュとか,小数値のrangeとか……,まぁ盛り沢山な内容です。
正直私はほとんどわかりませんでした笑。
Kotlinの言語仕様,実はほとんど読んだことがないので時間を見つけてチラッと見てみたいと思います。
すごく面白かったです。

既存プロダクトのKotlin移行でハマったところ by nakamuuuさん


既にリリース済みのJavaプロダクトを徐々にKotlin化していく際のノウハウ共有LT。
巷で持ち上げられているように,「Java→Kotlinは幸せしかない」ってわけじゃないんだよ,というメッセージが込められている感情豊かなLTです。
JavaとKotlinを混在させるとそれだけプラットフォーム型周りでnullリスクもありますし,そもそもKotlinっぽい書き方ができるようになるまでも時間かかりますしね。
実際の運用をしている方からすれば,死活問題でしょう。この辺りの話は汎用的な解決案があるわけじゃないから難しい。
あ,ひとつ言えるのは,Kotlinと併用するならJavaのアノテーションは必須っていうことですね。これは超大事。

Annotations specific to the Java platform by tebasakiさん


内容的には前のスライドと少し被りますが,アノテーションについての話(ただしこちらはKotlinに記載するアノテーションですが)。
実際にJavaとKotlinの相互運用をすることになったらこのあたりの実施は必須だと思うんですが,私の場合は幸か不幸か趣味デベロッパーなのであんまりお世話になることが少ないです。
@JVMStatic@Thowsくらいは聴いたことがありましたが,ほかのアノテーション(e.g., @JVMOverloads, @JVMField)はあまり聞き覚えがありません。
運用者向けの価値あるLT資料ですねー!

○○ by sekitobaさん

<資料がアップロードされ次第追記します>

KotlinJSって正直どうなん by kikuchyさん

KotlinでもJavaScriptが書けるって,知ってた?
正直あまり積極的に採用する理由はなさそうなんですが,Kotlinはなんと言っても可愛いですからね……。
22ページにKotlinJSのpros/consがまとまっています。

  • Pros
    • 個人開発にもチーム開発にも対応できるKotlin文法
  • Cons
    • nodeアプリ作るなら
    • 使えるライブラリ抱負だしJavaの方がいい
    • Webのフロント書くなら
    • すでに型定義ファイルたくさんあるしnpmとの統合も簡単だしTypeScriptの方がいい

なるほど……。

遅延評価lazyの落とし穴の話 by numa08さん

Kotlinの面白い言語仕様・delegation(委譲プロパティ)を使った「遅延評価」に関するLT。
特にAndroidだとライフサイクルが絡むので使い所が難しいですよね……。
by lazyと似たような処理にlateinitもあるのですが,自分の中ではあまり意識して使い分けできてるとは言えませんね。このあたり,1回とことん調べてみるのもいいかもです。いい話を聴けました。

ただ,スライド中にもありますが,

  • 大体の場合,lateinitで事足りる

だそうです。要件証。

apply()要らなくない? by wm3さん


なかなか煽りティの高いタイトルで会場がどよめきましたがw,Kotlinの特徴として挙げられることの多いスコープ関数・今回は特に皆大好きapplyについての挑戦的な発表です。
詳しくは資料を見ていただきたいですが,話の趣旨としては「apply使うよりもalso使って書いた方が良くない?」という話。
例えば以下のような場合です。

class Point { var x = 0; var y = 0 }

var y = 0
var p = Point().apply {
  x = 3
  y = 4
}

これだとyがどっちを指すか分からなくない? ということですね。代替案として同じくスコープ関数のalsoを使うと以下のようになります。

class Point { var x = 0; var y = 0 }

var y = 0
var p = Point().also {
  it.x = 3
  it.y = 4
}

alsoを使うとレシーバとしてitを書く必要があるので分かりやすいぞ! という主張です。
この辺りは個人の宗教にも絡む問題ですし深遠なテーマですが,戦争を覚悟で言えばapplyの方が好きですね。以下のように書くと,applyでも明示的にレシーバを記述できます。

class Point { var x = 0; var y = 0 }

var y = 0
var p = Point().apply {
  this.x = 3
  this.y = 4
}

この場合thisは省略可能です(わかりやすいかは置いておいて)。レシーバの記載を強制するか暗黙的にしてエンジニアの良心に任せるか,という二択でしょうかね。
考えさせられる良いLTでした。

おわりに

半ば唐突に思い立った今回のLT発表ですが,知り合いも出来たしいい経験になりました。
8月に2回もLTさせてもらったのは幸せでしたね。心理的ハードルは結構下がったと思います。
Android以外の,あまり自信の無い分野で話せるかというとまた別の話……(心理的障壁というよりも技術的障害)。まあいつまでもAndroidだけの人間ではいられないので,積極的に他の分野も勉強していかないといけませんよね。

# 最近はAndroid勉強会と並行して,インフラ周りの勉強会にちょくちょく出るようになりました。わけわからなさすぎて死んでますが。