第47回Kotlin dojoを開催した

今週は第47回を開催しました。引き続きKotlin Hands-onをすすめています。

 

前回の様子はコチラ↓ 

kdnakt.hatenablog.com

 

 

[第47回の様子]

2021/1/14に第47回を開催した。諸事情により今週は水曜日でなく木曜日の開催。

 

参加メンバーは自分をいれて一応3名。ただし機材トラブルで1人はほとんど参加できなかったので実質2名でペアプログラミング状態だった。

また、直前にお子さんのおむかえが入って参加できなくなったメンバーもいた。これは仕方ないけど残念。

 

勉強会本編の内容としては、前回に引き続きCreating an interactive website with Ktorハンズオンを進めた。ハンズオンの第4章を終わらせることができた。

 

[学んだことや疑問点]

  • Creating an interactive website with Ktor: 4. Home page with templates
    • ジャーナルアプリのメインページを作っていく
    • Ktorでテンプレートエンジンはいくつかサポートされているが本ハンズオンではFreeMarkerを使っていく
    • ちなみに他のエンジンとしてThymeleaf、Mustache、Velocityなどがサポートされている
    • 利用するエンジンの設定はApplication.module()で実施する
fun Application.module() {
    install(FreeMarker) {
        templateLoader = ClassTemplateLoader(this::class.java.classLoader, "templates")
        outputFormat = HTMLOutputFormat.INSTANCE
    }
    // 略
}
    • これによりresourcesディレクトリ直下のtemplatesディレクトリに置かれている.ftlテンプレートを利用できる
    • HTML以外のフォーマットとしては、XMLやRTFなどがサポートされていた
    • テンプレートの中では以下のようにオブジェクトを利用できる
<#-- @ftlvariable name="entries" type="kotlin.collections.List<com.jetbrains.handson.website.BlogEntry>" -->
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Kotlin Journal</title>
</head>
<body style="text-align: center; font-family: sans-serif">
<#list entries as item>
    <div>
        <h3>${item.headline}</h3>
        <p>${item.body}</p>
    </div>
</#list>
</body>
</html>
    • ここで指定しているBlogEntry.ktの実装は以下の通りのシンプルな内容
package com.jetbrains.handson.website

data class BlogEntry(val headline: String, val body: String)

// メモリ上にデータを保持する仮実装
val blogEntries = mutableListOf(BlogEntry(
    "The drive to develop!",
    "...it's what keeps me going."
))
    • あとはApplication.ktのルーティングに以下を追加して終わり。mapOftoがやはり慣れない……
get("/") {
    call.respond(FreeMarkerContent("index.ftl", mapOf("entries" to blogEntries), ""))
}
    • サーバーを起動すると、メイン画面にblogEntriesの内容が表示された🎉

 

[まとめ]

モブプログラミング・スタイルで、Creating an interactive website with Ktorハンズオンを進めている。

KtorでのテンプレートエンジンFreeMarkerの利用方法を学んだ。

 

今週の進捗は以下のプルリクエストにまとまっている。

github.com