---
# System prepended metadata

title: 'Ktor勉強会 #001'

---

# Ktor勉強会 #001

## 参加者
- うえき
- あっきー
- やました

## 開催日
2020/04/26(日) 13:15~

## Agenda
### Ktor
- 読み方はケイター
- Kotlinアプリケーションをすばやく作成するためのフレームワーク

### Kotlin
- 基本構文の勉強は[ここ](https://play.kotlinlang.org/koans/overview)
    - 今回は、手を動かすとこやりたいので、Introductionの中身を少し伝える
    - https://play.kotlinlang.org/koans/Introduction/Data%20classes/Task.kt

### Restful APIについて
- 今回これで進めようかと

### 実際に構築をやってみる
- 共有用Github repository
    - [yoshixmk/ktor-sample : Quickstart and sample](https://github.com/yoshixmk/ktor-sample)
    - 足並み揃えて、別々でやってくので、途中困った時や、勉強会の最後に議事録的にコードを置く

1. 画面ぽちぽちして、構成を考える
    - https://ktor.io/quickstart/generator.html#
    - Locations(ktor-locations)は選んではダメ
        - [参考資料](https://rinoguchi.hatenablog.com/entry/2020/04/24/100000#ControllerRouting%E3%82%92%E5%AE%9F%E8%A3%85)
    - 学習的に汎用のgradleにする。（余談になるが、）project選択で、「Gradle with Kotlin DSL project」にすると`build.gradle.kts`ができて、Ktolinコードが書ける。
```kotlin
* AutoHeadResponse (ktor-server-core)
Provide responses to HEAD requests for existing routes that have the GET verb defined

* CallLogging (ktor-server-core)
Logs client requests

* ConditionalHeaders (ktor-server-core)
Avoids sending content if the client already has the same content using ETag or LastModified

* Status Pages (ktor-server-host-common)
Allow to respond to thrown exceptions.

* Routing (ktor-server-core)
Allows to define structured routes and associated handlers.

* WebSockets (ktor-websockets)
Adds WebSockets support for bidirectional communication with the client

* Jackson (ktor-jackson)
Handles JSON serialization using Jackson library
```

追加
* CORS チェック入れた

2. Intelij Plugin入れる
    - [Ktor用](https://ktor.io/quickstart/quickstart/intellij-idea.html#installing-the-plugin)


### もし、うまく設定できない場合
- ありものを使う
    - https://github.com/raharrison/kotlin-ktor-exposed-starter

---

### ライブラリ


---

## Memo
- Shareするときはこちらのリンクを使ってね！
    - https://gist.github.com/yoshixmk/5ecaa868cc4b9bdf53aec3a06a992664

- 動作確認について
```kotlin:動作確認1
get("/boom") {
    throw Exception("boom")
}
...
exception<Exception> { cause ->
    call.respond(HttpStatusCode.BadRequest)
}
```

```kotlin:動作確認2
static("/") {
    resource("favicon.ico")
}
```