【集まれKotlin好き!Kotlin愛好会 vol2】に行ってきました

集まれKotlin好き!Kotlin愛好会 vol2

https://love-kotlin.connpass.com/event/91710/

に行ってきたので、その時のレポート

談義: 「JavaからKotlinにコンバートする際にj2kコンバータをカスタマイズした話」by paraya3636さん

資料

以下、談義を聞きながらのメモ

Java から Kotlin に変換する際に苦労した点

通常、Android Studio で変換すると思う。このとき、j2k コンバータが使われている。

ただ、この j2k コンバータは問題がある。

それは、強制的にnon null 変換されること

これを調べてみると、

引数や戻りの型に non null のアノテーションがついてないと、

nulableな変換にしてくれない。

そのため、そのまま実行するとクラッシュしてしまう。

解決案1

目視で全部チェックする

解決案2

Kotlin 化して全部テストする

ただ、この2つの案だと、やる際に手作業で辛すぎる。

さらに考えて、

コンバータを改造すればいいのではないかと考えた。

Java から Kotlin に変換するツール「j2kコンバータ」をカスタマイズした話

ステップ

  1. Kotlin を build する環境を整える
  2. typeConverter.ktを編集
  3. チャイルド IDEA を実行
  4. コードをコンパイルする。

Kotlin の build 環境は長くなるので割愛。

資料のURLとかをみてね!

カスタムコンバータの使い心地は?

クラッシュの確率が激減した。

信頼感がupして、レビューを簡素にすることができた。



談義: 「Java で書かれた Android アプリを Kotlin で書き直すまでの話」by Ryutaro Miyashitaさん

資料

以下、談義を聞きながらのレポート

書き直す際に

最初は部分的に使えるところで使っていこうという形だった。

次に、既存の画面を書き換えてみた。

次に、新しい機能追加の際には Kotlin を使い始めた。

チーム内に Kotlin が浸透してきた。

Javaとつなぎこみたいときどうすればいいの?

Javaとの共存はもちろんできるが、このコードは Java から呼ぶとか Kotlin から呼ぶとか意識づけが必要。

Kotlin 側に、Java からアクセスさせるためにアノテーションをつけてあげたりする。

ここは Java からアクセスするんだねっていうのを意識する必要がない。

Java には Unit 型はないので、 Java 側に Unit を返すような実装をしなければいけない。

このように、Java 側に Kotlin の都合が侵食していったりする。

Kotlin の旨味を100%引き出したいとなると

Java と Kotlin がお互いに都合をお互いに考えなければいけなくなる。

いっそのこと、Kotlin に書き換えたほうがいいのでは?となり、

ただ、Kotlin の習熟度レベルはバラバラ。

なので、レビューをしたり、チャットでクイズを出したり、説明したりして、

理解を深めて行った。

結果、5.3万行くらいあった、コードが4.3万行くらいになった。

手作業でやりきったのはいい思い出。

10ヶ月で全部 Kotlin 化した。

その間に機能追加やリファクタリングもできた。

効果

可読性はあがった。

Null Pointer Exception の撲滅。ほぼ出会っていない。

最後に

既存のアプリも段階的に Kotlin 化して行けた。

中途半端に導入するぐらいであれば、全てを書き換えたい。

 → Java と Kotlin 間でそれぞれを意識する手間を省けた

他チームから見た、想定外の効果

 → iOS エンジニアや Scala のエンジニアが Kotlin のコードを読んで交流が生まれるようになった。



談義: 「低レベルな Kotolin 」by tomoya0x00さん

資料

以下、談義を聞きながらのメモ

Kotolin のbyte型の話。

符号なしで処理をしたいことがある。

kotlin の byte 型に 0x80 を突っ込むと

-128になってしまう。

そこで、

符号なしとして扱ったときの最大値が十分に表現できる型に変換する。

そして、マスクをする。

やり方は、

toInt()して、0xffでandをとる。

チェックサムの話

2の補数表現を考慮して実装をする。



談義: 「webエンジニアが 2ヶ月Kotlin(Android)開発して思ったこと」by achanさん

私の談義です。

資料

以下、概要

日頃はサーバーサイドを触っている

  • サーバーサイド
  • インフラ
  • Kotlin(Android)

