KtorでHelloWorldを表示してみる

#はじめに
どうも！tasukuです！
先日kotlin fest 2019へ行ってきてkotlin欲が高まり、Ktorを使ってみたので少しだけ書いてみたいと思います。
内容はタイトルの通りKtorを使ってローカルホストでHello Woldを表示するまでです。
(Ktorを始めたばかり かつ サーバーサイドあまり詳しくないので間違っていたらご指摘いただけたら幸いです)

#環境
・macOS Mojave (version 10.14.5)
・IntelliJ IDEA (version 2019.2.2)
↑インストールしてない人は<a href = https://www.jetbrains.com/idea/download/#section=mac>こちら</a>からインストールしてください。とりあえずCommunityEditionで大丈夫です。

##スタート！まずはKtorプラグインを追加
IntelliJ IDEAをインストールしただけだとKtorが使えないのでプラグインを追加します。
起動して最初の画面のConfigureのところをクリックして、Pluginsを選びます。
![スクリーンショット 2019-09-10 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456836/af1294e0-fce1-a32a-7817-20e93139e857.png)

そして検索窓でKtorと検索すると出てくるのでOKを押してプラグインを追加します。
![スクリーンショット 2019-09-10 9.25.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456836/a1d96405-5148-fcbe-3890-df1406342a47.png)

これでKtorが使えるようになりました:clap:

##プロジェクトを作る
それではここからProjectを作っていきます
まずIntelliJ IDEAの最初の画面からCreate New Projectをクリックします。
そうすると以下の画面へ遷移します。

この画面では左のリストでKtorを選択します。
他にも色々と設定がありますが、今回は特にいじらなくて大丈夫です。
右下のnextを押して次に進みます。
![スクリーンショット 2019-09-10 9.30.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456836/c248a8a8-eab1-ce1e-1e91-8e5ce2e1813c.png)


ここもデフォルトのままで大丈夫なのでnextを押して次へ進みます。
![スクリーンショット 2019-09-10 9.33.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456836/1063d01e-d6a5-706e-5fb6-3224336483c6.png)

ここではプロジェクトの名前と作成される場所を決めます。
とりあえずプロジェクト名はhello-worldにでもしておきます。
作成される場所は今回はデフォルトにしています。ご自身のお好きな場所に設定していただいて構いません。
最後にFinishを押します。
![スクリーンショット 2019-09-10 9.35.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456836/fbf3bdaf-025c-1dc8-2a62-27834cd6eacb.png)

Finishを押すと以下のやつが出てきます。
僕はAutomatically import this project ~ にチェックを入れました。自動でimportしてくれた方が便利なんじゃないかと思いまして。
まあこの画面もほとんど変えずにOKを押して構いません。
![スクリーンショット 2019-09-10 9.38.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/456836/27931145-9bbf-ce7e-5000-0ff99e47cc40.png)

ここまできたらプロジェクトが立ち上がっているはずです！:clap:

## Hello Worldを表示する
###プロジェクトを作って初期状態のコード
こんな感じです。srcの下にいるApplication.ktです。

```kotlin:Application.kt

package com.example

import io.ktor.application.*
import io.ktor.response.*
import io.ktor.request.*

fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)

@Suppress("unused") // Referenced in application.conf
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {
}
```

この状態でアプリをrunしてアクセスしてみても真っ白な画面が表示されるだけです。

### hello worldを表示するための実装
以下のようにApplication.ktを修正してRunしてみてください。
<a href="http://localhost:8080">localhost:8080</a>にアクセスするとHello Worldが表示されるはずです！

```kotlin:Application.kt

package com.example

import io.ktor.application.*
import io.ktor.response.*
import io.ktor.request.*
import io.ktor.routing.get
import io.ktor.routing.routing

fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)

@Suppress("unused") // Referenced in application.conf
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {
    //以下を追加
    routing {
        get("/") {
            call.respondText { "Hello World" }
        }
    }
}
```

どうでしたか？ちゃんと表示されたでしょうか？
Ktorの公式を見るとApplication.ktが違いますが、今回はプロジェクトを立てると自動で作られるコードを元に実装してみました。

##おまけ
localhost:8080にアクセスするとHello Wolrdが表示されたはずです。
この8080というポート番号はどこで決めてるのでしょうか？

答えはresources/application.confです。ということで中身を見てみましょう

```conf:application.conf
ktor {
    deployment {
        port = 8080
        port = ${?PORT}
    }
    application {
        modules = [ com.example.ApplicationKt.module ]
    }
}
```
しっかり```port = 8080```と書いてありますね。
ここを変えることでポート番号を変えることができます。

##終わりに
今回はKtorでHello Worldを表示してみました。思っていたよりも簡単にできたのではないでしょうか？
まだKtorの情報も多くはないので、少しでもお役に立てたら嬉しいです！


ここまで見ていただきありがとうございました。