2020年にAndroid/Kotlinの開発をゼロから始めて以降、モバイルアプリ開発に向き合う中で、iOS(Swift)とAndroid(Kotlin)の違いと向き合いながら、両者の実装・設計思想に触れる機会を多く得てきました。
本セッションでは、Kotlinを軸としつつ、iOSとの比較を通じて得られた「UIやレイアウトの設計に対する考え方の違い」や「言語間の共通点・相違点から得られる学び」を事例ベースで紹介します。
また、業務で得たインプットをどのように実装や設計に落とし込んでいったか、初学者からある程度応用できるレベルに至るまでに意識していたポイントや、実務で活きた視点についてもお話しします。
iOS/Android両プラットフォームに関わる方や、これからKotlinやAndroidアプリ開発に取り組もうと考えている方にとって、実践のヒントとなるような内容をお届けします。
本セッションでは、主にSpring Bootアプリケーションについて、性能を左右する 同期・非同期 / Blocking・Non-Blockingの挙動を、syscallレベルまで掘り下げた解析と負荷試験の実測値を交えて解説します。
Kotlinの開発環境として、IDEやエディタ以外の選択肢があることをご存知でしょうか?
本セッションでは、Jupyter Notebook上でKotlinを実行できる「kotlin-jupyter」を中心に、インタラクティブなKotlin実行環境の魅力と活用方法を紹介します。
kotlin-jupyterは、コードの実行結果をその場で確認しながら開発を進められる環境で、グラフやテーブルなどの視覚的な出力も簡単に扱えます。また、コードと実行結果を一つのドキュメントとして保存・共有できるため、チーム内での知見共有や技術検証の記録にも最適です。
主に取り扱う内容 (予定)
-各種環境でのkotlin-jupyterの導入方法や基本的な使い方
過去に書いたその時にベストだったコードも、Kotlinの進化によって、今ではもっとスマートに書けるかもしれません。新しい機能の導入背景を知りながら、モダンKotlinに書き換えていきましょう。
このセッションでは、Kotlin 1.9以降に入った機能に触れつつ、主に以下のケースについてどう書き換えるかの具体的なユースケースを紹介していきます。
このセッションを、コードを書くとき・レビューするときに、なぜその機能が追加され、どのように使うことが推奨されているのか、という背景まで理解して、よりよいKotlinを書くきっかけにしましょう。私達の書くコードはもっとスッキリするはずです。
Androidのみのプロジェクトを利用して簡単にIOSのアプリもビルドできるようにしてみよう。
Androidプロジェクトにいくつか準備ができていれば、意外と簡単にIOSにもリリースできます
サービスのスケールに伴い負債を抱えた大規模なレガシーシステムでは、マイクロサービスの新規開発は0→1ではなく、負債を精算しつつ進める-1→1の開発です。
本セッションでは、共有DB、分解ではなく分散してしまったマイクロサービス群によって複雑化した環境での新規マイクロサービスの立ち上げにKotlinを採用し、
・data/value classを用いた効率的なドメインモデリングでのDDD
・copy()のvisibilityなどKotlinが持つ課題、また成長方向を見据えてのイミュータブルを軸にしたプログラミング
・Gradle Kotlin DSLによるマルチプロジェクトなクリーンアーキテクチャ
・マイクロサービス間の結合度合いを意識した段階的データ洗浄フローのアプリケーション実装
を通じて、Kotlinをなぜ選定したかどう活用したか、そして負債を解消する具体手法と知見を共有します。
▪️背景
「CoroutineやFlowのテストがうまく書けない」「期待した値が取れない」「テストが安定して成功しない」、これらはCoroutine・FlowのUnitテストに挑んだ開発者なら誰もが1度は直面する課題ではないでしょうか?
実際のコードでは、リトライ処理、Exception、複数Flowの合成といった、テストには複雑なケースが数多く存在します。
本セッションでは、プロダクション開発でよくある複雑な非同期処理を例に、安定したテストを書くための実践的な手法を紹介します。失敗するテストを出発点に、失敗の原因分析から修正方法までを解説します。
▪️具体的な内容:
・よくある失敗パターンから学ぶ
・時間を制御するテクニック
・Flowテストの基本と応用
・複雑な非同期ロジックに挑む
・MockK×Coroutineの活用法
・テストしやすい設計へのリファクタリング
本セッションでは、ビジネス仕様をできる限りありのままにコードで表現(翻訳)するテクニックをKotlinを用いて解説していきます。
なぜビジネス仕様をありのままに表現したいのでしょうか?それは仕様や解決したい課題を正しく理解するためです。
自然言語で書かれたビジネス仕様は、どうしても曖昧な表現を含んだり、全てのシナリオが考慮されていなかったりします。その結果として出来上がったシステムは、仕様を考えた人(ドメインエキスパート)が想定していない挙動をしてしまうことがあるでしょう。
Kotlinの言語機能を活用してビジネス仕様をコードへ翻訳していくことで、現行の仕様では情報が不十分なときに、コンパイルエラーという形でKotlinが教えてくれるようになります。
最終的に出来上がったコードが、ドメインエキスパートが読んでも理解できるのが理想!
Kotlinは簡潔な言語であり、初学者でも基本的な文法は問題なく理解できると思います。
しかしライブラリやOSSの内部実装を読んでいると、普段自分では書かないような知らない文法が出てきて戸惑ったり、自分はKotlinの力を活かしきれていないのではと感じることもあるでしょう。
そこで本セッションでは、Kotlinをより深く知るために、押さえておきたいKotlinの言語機能を紹介します。
その際はコード例、図表、背景、使い所を交えながら分かりやすさを重視して解説します。
これらの機能を理解すれば、OSS等のコード読解やデバッグが容易になり、保守性・パフォーマンスの高いコードを書くための大きな助けとなるはずです。
内容
・ジェネリクス(in/outなど)
・インライン化(inline, reifiedなど)
・委譲(Delegation)
など
Kotlinでは、val / var、sealed class、suspend 関数、when 式など、Javaにはない独自の構文が存在します。では、それらが実際にどのように動作しているのか、Javaに変換されたコードで確かめたことはありますか?
このセッションでは、KotlinのコードをJavaにデコンパイルして比較することで、言語仕様の裏側を一緒に読み解いていきます。
取り上げるトピック例:
・val と var の違いは、Javaではどう表現される?
・sealed class の継承制限はどのように実現されている?
・suspend 関数の正体は?
・when 式はJavaでどう書き換えられる?
・Kotlinの List / MutableList の中身は何者?
Kotlin Compiler Pluginはコード中間表現の改変によって新しい言語パラダイムをもたらし、IntelliJ Pluginはツール拡張によって開発者を支援します。両者を組み合わせれば、もう1段階上の開発体験を作り出すことができます。
本セッションでは、IDEを経由してアプリ状態を巻き戻す、back-in-time-pluginを題材に、コンパイラ拡張とIDE拡張を組み合わせて、ユニークなToolingシステムを構築する実践的な例を紹介します。
アジェンダ:
・back-in-time-pluginのアーキテクチャ
・FIR/IR拡張による状態の追跡・巻き戻し
・IDEとアプリの連携方法
・Compiler PluginのIDEサポートの現在地
一見魔法に見える機能も、分割してみると単純な機能の組み合わせです。皆さんも大好きなKotlinで、魔法使いになってみませんか?
「Coroutineで処理を書いてみたけど、本当に非同期処理されているの?」「パフォーマンスが出ないのは、どこかでOSスレッドがブロックされてるせい?」「CoroutineとVirtual Threadを併用するとどうなるの?」「ダンプやデバッガの出力は複雑でわからない!」
サーバサイドKotlinのユーザに生じるこれらの疑問に対して、既存のデバッグ手法は煩雑でわかりにくいのが現状です。本セッションでは、Java Agent・JFR・DebugProbesを組み合わせた自作の可視化ツールを使い、CoroutineがどのOSスレッドでいつ動き、suspendされ、またどのOSスレッドがblockされているかをタイムライン表示で直感的に確認できる方法を紹介します。
近年のマイクロサービスアーキテクチャにおいて、サービス間通信の信頼性と効率性はますます重要になっています。本セッションでは、Kotlinを使ってRPC(Remote Procedure Call)通信を実現する方法を初心者向けに解説します。gRPCの概要やProtocol Buffersによるインターフェース定義、Kotlinでの実装方法を、実例を交えてわかりやすく紹介。RESTとの違いや、RPCのメリット・デメリットにも触れながら、Kotlin開発者が押さえておきたいリモート通信の基本を学びます。
Kotlinの data class が提供する copy メソッドは非常に便利ですが、異なるクラスへの状態遷移や、深くネストした Immutable データの更新といった複雑なシナリオでは 多くの手作業によるボイラープレートコードが発生しがちです。
本セッションでは、KotlinのImmutableデータ操作を強力にサポートするArrow Optics と コピー関数を自動生成する KSPプラグインの cream.kt を活用し、これらの課題をどのように解決できるかをご紹介します。
両ライブラリの基本的な使い方から それぞれの得意分野、そしてこれらを組み合わせることで、いかにKotlinのコードがクリーンで保守しやすくなるかを具体的なコード例を交えて解説します。
ライブラリの公開って、敷居が高く難しいと思っていませんか? 私も過去、そう思っていましたが Multiplatform library template ( https://github.com/Kotlin/multiplatform-library-template ) を利用すれば、まったく難しくありません。
このセッションでは Multiplatform library template を利用したライブラリの公開について、私の体験を通して得たつまずきポイントや Tips など付け加えて紹介したいと思います。
このセッションを聞けば、あなたもすぐにライブラリを公開できるようになります。 多くの素敵なライブラリが皆で共有しあえる素敵な世界を願います。
kotlinx-coroutines-test は、 Kotlin Coroutines による非同期処理を確実かつ高速にテストするためのライブラリです。 本ライブラリでは仮想時間制御によって、 物理時間を待たずに進められることで高速なテストを効率よく実装することができます。
では、 これらの機能は具体的にどのように実現されているのでしょうか。
本セッションでは、 「runTest を利用したテストは書いているが内部で何が行われているか分かっていない」という方を対象に、 提供されている各クラスや関数の振る舞いを内部実装から追い、 Coroutines におけるユニットテストへの理解を深めます。
新卒 1 年目でバックエンド開発に配属された登壇者が、Kotlin の Result/runCatching、そして Arrow Core の zipOrAccumulate で Railway Oriented Programming を実践する過程で遭遇した「コンパイルは通るのに意図通りに動かない」落とし穴を、ミニマムな再現コードでご紹介します。
Kotlin中級者の人には当たり前となっている内容かもしれませんが、ぜひエラーハンドリング時には注意して欲しい内容となっています。
モダンなAndroid開発ではビルドロジック共通化のためにGradleのConvention Pluginを使うことが一般的です。
しかし、ただ共通化したいだけなのにPluginの書き方を学ぶのは大変です。
本セッションでは、detektやkoinなどの任意のgradle pluginをConvention Plugin化する方法を実例と共に解説し、誰でもビルドロジックの保守・拡張ができる力を身につけられるよう導きます。
トーク内容(予定)
・ Pluginの実装方法
・ DSLを作成して認知負荷を減らす
・ Declarative Gradleという選択肢
Java や Kotlin がほとんど普及していなかった会社で、本格的にサーバーサイド Kotlin を導入し全社的な標準技術として推進するために行った取り組みや、苦労した話を、技術的な面に焦点を当てて解説します。
最新の Kotlin 事情に合った技術選定や、新規 Kotlin プロジェクトを短期間で立ち上げ可能な環境整備を、実際に社内で行われた事例を基に一例としてご紹介します。
技術選定
環境整備
技術サポート
複雑な状態遷移、手続き的なロジック…これまでのAI開発の常識は、「自律型AI」の登場で過去のものになろうとしています。本セッションでは、ゲームAIの世界で生まれたゴール指向アクションプランニング(GOAP)という強力な設計思想と、それをKotlinでエレガントに実装したエージェントフレームワークEmbabelを紹介します。
GOAPは「何をすべきか(How)」ではなく「何を達成したいか(What)」を定義することで、エージェントが自律的に行動計画を立てることを可能にします。この動的なアプローチは、変化し続けるビジネス要求に対応するエンタープライズAIアプリケーションに革命をもたらす可能性を秘めています。
セッションでは、GOAPの基本概念から、EmbabelがKotlinのDSL構築力、コルーチン、型安全性をいかに活用し、この複雑な自律性を宣言的かつ堅牢に実装しているかをデモで解説します。