Kotlinはオープンソースソフトウェアとして公開されており、誰もが自由に閲覧し、貢献することが可能です。その心臓部であるコンパイラも例外ではありません。
多くの開発者が日常的に使用しているにもかかわらず、その内部実装を詳しく知る機会はそれほど多くありません。
しかし、ちょっとした好奇心でコンパイラのコードを覗いてみるだけで、新しい発見がありとても楽しいです!
このセッションでは、私たちの身近なもの、例えば予約語を起点として、Kotlinコンパイラのコードを読み進めてみます。
私たちが書いたコードがどのようなプロセスを経て変換されるのか、コンパイラのコードを追いかけながら一緒に探求してみましょう。
この旅を通じて、コンパイラのコードの読み方、そしてKotlinの魅力をさらに深く掘り下げます。
新年0時になると、人々はそれぞれの心を込めて大切な家族や友人にメッセージを送ります。LINEのメッセンジャーサーバーは、その心を伝えるために、APNsやFCMのプッシュ通知サーバーに多数のリクエストを送信します。毎年毎年プッシュ通知を処理してきましたが、2024年はKotlinで新規作成したサーバーがかなりの数のプッシュ通知を処理したという点が特別な年でした。 本発表では、Java開発はベテランですが、Kotlin開発は初めての立場で、大容量・高性能サーバーを開発した経験を以下の視点で共有します。
Kotlin Multiplafromに対応したライブラリは数多くあります。新しいライブラリだけでなく、途中からKotlin Multiplafromに対応したライブラリもあります。
Android JetpackはAndroid開発における公式が提供するライブラリ群ですが、JetpackでもMultiplatform対応が進んでいます。
これにより、AndroidアプリをMultiplatformアプリに進化できる可能性が出てきました。
このセッションでは、いくつかのライブラリを用いたAndroidアプリを用意し、そのアプリをMultiplatformに進化させていく過程を紹介します。
その中で気をつけるべきポイントや、ハマりどころ、実用性や将来性についても話します。
OSSのコードを読んで挙動を理解してみたいと思いつつ、膨大なソースコードを前にしてどこから始めていいかわからず二の足を踏んでいる方は多いのではないでしょうか。
今回、そんな方のために、ChatGPT/Claude等のLLM系AIチャットと対話を進めながら、とっかかりを提案してもらい、 KotlinのOSSコード(Ktorを取り上げる予定)を読み進めてみるやり方をご紹介します。始めて読むソースコードでも、LLM系AIチャットがあなたと伴走してくれます!
Java言語にvalue objectsを導入することを目指す「Project Valhalla」が進行中です。これにより、値ベースのプログラミングスタイルを実現し、同時に実行時性能を大幅に向上させられると期待されています。Project Valhallaの影響はJVM言語でもあるKotlinに対しても多大であり、将来の我々のプログラミングスタイルにも変革をもたらすでしょう。
このセッションでは、Project ValhallaとそれがKotlin言語にもたらす影響について、以下のようなトピックで話す予定です。
Kotlinによる開発の難しさの一つにエラーハンドリングの難しさが挙げられます。
KotlinではJavaと違い検査例外がないため関数の呼び元でエラーハンドリングを強制できません。また、どのエラーに対応するべきかは中身の実装を見る必要があります。
この問題の解決策として、Railway Oriented Programmingとその実装としてOSS kotlin-resultを紹介します。
Railway Oriented Programmingでは正常ケースと異常ケースの2つのレールを型で表現しながら開発する手法です。
異常ケースが型で表現されるためエラーハンドリングのミスがコンパイラーフェーズで気付けるようになります。
具体的には関数型プログラミングにおけるResultやEitherという成功値かエラー値かのどちらか一方の値を持ったデータ構造を使ってエラーハンドリングを行います。
このセッションでは、オブジェクト指向をベースにした設計、理解容易性、命名、コードスタイル、機能要件、ドキュメント、テストといった7つの観点で行うコードレビューの手法を紹介します。
特に設計と理解容易性は、プロダクトの品質や保守性に関連する重要な観点です。そのため、コードレビューの観点で以下のデザインパターンをアンチパターンから堅牢なKotlinコードに改善する手法を紹介します。
・完全コンストラクタ
・バリューオブジェクト
・ストラテジパターン
・ポリシー
・ファーストクラスコレクション
・スプラウトクラス
また、コードレビューを支援するツールであるPR-AgentやCodeRabbitを活用したAIコードレビューの手法やレビューを効率化するプロンプト戦術を紹介します。参加者は、効果的なコードレビュー戦略を学び、チームの技術力向上に効果的かつ実践的な手法を得ることができるでしょう。
iOS/Androidのネイティブアプリを並行して開発する場合は、SwiftとKotlinの様な言語の違いをはじめ、様々な違いを理解し、見極めながら進めていく必要があります。そして、双方を効率良く理解するために、違いをネガティブに捉えず、共通点や相違点等を上手に紐解く姿勢も重要です。
本発表ではKotlinでの実装を中心に据える前提で、Swift(iOS)と比較した際における、「1. UI実装・Layout処理の違いを見極める / 2. Swift・Kotlinを用いた実装における共通点や類似点を探し出す / 3. iOS・Androidで明確に異なるポイントを知る」ためのヒントを事例を含めて解説します。
開発を通して得られた過程や着眼点に加え、同様または似た形の機能やUI実装を要件〜具体へブレイクダウンする際のプロセスや解法アプローチについても、具体例を交え紹介する予定です。
多くのKotlinプログラマが、バリデーションに関する安全性と保守性を高くするためのより良い方法を模索していらっしゃるのではないでしょうか。
そのような方向けに、Kotlinの言語の持つ機能やライブラリを用いたテクニックを紹介しつつ、どのような目的で使うのが良いかについて、コード例を示しながらお話していきます。
また、Kotlin 2.0で正式リリースされるContext Receiver機能によって可能になることについても触れたいと考えています。
おおよそこのようなことを目次として話すことになる予定でいます。
※ ショートセッションとなった場合は③または④の内容が中心になります
① コンストラクタについておさらい
② スマートコンストラクタとResult/Either型
③ バリデーションDSLの実装
④ Context Receiverの解説と使い所
よろしくお願いします。
これまでKotlinに触れてこなかったチームが、新規プロジェクトの言語選定でKotlinを採用し、SpringとAxonを用いて、疎結合でスケーラブルなマイクロサービスの構築を行った知見を共有します。
本セッションではプロジェクトで得られた知見をもとに、Kotlinを用いたCQRS+ESマイクロサービスを設計・実装する際のベストプラクティスを共有します。
また、マイクロサービスアーキテクチャを採用する利点や注意点などについてもお話します。
本セッションのトピックは次の通りです。
1.CQRS+ESアーキテクチャの概要と採用の背景
2.Spring BootとAxon Frameworkを用いたマイクロサービスの設計
3.Kotlinの言語特性を活かした実装
4.マイクロサービス間の連携とデータの整合性の確保
5.開発における課題と解決策
6.実際のプロジェクトでの応用事例と得られた知見
Spring 5.0にて登場したSpring WebFluxですが、Reactive Programmingが難しいためか実際の現場では採用が見送られるケースが多かったように思います。
現在はCoroutinesがサポートがされ、以前よりも採用しやすくなりました。しかし、国内ではまだまだ情報が少ないため、採用に至っていない人もいると思います。
そんな人の背中を後押しするような情報をご紹介しようと思います。
2017年から大規模な環境でSpring WebFluxを使っているため、運用観点のお話も交えてご紹介致します。
Spring WebFlux/Coroutinesの概要
Observabilityはどうするか
ThreadLocal(MDC等)との付き合い方
Micrometer Context Propagation
BlockHound
Virtual Threadsとの比較
Kotlinは普段IntelliJで開発している方がほとんどだと思いますが、中には発表者のようにNeovimや、VSCodeなどのJetBrains社製以外のエディタ等で開発したい方がいるかもしれません。これらのエディタを使う場合、いわゆるLanguage Server(LS)が必要になります。
Kotlinにはkotlin-language-serverというツールがあり、Language Server Protocol(LSP)を会話できるエディタであればコード補完等の機能を利用できます。
発表者は最近このツールにコントリビュートしており、
を話したいと思います。