ができると、一人でオンラインアプリが作れるようになる。

webもできてアプリもできるって人は少ないように感じる。

webの現場で「それ、アプリでできますよ」って言えるようになりたい。

Kotlin楽しい

これから始める人はぜひ実機デバッグで欲しい。

動いたときの感動がある。

型に厳密な言語は楽しい

IDEが叱ってくれる

型を書くのは頭の整理になる。

webだといろいろ複雑な要素が多いし、環境が違うこともあるが

Kotlinだと、同じ問題に当たっている人が同じ解決策で乗り切れることが多い。

Kotlinの世界を見て思ったこと

  • viewとロジックの分離が難しい
  • クライアントにインストールされている古いバージョンへの対応
  • 端末依存問題

まとめ

サーバーサイドを日頃触っているが、

Kotlinを触って新しい世界に触れるのは良い。



談義: Property Getterby scacheさん

資料



談義: 「完全に理解した気になる Kotlin Coroutines」by takahiromさん

資料

apiが多いが、基本的なところから理解したい。

coroutinesはスレッドの上で動く、動きは確認できる。

中断もできる。



談義: 「KotlinJs でも Coroutines」by Ryo Sakaguchiさん

資料

react wigh kotlinのインストールは簡単

npm で数コマンドたたくだけでできる!

【Kotlin Developers Meetup】に行ってきました

Kotlin Developers Meetup

https://kotlin.connpass.com/event/90679/

に行ってきたので、そのときのレポート

Creating DSLs in Kotlin

JetBrains社のHadi Hariri氏にKotlinについて講演してもらいました。

ただ、英語での講演だったので、全然聞き取れませんでした。。。


LT

LT1: FSM DSL in Kotlin

資料

https://speakerdeck.com/tomoya0x00/fsm-dsl-in-kotlin

Kotlinでtree探索をしようとした話。

私が不慣れなのと、内容の難易度が高くてついて行けませんでした。。。


LT2: Readable Code in Kotlin

資料

https://speakerdeck.com/kaonash/readable-code-in-kotlin

以下、LTを聴きながらのメモ

 

リーダブルコードの中で

「コードは理解しやすくなければならない」と書かれている。

 

理解しやすいコードは

簡潔なコードというわけではない。

短いコードは一見かっこいいかもしれないが、

理解がしずらい点もある。

 

どうやれば理解しやすいコードがかけるか?

1.  nullableのハンドリング

できるだけ早くスマートキャストをしてあげて、

nullなのかそうでないのかという状態を明示するようにする。

2. 型推論にあまりたよりすぎない。

型推論は便利。

ただ、あまり頼りすぎると、

この変数の型はなんなんだと分からなくなってしまう。

 

変数の型を確かめるために、コードをたくさん追わないと行けない。

だから、型推論できる場所でも型を書くようにしましょう。

ではどんなときに型を書くのか?

変数名で型を推測できるときは書かなくてもよいが、

そうでないときは書いたほうがいい。

 

また、letについてみんながどう思っているのかを知りたい。

letはわかりにくいので

runmapというネーミングに変えてあげたほうが

英語が苦手な見としては、わかりやすい。


LT3: multiplatform kotlin?

資料

https://speakerdeck.com/panini/kotlin-multiplatform

以下、LTを聴きながらのメモ

 

登壇者のPaniniさんはKotlinエンジニアなのだが

React Nativeも最近書いている。

React Nativeの良い点としては、

ファイルをセーブしたら、そのまま実行してくれるので便利。

 

ただ、jsよりもkotlin書きたい。。。。

そんなときに

Kotlin.js

という、kotlinをjsに変換してくれる神と出会った。

 

Kotlin を React Nativeで書くためには、

一行、ライブラリをimportする文を書くだけでできる。便利。

 

Hot Reload

jsはコンパイルされないから、すぐに実行できる。

Kotlinでもできないのかな?と思って調べたら、

gradle continuous build

という神の機能がある。

これを使ったら、ファイルの変化を検知してHot Reloadしてくれる。

コンパイルを挟むので少し時間がかかるけど、早いので良い。


LT4:spring fu on graalVM

以下、LTを聴きながらのメモ

 

