正直に言います。KotlinはJavaでの業務開発経験などがあれば、数日で身につくプログラミング言語です。
一方、Javaに全く触れたことがないプログラマにとっては少し学ぶ量が増えるのも事実です。
本セッションでは、Javaを使ったことのないプログラマを想定し、Kotlinを使うために最低限知っておきたいJavaのこと、そしてKotlinの学び方を考えます。
Composeは、もはやAndroidアプリ開発のためだけのものではありません。Compose Multiplatformの登場により、iOSアプリやデスクトップアプリ、WebアプリなどもComposeを用いることでAndroidと共通化して実装することができるようになりました。
このセッションでは、Android, iOS, Desktop, WebをターゲットにしたKotlin Multiplatformのプロジェクトで実際にJetpack Composeを用いてクロスプラットフォーム開発する方法と、将来的にCompose Multiplatformを導入することを見据えたAndroid開発について発表します。
Kotlinはドメイン駆動開発、その中でも特に値オブジェクトを作る際にも優れた実装が可能です。
本セッションではKotlinでDDDの値オブジェクトを作成する際に遭遇した、公式でも議論されているdata classの問題点と、
それをKotlin独自のvalue classやinvokeなどの機能を組み合わせて実際に解決した経験を元にTipsを共有します。
Kotlinで楽しいDDDライフの一助となれば幸いです!
Gaugeというテスト自動化フレームワークをご存知でしょうか?
弊社ではフロントエンドもバックエンドもGaugeを使ってE2Eテストを実装しています。
Gaugeは色々なプログラミング言語を使ってテストを実装でき、Javaも使用可能なので、つまりKotlinも使用可能です。
GaugeでE2Eテストを書くためにどんな環境が必要なのか、どんなコードを書けば良いのか、具体的にご紹介します。
私は主にRailsでサーバーサイド、Reactでフロントエンドを実装する開発者でした。
しかしある日「Kotlinやらない?」の一言から初めてKotlinと出会い、新規プロダクトのサーバーサイド開発をKotlin、GraphQLで始めることになるのでした。(*ExpediaのGraphQL Kotlinを使用)
・初めてのサーバーサイドKotlinで苦労したこと
・なぜ、チームで誰もGraphQL、Kotlinを触れたことないにも関わらず新規プロダクトの開発がスムーズに進んだのか?
・Kotlin独自の機能がDDDとマッチしたこと
このセッションではKotlinもDDDも新規プロダクトも初めての私がKotlinでの開発で魅了された点、苦労した点、サーバーサイドKotlinを選択してよかった!と思えた体験をお伝えし、サーバーサイドKotlinへ踏み出す一歩を後押しできればと思います!
Compose MultiplatformではDesktopとAndroidのUIは共有できる部分が多く、コードも共通化することができます。しかしCompose for Webではそれができません。なぜなら通常のCompose UIと違い、web-coreモジュールによってDomでUIを作らないとならないためです。
10月にリリースされたCompose Multiplatform 1.2では、experimentalながらもDomではなく共通のUIをブラウザでも利用できます。
本セッションではSkia+WebAssemblyで実現されているこの機能が、現状どういったことができるのか紹介します。
Kotlin1.3でstableになったCoroutinesは今では1.6となり、Androidアプリ開発においてはFirst Class Coroutines Supportとされてから3年が経過しました。私達のチームでも導入されており、もはやなくてはならない存在になったと感じています。
そんなCoroutinesですが、suspend function、Flow、Channel、使い分けられていますか?BroadcastChannelとMutableSharedFlowのどちらを使ったらいいか迷ったりしてませんか?
このセッションでは、kotlinx.coroutinesの最新バージョンをベースにCoroutinesの基本的な使い方を改めて抑えつつ、なんとなくで使っていたChannelやFlowなどをシーンに合わせて選択できるようになることを目指します。
近年JetBrains社は、Kotlin Jupyter KernelやDeep Learningライブラリ (KotlinDL) などを発表し、データサイエンス分野向けのサポートを強化してきました。その中で2022年には、Pythonのpandasに相当する、Kotlin Dataframeを発表しました。
本セッションでは、このKotlin Dataframeについて実際の画面表示を交えて解説し、Pythonなどに馴染みの薄い方でもKotlinだけで簡単なデータ処理とその可視化を行えるようになることを目指します。
話すこと
Kotlinでクロスプラットフォームを構築するとなると、真っ先にKotlin Multiplatform Mobileが思い浮かぶ人もいるかもしれません。しかし、JavaScriptでネイティブアプリケーションが開発できるTitaniumは2022年9月にもSDKのバージョンアップが今もリリースされています。
このセッションはTitaniumの現状やセットアップ方法などを中心に、Kotlin/JSを用いてどのようにTitaniumでの開発を行うかを検討していくセッションとなります。
Flutterのネイティブプラグインを作成するにはiOSではSwift, Object-C、AndroidではJavaやKotlinで書くのが通例です。
しかし両方の言語に精通している人は多くはなく、両プラットフォームに対応したプラグインを作成するのはコストがかかります。
1つのコードで両プラットフォームに対応したライブラリが作れればコスト削減に大きく貢献できるはずです。
幸いにもKotlin Multiplatformは、アプリケーションの作成だけでなくライブラリの作成もサポートしています。
今回、Kotlin Multiplatformを使ってKotlinだけでFlutterのネイティブプラグイン作成に挑戦します。
Kotlinで開発をしている皆さんは、IntelliJ IDEAあるいはAndroid StudioをIDEとして利用している方が多いのではないでしょうか。
これらのIDEのベースとなっているThe IntelliJ Platformは、実はKotlinを用いてPlugin開発をすることができます。なんせIntelliJもKotlinもJetBrains社が開発したものですからね。
普段IDEで開発をしていて、あれができたらいいのに、これができたらもっと便利なのにと思ったこと、ありませんか?
本セッションではKotlinを用いたIntelliJ Plugin開発の基本解説から、ちょっとした開発者体験を向上するためのサンプル実装をいくつか紹介します。
これを機に、みなさんが普段使っている道具箱(IDE)をKotlinを用いて拡張し、開発者体験を向上してみてください!
書いているコードが処理に最適化されているか心配になったご経験がある方はいませんか?
そんな不安を解消できるライブラリが公式からkotlinx benchmarkとして発表されています
kotlinx benchmarkを使用して処理速度を計測し、無駄なマシンリソースを消費しないコードを書きましょう!
話すこと
Kotlin はその最初のリリースから Java との高い相互運用性を持ち Better Java としての地位を確立してきました。
2022年現時点では Kotlin も 1.7 がリリースされ Java も 19 がリリースされています。
これら進化の中で Java も多くの機能拡張がされ、現在の Kotlin の言語仕様では表現できない高度な機能も存在し始めています。
このセッションでは、Java に現在実装されているもしくは導入が検討されている機能の中で、現在の Kotlin では表現できない機能について、どのようにその機能差分を埋めていく想定なのかを KEEP を見ながら紹介し、Kotlin の未来について考えてみたいと思います。
Kotlin は better Java と呼ばれることがあります。しかし本当にそうなのか私は気になりました。
2022年の時点で本当にKotlinを選ぶべきなのか。実はJavaで十分なのでは、という疑問がありました。
これを解消するために、KotlinとJavaで同等のコードを記述して、バイトコードの比較をしてみました。
[アジェンダ]
Gradle Kotlin DSL の stable リリース(Gradle 5.0)からそろそろ丸4年が経ちます。しかし、Groovy による記述が Deprecated になったわけではありません。これは利用者側が2つの言語を理解できることを依然として要求しますし、Gradle Plugin を提供するなら2つの言語に対して頑強でストレスフリーなインターフェースを提供し続ける必要があります。
そこで本トークでは Gradle Kotlin DSL の仕組みを通して Groovy との対応といった具体例を紹介して理解を深めるとともに、Gradle Plugin を制作する上で Groovy/Kotlin DSL の相互運用性のポイントをいくつか紹介します。Kotlin DSL が絡まない Gradle Plugin 開発の Tips は特に紹介しません。
javaにはannotation processorというものがあります。
kotlin開発者は普段kaptとbuild.gradleに宣言を行うことで機能を使用してきました。
kotlinからannotation processorを使用する際には無駄になる処理が多く、ボトルネックが存在しています。
それらの問題を解決すべく、pure kotlinなsymbol processingを提供するkspが開発されました。
今までは雰囲気でkaptを使用していた方、単純に自動生成処理を作りたい方!kspが発表を機会に自動生成の世界に一緒に飛び込みましょう!
普段Kotlinを使ったアプリケーション開発において、アノテーションプロセッサーを使ったコード生成は至るところで利用されています。
Kotlinでは近年KSPが登場し、メジャーなライブラリーの対応が進むなどkaptに代わって主流となりつつあります。
しかし、多くの方はアノテーションプロセッサーを使ってコードを生成することはあってもプロセッサーそのものを作って活用することはないのではないでしょうか。
このセッションではKSPのプロセッサーを作る方法や、実際に私がKSPのプロセッサーを実装して開発に活用した様子や困ったことの解決方法を紹介します。
Kotlin Multiplatform Mobile(KMM)の登場により、Androidアプリ / iOSアプリの一部をKotlinで記述することができるようになりました。
その際、ロジックのみをKotlinで記述し、UIはAndroid / iOS向けにそれぞれ別で実装することが多いと思います。
とはいえ、iOSアプリのUIをKotlinで構築する方法が全く無いわけではありません。
例えば、iOS向けのUIフレームワークであるUIKitをKotlinから呼び出してUIを構築することができます。
Jetbrainsは、Android向けのUIフレームワークであるJetpack ComposeをiOSにも提供できるよう開発を進めています。
このセッションではKotlin NativeでiOSアプリのUIを構築する方法と、現在の課題について紹介します。
Kotlin 1.5から追加されたValue Classは、特定の型のラッパーを効率的に作成することができ、ドメインモデルを型で厳格に表現したいとき等によく使われます。
現在Value Classは単一のプロパティしか持つことができませんが、複数のプロパティを持つアイディアが存在することは知っていますか?
Kotlinの言語仕様が議論されるKEEPには、Value Classが複数プロパティを保持し、完全な不変性を実現するデザインノートが存在します。
これが実現すると、Kotlinにとって大きな変更になることは間違いないでしょう。
このセッションでは、KEEPやその周辺情報を元にValue Classの今と未来について考えます。
今年の6月にリリースされたKotlin 1.7には、K2という丸ごと新しいKotlinコンパイラがプレビューされました。
これはJetBrainsの10年以上のKotlin開発経験を活かし、改めて、発展性、安定性、そして何よりもパフォーマンスを上げるのを目標にしたプロジェクトの成果なのです。
本セッションでは、以前のコンパイラとの仕組みを比較をしながら、一般のユーザーにとって何が変わるのか、について発表します。
IntelliJ IDEAのKotlinプラグインの開発者として、プラグイン側の改善についても話したいと思います。
具体的な説明も多少入りますが、コンパイラ内部をあんまり触ったことがない人でも理解出来ると思いますので、是非お越しください。