会社でKotlin dojo(第37回)を開催した

今週は第37回を開催しました。今週からKotlin Hands-on編がスタートです!

 

前回の様子はコチラ↓

kdnakt.hatenablog.com

 

 

[第37回の様子]

2020/10/28に第37回を開催した。

 

参加メンバーは自分をいれて3名。安定のメンツ。

 

勉強会本編の内容としては、前回で練習問題集Kotlin Koansを全て解いたので、Kotlin Hands-on

Creating HTTP APIs with Ktorを進めることに。Coroutineで非同期処理を学ぶハンズオンとか、マルチプラットフォーム対応のアプリを実装するハンズオンとかもあったのだけれど、一番つまずきが少なそうなHTTP APIを選択した(私が)。

 

勉強会が始まる5分前に該当のコースを眺めて、IntelliJが必要なことや、テンプレートプロジェクトの存在に気付き、慌てていろいろダウンロードしたものの、ダウンロードしたプロジェクトをIntelliJにインポートするところでビルドに時間がかかり勉強会開始時間になってしまった。準備は前もってすませておくべし……。

 

IntelliJのインストールなどが必要になりそうだったので、今回はそのまま私がドライバを担当した。次回以降も同じソースで継続してハンズオンを進めていくために、ソースはGitHubで共有することにした。

github.com

 

[学んだことや疑問点]

  • Creating HTTP APIs with Ktor
    • Ktor(ケイター)と呼ばれるフレームワークを使い、HTTP APIを実装していく
    • 具体的には、Koansの問題にあったような、顧客データや注文データを扱うAPIらしい
    • こちらのmasterブランチをコピーしてIntelliJで開くところからスタート
    • gradle関連の設定は済んでいるので設定ファイルはそのまま
    • KtorのKotlinオブジェクトとJson間でのシリアライズ処理のところで、Javaっぽい@Serializableアノテーションが登場。Koansやその前の文法部分では、ほとんどアノテーションは出てこなかったからちょっと新鮮な感じがした。
    • 今回のハンズオンではDBは用意せず、APIのデータはインメモリに溜めておく。
    • 顧客APIのルーティングはKtorのroute()関数を利用するスタイルで、以下のように実装してく。注文APIの方は別スタイルで実装するとのこと。
import io.ktor.routing.*

fun Route.customerRouting() {
    route("/customer") {
        get {

        }
        get("{id}") {

        }
        post {

        }
        delete("{id}") {

        }
    }
}
    • ずっと半年以上https://play.kotlinlang.org/のサイト上のエディタでKotlinを触ってきたので、上記のコードがIntelliJ上で以下のように分かりやすく表示されてちょっと感動した。Koansの問題とかにあった、thisがどれを指すのか問題はIntelliJを使っている分にはあまり心配しなくて良さそうな気がする。

f:id:kidani_a:20201029014617p:plain

    • 全顧客データを取得するget() API部分をほぼコピペで以下のように実装。CustomerRoute.kt内で、以下のように別ファイル(Customer.kt)で定義した変数customerStorageをインポートできるのがこれまたちょっと新鮮な感じ。Javaでいうとpublic staticなフィールドって感じだろうか。

f:id:kidani_a:20201029014913p:plain

    • 必要なimport文は追加したはずなのだが、call.respond()call.respondText()の部分が赤字でコンパイルエラーが消えないまま、勉強会は時間切れとなってしまった。適当にインポートしてきたcallが間違っているのだろうか……

 

[まとめ]

今回から、Kotlin Hands-onを進めていくことに。

初めてのIntelliJにやや戸惑いながらも、モブプログラミングの「やったー!」を2回実行できた。

来週はコンパイルエラーを解消して、APIを実際に動かしてみたい……!

今週の進捗は以下の通り。

github.com

 

(そういえば、途中までIntelliJのKotlinコンパイラが最新じゃないとかってワーニングが出てたような……そのうち修正しよう)