今週は第47回を開催しました。引き続きKotlin Hands-onをすすめています。
前回の様子はコチラ↓
[第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 } // 略 }
<#-- @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のルーティングに以下を追加して終わり。
mapOf
のto
がやはり慣れない……
get("/") { call.respond(FreeMarkerContent("index.ftl", mapOf("entries" to blogEntries), "")) }
- サーバーを起動すると、メイン画面にblogEntriesの内容が表示された🎉
[まとめ]
モブプログラミング・スタイルで、Creating an interactive website with Ktorハンズオンを進めている。
KtorでのテンプレートエンジンFreeMarkerの利用方法を学んだ。
今週の進捗は以下のプルリクエストにまとまっている。