トップ画像
Ktorを知る ~基礎編~

執筆者: オキリョウ

最終更新: 6/9/2021

こんにちは、オキリョウと申します!

先日、Ktor等Webアプリケーションフレームワークを使ってみたのですが、結構気に入りました。そこで、せっかくなのでKtorについて記事にすることで、より深く理解していきたいと思い、書くことにしました。

Ktorとは

KtorはKotlinで書かれた、かなり新しいWebアプリケーションフレームワークです(2018年にバージョン1.0を発表)。オープンソースとしてJetbrains社が中心となって開発しています。


↑ Ktorのロゴです。少し怖い

公式によるとKtorの目標は

the goal of Ktor is to provide an end-to-end multiplatform application framework for connected applications. 


ということらしいです。つまりサーバーからクライアント、windowsからiosにいたる全部の環境で動くフレームワークを目指しているようです。欲張りですね。

コードは以下のようになっています。これは Hello World を出力するプログラムですね

package com.example
	
import io.ktor.application.*
import io.ktor.response.*
import io.ktor.routing.*
	

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

fun Application.main(){

    routing {
        get("/"){
            call.respondText("Hello World!")
        }
    }
} 


こんな感じの雰囲気です。

Ktorの主な特徴は以下の通りです。

  1. とにかく軽い
  2. 拡張性が高く、柔軟
  3. 非同期処理に強い
  4. どこでも動く


一つずつ見ていきましょう。

とにかく軽い

Ktorはとにかく軽いです。というのも、何も実装されていないところから開発できるからです。
Webフレームワークといえば、SpringやDjango, Laravelなどがあると思います。これらのフレームワークは、認証機能やシリアライザー、ORMなどの必要な機能がデフォルトで搭載されています。逆にKtorは何も搭載されていません。その代わりに、必要なものだけ書いて使用することができます。そのようにすることで、かなり軽いフレームワークとなっています。

拡張性が高く、柔軟

先ほど、必要なものだけを使用することができると書きました。逆に言えば、Ktorは必要なものをどんどん取り込む機能が充実しているとも言えます。例えば、テンプレートエンジン「FreeMarker」を使いたい場合、以下のように書けばOKです。

install(FreeMarker) {
    templateLoader = ClassTemplateLoader(this::class.java.classLoader, "templates")
    outputFormat = HTMLOutputFormat.INSTANCE
}


もちろんですが、他のテンプレートエンジンを選ぶこともできます。
ちなみに自分でこのようなプラグインを書くことも全然可能です。
このように、Ktorでは好きなように拡張できますし、使いたいものを使うことができます。

非同期処理に強い

Ktorは非同期処理に強いです。どれほど強いかというと、公式が出しているチュートリアルの中に、チャットアプリを作成するというものがあるくらいです。
というのも、Ktorは、Kotlinのライブラリの一つである「Coroutine」をものすごく使っています。
ここではCoroutineの詳しい説明は省きます(それだけで記事ができるくらいややこしい)が、このCoroutineを使うことで非同期処理に相当強くなっています。

どこでも動く

Ktorの目標として、マルチプラットフォーム上で動くというものがありました。
現在も開発中ということですが、公式によると、今のところサーバーサイドはJVM、クライエントサイドはJVM、JavaScript、IOS、Androidで動くようです。ですので、ほとんどの環境で動きます。
Kotlin自体がどこでも動くので、Kotlin一つでWeb系を制覇できる日が来るかもしれませんね。

ちなみに公式では書いていませんが、Android上でもサーバーを立てることが可能です。
https://qiita.com/oxsoft/items/aec71882b1b21930c953
何に使うのかといわれるとアレですが・・・

まとめ

Ktorについていろいろ書いてきました。このように魅力があふれかえるフレームワークとなっています。
唯一欠点があるとすればドキュメントがそこまで多くないことでしょうか。できてから数年しかたってないので仕方がない部分ではあります。
といっても公式を見ておけば大体何とでもなります。

実際書くこと自体はそこまで難しくないので一度挑戦してみるのもありだと思います。

取得に失敗しました

2020年度 入部

GitHub