本セッションの登壇者
セッション動画(YouTubeチャンネル登録もお願いします。)
Kotlinの最新動向2022ということで発表させていただきます。
まず最初に簡単に自己紹介をさせてください。長澤太郎と申します。
ふだんはユビーという会社でソフトウェアエンジニアをやっております。仕事ではバックエンドをKotlinで書くことが多くて、それ以外ではTypeScriptも使いますが、仕事ではおもにKotlinを使っている感じです。
業務外の活動としてKotlinエバンジェリストを自称しまして、こういった講演とか、あるいは書籍の執筆などを通じて、Kotlinの楽しさを世に広めていくようなことをしています。
本日はよろしくお願いします。
繰り返しになるんですけれども、ユビーという会社で働いてます。

医療の会社なので、人々の健康のために、日々コードを書いています。
Kotlinとは
Kotlinという言語をご存知だと思うんですけども、今から11年前の2011年の夏、JetBrainsによって発表されました。
静的片付けオブジェクト指向言語ということでJavaと同じですね、ジャンルはいわゆるJVM言語のひとつです。JVMというのはJavaのバーチャルマシンです。Javaの実行環境の上で走ることができるプログラミング言語ということで、Javaの既存のエコシステム、資産を使って、後発であるKotlinが、その良さを取り入れて使える言語となっています。

Kotlinの特徴その1 - 簡潔さと表現力
簡単に、Kotlinの3つの特徴を紹介したいと思います。
まずひとつが簡潔であるということ、それと表現力の豊かさですね。
たとえば以下のコードでは、拡張プロパティ、拡張関数を使っています。既存の型に対してプロパティやメソッドなどを後から追加することができる機能が備わっています。

それから演算子オーバーロードです。ここではplusという名前のメソッド、拡張関数を定義してますけど、これを演算子で呼び出すことができるという機能があります。
Kotlinの特徴その2 - NULL安全
それから、Kotlinを語る上では外せないのがNULL安全です。NULLの可能性があるものとそうでないものを厳格に区別することで、いわゆるNullPointerExceptionのようなケアレスミスを防いでくれる機能があります。

Kotlinの特徴その3 - Javaとの相互運用性
3つめはJavaとの相互運用性です。KotlinはJVM言語なので、Javaの実行環境の上で動くんですが、KotlinからJavaのコード、逆にJavaのコードからKotlinのコードをお互いに呼び出すことがとても簡単にできます。

マルチプラットフォームへと成長するKotlin
このKotlinですが、2017年にGoogleから「Androidの開発言語として正式サポートします」という発表があって、ここから一気にKotlinの活用が広まりました。

KotlinはもともとはJavaの代替として登場したのですが、いまやJavaScript、Nativeをもターゲットに含めたマルチプラットフォーム言語として成長中です。

そのマルチプラットフォームのアプローチとしては、ビジネスロジックみたいなコアなドメイン層の部分はKotlinのコードを書いて、それを各プラットフォームで共有します。
プラットフォーム固有の、たとえばUIのような部分はそれぞれのプラットフォームごとにKotlinで実装します。
以下のコードを見るとわかると思いますが、expectやactualみたいなキーワードを使って抽象と具象を分け、コモン(共有)とプラットフォーム固有のコードを分けています。

サーバサイドKotlin - KtorとSpring
サーバーサイドでもKotlinの活用は徐々に広まっていて、今、Kotlinの有名どころのWebフレームワークとしてはKtorとSpringがあります。
KtorはJetBrainsが作っている、いわば公式のフレームワークなんですが、Kotlinで記述されているため、Kotlinからの使いやすさがひとつの特長として挙げられます。

(Ktorは)軽量かつフレキシブルなのが特徴です。こういった感じで、いわゆるマイクロフレームワーク、とても小さいのが特徴的です。


今回は全部を紹介しきれないんですが、(Ktorには)プラグインという機構がありまして、これによって拡張性や柔軟性を実現しています。
もうひとつのSpring FrameworkはJavaでもともとおなじみですね。Webアプリケーションフレームワークなのですが、Kotlinも公式サポートしているので、Javaとあまり変わらない感じで使うことができます。

今、Webを語るうえでGraphQLというのは欠かせないのかなと思うのですが、Netflixが提供しているDGSというフレームワークがありまして、Springの上で動くんですが、アノテーションベースでアノテーションをぺたぺた張っていくことによって、GraphQLを簡単に実現することができます。

Kotlinは成長中!
言語自体も成長していて、現在の安定版は1.6.21ですが、いくつかおもしろい機能が備わっています。

そのなかでも一番特徴的なのはこのコンテキストレシーバーというもので、最初に紹介した拡張関数みたいな、1つのレシーバーしか取れてなかったものを複数個取ることができるようになる機能です。


まだ実験段階なので、ちょっと荒い部分はあるとは思うのですが、こういったおもしろい機能がどんどん追加されているのが、Kotlinのいま現在の動向といえると思います。
はい、お時間になってしまいましたが、ご清聴ありがとうございました。