登壇者の型は、Kotlin イン アクションとか、あかべこ本を書いた方。

graalVM

というのがある。

jvm言語はもちろん、それ以外の言語もこれの上で走る。

AOT compile

Javaや通常、実行時にバイトコードがマシンコードになるが、

これを使うことで、直接バイナリを得ることができる。

ただ、これはlinuxでしか動かない。

なので、macの上で docker  とか使って動かそう。

spring boot も動かせるよ!

ただ、jarファイルを食わせたら、エラーになってしまう。。。

ここで登場するのが

Spring Fu

kotlinでかけるよ!

これをgradlewで動かすと、もちろん動く。

そして、、、jarファイルを食わせると、、、同じようなエラーになってしまう。。。

告知!

kotolin fes 2018やるよ!

品川でやるよ!みんなきてね!


LT5: create minicraft mod with kotlin

以下、 LTを聴きながらのメモ

(英語でのLTだったので、メモが間違っている部分があるかもです。。)

 

登壇者の方は、Y.A.M の 雑記帳を書いている人。(いつもお世話になってます!!)

mine craft をやっているよ。

登壇者の方の息子さんもmine craftをやっているよ。私のPCでね!笑

mine craft modというものがあるよ

modというのは

オブジェクトのようなもので、

ブロックを追加したり、人のステータスを変更できたりするよ

forgeというもので、modカスタマイズできるよ。

modはInteljとgradleで作れるよ!

そしてjavaを使うんだけど、

今回kotlinでやってみたよ!

今回のゴールは私の息子がmodを作ることだ

ただ、

・子供がタイピングしたりエラーを解消したりいろんなファイルを触ったりするのはとても難しい

・重要なのは、早く、遊びながら作れること

結果として

modは子供がプログラミングに興味を持つのにいいきっかけになった。

そして、早くmodを作ることにも成功した!


Q & A

Hadi Hariri氏に直接質問をできるQ & Aが用意されました。

ただ、質問と回答が英語だったので聞き取れず。。。

英語勉強しよう。

【集まれKotlin好き!Kotlin愛好会 vol1】に行ってきました

【集まれKotlin好き!Kotlin愛好会 vol1】

https://love-kotlin.connpass.com/event/86390/

に行ってきたので、そのときのレポート

談義: NaotoTakehataさん「サーバーサイドKotlinとの邂逅」

以下、談義を聴きながらのメモ

kotlin導入のきっかけ

Kotlin は Android のイメージがまだ強いが、なぜサーバーサイドで使おうと思ったか?

従来、 Java(spring) で開発をしていた。

開発メンバーから新しい言語にチャレンジしたいという要望があった。

リスクと葛藤

  • Java の資産がいっぱいある
  • 作り直す時間
  • 導入後に廃れたらどうしよう
  • Kotlin できる人材が少ない

kotlinのいいところ

Java からの移行がしやすい。

  • Kotlin で Spring の使用が可能
  • 過去に使っていたライブラリの活用も可能
  • 部分的にjavaを残すことも可能
  • コードの変換が可能

Java to Kotlin

Android Studio の機能で、コードの変換が可能

最初から自分で書き直すよりは、コストがかからない。

結果、Java から Kotlinに移行して、その他(ライブラリなど)はそのまま使えている。

構文の形だけkotlinに書き換えるくらいでいける。

Kotinはサーバーサイドでも十分使える

Javaを使って入れば移行コストは比較的低い

Kotlinはモダンで良い言語

宣伝

「てっくぼっと!」というエンジニアブログをやっていて、

そこで Spring と Kotlin の話を書いていたりするので読んでね。


談義: AtsukoFukuiさん「こんな時どう書くの? 逆引きKotlin入門」

資料

今回のゴールは Kotlin 描き始めたい初心者が  Kotlin よさそうって思えるようになることだよ。

以下、談義を聴きながらのメモ

変数

変数の宣言は var ,  val がある

var mutable

val imutable

型推論ができるので、型を書かなくても変数宣言できるよ!

オプショナルが使える。

null を許容する変数には、変数の末尾に をつける

null を意識するようになるので、ぬるぽで落ちることが少なくなるよ!

変数は class に属する必要がない。つまり、第1級オブジェクトとして宣言できる。

