執筆者: オキリョウ
最終更新: 2021/06/09
こんにちは、オキリョウと申します!
先日、Ktor等Webアプリケーションフレームワークを使ってみたのですが、結構気に入りました。そこで、せっかくなので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の主な特徴は以下の通りです。
一つずつ見ていきましょう。
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についていろいろ書いてきました。このように魅力があふれかえるフレームワークとなっています。
唯一欠点があるとすればドキュメントがそこまで多くないことでしょうか。できてから数年しかたってないので仕方がない部分ではあります。
といっても公式を見ておけば大体何とでもなります。
実際書くこと自体はそこまで難しくないので一度挑戦してみるのもありだと思います。
この人が書いた記事