今回は、近年様々な企業が続々と取り入れている「kotlin(コトリン)」というプログラミング言語について、最近人気がでてきて「アツい言語」というのはこの記事に辿りついた方は理解しているでしょう。そこで今回はもう少し深掘りして「フレームワーク」について見ていきましょう。
kotlinで○○の開発をしたいけど、どのフレームワークが最適なのか?
このような疑問が解決できるように、順番にご説明していきます。
そもそもkotlinとは?
kotilnは2011年に登場した新しいプログラミング言語で、「JVM(Java Virtual Machine)上で動作する静的型付けのオブジェクト指向言語」。簡単に説明すると、下記のような特徴があります。
- Javaなどの言語と同じで「オブジェクト指向言語」である
- Javaと相互利用することが可能
- 間違えてしまいやすいエラーを未然に防いでくれる
様々なクラスなどを使って組み立てるように開発を進められる「オブジェクト指向言語」で、間違えやすいエラーなどを未然に防ぎ、javaとの互換性が良いプログラミング言語です。
kotlinは主にandroidアプリ開発に特化した言語。Googleが今までアプリ開発に使っていたjavaでは、少し古臭い冗長的なコードが多いというデメリットがあるため、javaから格上げされてkotlinが採用されています。Googleがkotlinファーストの方針なので、今後さらに需要も高まり人気が出てくる言語と言えるでしょう。
kotlinのフレームワークでできること
kotlinでは様々なフレームワークを使い分けることで、「androidアプリ開発」「サーバーサイドの開発」など幅広く開発の効率化を図ることができます。例えば、kotlin純正のフレームワークである「Ktor」はシステム間を連携するための非同期なサーバー・クライアントを簡単に構築することができます。
また、フレームワークの中には「フレームワークのためのフレームワーク」というのもあります。Spring Bootというフレームワークは、Spring Frameworkというフレームワークの機能の使い分けが困難という欠点を解消するために開発されたフレームワークです。
このように一言に「フレームワーク」と言っても、用途は多岐に渡りますので「開発したいことはなにか?」「何が実現したいのか?」を明確にしてからフレームワークを選ぶ必要があります。
kotlinのフレームワークの種類
ここからは、Kotlinのフレームワークにどのようなものがあるのか具体的に見ていきます。今回ご紹介するフレームワークの種類は、下記の通りです。順番に紹介するので、あなたが使ってみたいものや、今や今後の開発にぴったりなフレームワークを探してみてください。
- Spring Boot
- wasabi
- Jooby
- ktor
Spring Boot
まず最初に紹介するのが、「SpringBoot」です。これは先ほども少しお話ししましたが、「Spring Framework」をさらに使いやすくするためのフレームワークです。
Spring Frameworkは汎用性が高く、WebシステムやWebサービス、クラウドやモバイルシステムなどの幅広い開発で活用できます。しかしこの幅広い汎用性の高さ故に、機能の使い分けが困難であるというデメリットも抱えてしまいました。
このような欠点を補うために用意されているのが、「SpringBoot」。複数のフレームワークを使用する際によく発生する、XML設定やBean定義などを、できる限り自動で設定する機能が搭載されているのも特徴です。
wasabi
次に紹介するのが、「wasabi」フレームワークです。このフレームワークの特徴は、いかの通り。
- MVCはない
- WebAPIを提供する用のフレームワーク
- 開発が活発に行われている。最新のKotlinで動きます
- クライアントサイドでAngularJSとかを推奨している
- Ruby言語のWebフレームワークsinatraと同系のフレームワークである
このフレームワークはAPIを作るのがとても簡単で、シンプルに実装できるのが最大の利点ですね。また現在もどんどんと開発が進められているので、今後の進化に大いに期待できるフレームワークとなっています。
Jooby
次に紹介するのが、「jooby」フレームワークです。このフレームワークはmicroフレームワークという位置付けで、とにかく軽量。軽量なので、ベンチマークもなかなか早いものがあります。
私も最初はマイクロフレームワークと聞いて半信半疑でしたが、使ってみると、コンパクトに開発を進めてどんどん拡張することも容易にできて感動しました。実際に完成したアプリを実行してみても、起動も早くまさに「マイクロフレームワーク」と感じました。
ktor
最後に紹介するのが、Kotlin純正のWebフレームワーク「ktor」です。ktorはシステム間連携のための非同期なサーバーとクライアントを構築するフレームワークです。このフレームワークは2018年にリリースされてから順調にアップデートされ続け、現在も開発が進んでいます。まだまだ新しいフレームワークですが、十分に実用性はあると言えるでしょう。
フレームワークの最初に紹介した、Spring Bootと比べてもサイズが比較的小さく、ちょっとしたものやマイクロサービスを作るのであればktorを使ってみるのもアリですね。
kotlinのおすすめフレームワーク
では、ここまでで紹介してきたkotlinのフレームワークで、一体どれがおすすめなのでしょうか? もちろんフレームワークは用途に合わせて選択するべきなので、各用途毎のおすすめフレームワークを発表していきます。
サーバーサイド開発におすすめ
まずは、サーバサイド開発におすすめのkotlinフレームワークは「Spring Boot」です。やはりなんと言ってもこのフレームワークの汎用性がさまざまなサーバーサイド開発を効率化し、且つ便利にできます。これからサーバーサイド開発をしたい方や、既に開発済みのアプリケーションなどにも是非積極的にSpringBootを導入することをおすすめします。
軽量Webフレームワーク
軽量のWEBフレームワークを探している場合におすすめなのが、「Jooby」です。実際に使ってみて、たとえどんどん機能拡張してもサクサクと動作し、比較的簡単に導入のできるところがポイント。とにかく軽量で、コンパクトに開発を進めたい方には是非使ってみて欲しいフレームワークです。
KotlinとJavaのための軽量Webフレームワーク
次におすすめするのが、kotlinとjavaのための軽量WEBフレームワークです。名前は「Javalin」といい、デフォルトではシンプルなブロック方式と呼ばれる形で設計されており、WebSocketやHTTP2・非同期リクエストをサポートしています。
JavalinはJetty上に構築されているため、パフォーマンスは元のJettyコードとほぼほぼ変わりません。クラスを拡張したり、アノテーションの使用、JavaとKotlin用で別々のバージョンをダウンロードする必要もないのです。Javaを使用する場合には、以下サンプルコードのような“public static void main”だけ用意すれば可能となります。
public static void main(String[] args) { var application = Javalin.create().start(5000); application.get("/", ctx -> ctx.result("Hello World")); }
android開発におすすめ
android開発におすすめのフレームワークですが、そもそもkotlin自体がandroid開発に最適化されているので、どのフレームワークを使っても問題ないです。強いて言えば、開発予定のアプリケーションの規模などによって検討すると良いでしょう。
膨大な量のデータや処理が必要なのであれば「spring」系のフレームワークを使い、コンパクトに軽量化を測って開発したい場合には「ktor」や「Jooby」が最適です。
まとめ
今回は近年特に注目されて需要も増え続けている「Kotlin」のフレームワークについて、どのような種類があるのかや、どのフレームワークがどんな開発に向いているのかなども解説しました。
フレームワークの種類は多くあり、実際に使うとなった場合「効率化・セキュリティ・不具合・今後の拡張性・アプリとの相性」など様々な観点から最適なものを選択する必要があります。最後に今回ご紹介したフレームワークを簡単にまとめて記載しておくので、ぜひフレームワーク選びの参考にしてください。
Spring Boot | 汎用的なフレームワーク「Spring Framework」の機能の使い分けが困難、というデメリットを克服したフレームワーク。汎用的に使うことができ、大規模開発にも向いている。 |
wasabi | APIを作るのがとても簡単で、シンプルに実装することができる。フレームワーク自体の開発も継続されており、日々改良されてアップデートされている。 |
Jooby | とにかく軽量のWEBフレームワーク。コンパクトに開発ができ、どんどん改良実装してもサクサク動くアプリケーションが作成可能。 |
Ktor | Kotlin純正のWebフレームワークで、システム間連携のための非同期なサーバーとクライアントを構築することが可能。比較的新しいフレームワークのため日々アップデートされている。 |
Javalin | JavaとKotlinのための軽量のWEBフレームワーク。シンプルなブロック方式で設計されており、WebSocketやHTTP2・非同期リクエストをサポートされている。 |