定数には const

関数

fun で関数がかける。

デフォルト引数と名前付き引数をサポートしている。

条件式

if文

Kotlin において if は式。文ではない。

つまり、値を返すことができる。

なので、if 文の中に値をそのまま書けば、それが return される。

例えば、

val max = if (a > b) {

  a

} else {

  b

}

のように。

三項演算子はつかえないが、エルビス演算子が使える。

エルビス演算子の名前の由来は「?:」という記号を横からみると

エルビスプレスリーに似ていることから付いた名前だよ!

null チェックは、スコープ関数とオプショナルの組み合わせがよく使われる。

when

if 同様に when も式

whenの後ろの()の値が比較の対象になる。

when(point) {

  in 0..10 -> User.gold

  else -> User.other

}

みたいにかける。

()を省略してもよい。

when {

  point in 0..10 -> User.gold

  score in 10..20 -> User.Silver

}

のように、違う値を比較することもできる。

まとめ

kotlinはかわいい!


談義: Paniniさん「Convert  Java  file to  Kotlin  file ⇧⌘K」

資料

以下、談義を聴きながらのメモ

android studioで、Java file を Kotlin にconvertすることができる

90%くらいはちゃんと動く。

Java で書いたコードは自分で意図は理解しているので

あとはコンバートしてくれれば Kotlin がかける!

 

ただ、Java  で書いたコードを変換してくれているだけなので、微修正は必要。

 

ぬるぽが起こるところは Kotlin でも起こるので

!!が付いていることがある。

その場合は?をつけると、その値が評価されなくなるので良い。

ただ、評価されなくなるのも困るので、

ちゃんと何か値が代入されるよってことで

lateinit 修飾子をつける。

そしたら ? もいらない。

ただ、初期化の段階で入れる予定の初期値をちゃんといれたい。

だが、onCreate 内で初期化している

そんな場合は、lazyを使えば遅延初期化で初期化ができる。


談義: takahiaさん「KotlinでRealmを扱う」

資料

以下、談義を聴きながらのメモ

Realm とは、Android や ios で使われる、簡易的なDB

登壇者の方は毎回、

「トランザクションの管理と CRUD の実装は、なんで面倒くさいんだろう。」

と思っていた。

Spring Boot は

1個のアノテーションでトランザクション管理ができる。

共通の interface で Crud の実装ができる

まとめ

Realm の transaction 管理は inline で定義して共通化する。

Realm の基本的な CRUD は abstract class で定義して共通化する。


談義: miho.sasakiさん「How to KotlinのセッションからKotlinらしい表現を学ぶ」

資料

Google I/O に行ってきて、

Java っぽいコードをどうやって Kotlin にしていくかっていうライブコーディングをやっていて

そのコードの書き出しを自分でもやってみたので、そういう発表。

【サポーターズCoLab勉強会】Google公式サポート!Kotlin入門に行ってきました

【サポーターズCoLab勉強会】Google公式サポート!Kotlin入門

https://supporterzcolab.com/event/360/

に行ってきたので、そのレポート

資料

以下、講演を聞きながらのレポート

 

Kotlin入門までの助走読本
https://drive.google.com/file/d/0Bylpznm149-gTGRjOFRkWm9PODg/view

というのを、登壇者の方が去年書いた

 

2012年に最初のKotlinがリリースされた

 

KotlinはJavaScriptへのトランスパイルもできる。Babelとか使って。

 

extension functionsがKotlinがJavaと比較して実装しやすいメリットの一つだ。

 

簡単なコードを実行したかったら
https://try.kotlinlang.org/
で簡単に実行できる。

 

デコンパイル
→ Kotlinで書き出したものを、Javaのソースに変換もできる。

 

Kotlinで書いて、iOS用のコードに変換することもできる。

 

Kotlinのオススメ本

 

型を書かずに変数宣言したりしたら、ビルド時間が遅くなる?

e.g

var str: String = “moji”

ではなく、

var str = “moji”

と書いた場合に、ビルド時間が遅くなる?

 → 特に感じることはない。

 

Null安全なので、スマートキャストができる

 → 逆に、Javaではできなかったらしい。。。

 

エルビス演算子は、右辺にreturnを書き、即 return するような場面が多い。