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だけで簡単なデータ処理とその可視化を行えるようになることを目指します。
話すこと
Flutterのネイティブプラグインを作成するにはiOSではSwift, Object-C、AndroidではJavaやKotlinで書くのが通例です。
しかし両方の言語に精通している人は多くはなく、両プラットフォームに対応したプラグインを作成するのはコストがかかります。
1つのコードで両プラットフォームに対応したライブラリが作れればコスト削減に大きく貢献できるはずです。
幸いにもKotlin Multiplatformは、アプリケーションの作成だけでなくライブラリの作成もサポートしています。
今回、Kotlin Multiplatformを使ってKotlinだけでFlutterのネイティブプラグイン作成に挑戦します。
書いているコードが処理に最適化されているか心配になったご経験がある方はいませんか?
そんな不安を解消できるライブラリが公式からkotlinx benchmarkとして発表されています
kotlinx benchmarkを使用して処理速度を計測し、無駄なマシンリソースを消費しないコードを書きましょう!
話すこと
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 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の今と未来について考えます。
Android のモダンな UI ツールキットである Jetpack Compose では、State の持つ値に Delegated properties でアクセスすることがよくあります。
このセッションでは Kotlin の Delegated properties について解説し、Android のライブラリでどのように利用されているかを紹介します。
Kotlinでも関数型プログラミングを実現しやすくするためのライブラリ、Arrow-ktを利用して既存の一部のサービスのリニューアルとなる新規Webアプリケーションを構築することになりました。今回のアプリケーション開発を通じて、Arrow-ktの簡単な紹介と関数型のKotlinの事例の紹介、感じたメリットと課題などを紹介しようと思っています。
私が所属している株式会社ログラスでは、経営管理クラウド「Loglass」をKotlin + Spring Bootで開発しています。
LoglassにはExcel・スプレッドシート出力をする機能が数多く存在するのですが、メンテナンス性に課題があります。
そこで、単一のシートの定義から出力を可能にするライブラリをOSSとして公開することを目標に開発を進めています。
ライブラリはJavaでの利用も想定していますが、ただKotlinで利用しやすいインターフェース設計や実装をすると、いざJavaで見た時に難のあるインターフェースになります。
今回は
・JavaアプリケーションにKotlinを導入することを考えている方
・Kotlinを入れたが、Java利用時のインターフェースに困っている方
を対象に、ライブラリ開発を経て得たkotlin.jvmの利用とインターフェース設計の知見を共有します。
我々が提供しているシステムの多くには例えば、単価や個数、割引額など様々な数値が存在しており、それらを組み合わせた計算式が記述されています。
これらの数値をすべて同じ「数値型」としてしまうと、単価に対して割引額を掛けてしまうなどの思わぬバグを生み出してしまうこともあります。
インラインクラス や 演算子オーバーロードを活用することで、
計算式である可読性はそのまま、型で堅牢なプログラムにすることができると考えています。
contracts や genericsなど Kotlinは静的型付け言語トップレベルの型機能を有しています。
しかし我々はそれらのリッチな型機能を上手に使いこなせているのでしょうか?
本セッションではKotlinの型機能を使ってコンパイルで検出できる実装ミスを増やしアプリケーションの品質を高める方法を説明します。
Kotlinの機能紹介のみに終始せず、具体的な実装ミス・バグを例にとりながら具体的な実装パターンを紹介していきます。
以下目次
前回のKotlin Festから、早3年の月日が経ちました。
2019年、Kotlin初学者だった方もすっかりKotlinに慣れてきたのではないかと思います。
慣れてくると新しい機能が追加されていること、それを使うことはなかなかできなかったり、気づかないものです。
しかし、Kotlinはこの3年間で多くのバージョンアップをし、多くの機能が追加されてきました。
2019年のKotlinバージョン1.3から現在の1.7に至るまでに追加された便利な機能や変更について話したいと思います。
新卒研修などでJavaでの研修を会社でしている方は多いと思います。
しかし、Javaの研修後に配属されたAndroidチームではすっかりKotlinを使ったチームへとここ数年は変貌していると思います。
研修でJavaにようやく慣れてきたのに・・・というとき、Javaで書いていたものをKotlinを使った場合、戸惑いつつもその使いやすさに驚く人も多いのではないでしょうか。
しかし、あなたが書いてるそのコード、ちょっとJavaっぽくなっていませんか?
Kotlinではもっとキレイに書くことができるんです。
初学者ならではのやりがちなJavaっぽいKotlinの書き方を脱却して、これからのKotlinライフを一緒に楽しみましょう!
株式会社ヘンリーではサーバサイドをKotlin(gRPC, Ktor, Koin etc.)で書いています。サービスの品質を高めるため、また拡大期にあるチームへのボーディングを簡単にするため、Detekt拡張を実装して利用しています。
このセッションではどのような課題を解決するためにDetektを利用したか、その結果どのようにコーディング体験が改善されたかをご紹介します。