Kotlinはドメイン駆動開発、その中でも特に値オブジェクトを作る際にも優れた実装が可能です。
本セッションではKotlinでDDDの値オブジェクトを作成する際に遭遇した、公式でも議論されているdata classの問題点と、
それをKotlin独自のvalue classやinvokeなどの機能を組み合わせて実際に解決した経験を元にTipsを共有します。
Kotlinで楽しいDDDライフの一助となれば幸いです!
Gaugeというテスト自動化フレームワークをご存知でしょうか?
弊社ではフロントエンドもバックエンドもGaugeを使ってE2Eテストを実装しています。
Gaugeは色々なプログラミング言語を使ってテストを実装でき、Javaも使用可能なので、つまりKotlinも使用可能です。
GaugeでE2Eテストを書くためにどんな環境が必要なのか、どんなコードを書けば良いのか、具体的にご紹介します。
近年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のネイティブプラグイン作成に挑戦します。
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の今と未来について考えます。
Kotlinでも関数型プログラミングを実現しやすくするためのライブラリ、Arrow-ktを利用して既存の一部のサービスのリニューアルとなる新規Webアプリケーションを構築することになりました。今回のアプリケーション開発を通じて、Arrow-ktの簡単な紹介と関数型のKotlinの事例の紹介、感じたメリットと課題などを紹介しようと思っています。
私が所属している株式会社ログラスでは、経営管理クラウド「Loglass」をKotlin + Spring Bootで開発しています。
LoglassにはExcel・スプレッドシート出力をする機能が数多く存在するのですが、メンテナンス性に課題があります。
そこで、単一のシートの定義から出力を可能にするライブラリをOSSとして公開することを目標に開発を進めています。
ライブラリはJavaでの利用も想定していますが、ただKotlinで利用しやすいインターフェース設計や実装をすると、いざJavaで見た時に難のあるインターフェースになります。
今回は
・JavaアプリケーションにKotlinを導入することを考えている方
・Kotlinを入れたが、Java利用時のインターフェースに困っている方
を対象に、ライブラリ開発を経て得たkotlin.jvmの利用とインターフェース設計の知見を共有します。
我々が提供しているシステムの多くには例えば、単価や個数、割引額など様々な数値が存在しており、それらを組み合わせた計算式が記述されています。
これらの数値をすべて同じ「数値型」としてしまうと、単価に対して割引額を掛けてしまうなどの思わぬバグを生み出してしまうこともあります。
インラインクラス や 演算子オーバーロードを活用することで、
計算式である可読性はそのまま、型で堅牢なプログラムにすることができると考えています。
前回の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コミュニティがもっと活性化し、技術的コミュニティとして成熟するために「プロポーザルを書く技術」にフォーカスして話します。
皆さん、Kotlinしてますか?
私は「Hello, World」をKotlin Playgroundで書いたことがある程度です。
なぜこのような初心者がトークのプロポーザルを出したのか?
それは私がマネーフォワードで技術広報をしているからです。
本セッションをお聞きになっている方はきっと
「どうやったら社内の素晴らしい取り組みをカンファレンスで発表してくれるだろう?」
「プロポーザルを出してみたいがなにを話せばいいかわからない。」
とお悩みの方ではないでしょうか?
本セッションではほんの少しのやる気があればプロポーザルを出せる技術を紹介します。
初めてのKotlin Festのコントリビューションになることを祈っています。
Kotlin Multiplatform 対応の KVS cache ライブラリ Kottage の使い方を紹介します。
https://github.com/irgaly/kottage
Kottage は Multiplatform (JVM/Android/iOS/macOS/Linux/Windows) で利用できます。
特にモバイルアプリ開発(Android / iOS)では以下のような用途に使われることを想定しています。
本セッションでは Kottage の基本的な使い方を説明します。
Kotlinは、better Javaを掲げる、汎用クラスベースオブジェクト指向言語です。
JavaやScalaはもちろん、他のプログラミング言語にも影響を受けており、有名なnull安全性を始めとした豊富な言語仕様を持ちます。
いっぽうで、多くの機能をもつがゆえに、Kotlinに入門したばかりでは使い所の難しい仕様がいくつかあります。
特に、Kotlinにおけるクラスは、状態の保持と操作を細かくサポートするため、使い方に迷うこともしばしばです。
本セッションでは、状態管理が重要となるドメインを題材に、初見では旨味のイメージしづらいsealed class/interfaceおよびobjectをとりあげます。
それら機能を通じてクラスの振り回し方、さらにはJavaからどのように見えるかを確認し、より納得して使えることを目指します。
Designing with types (https://fsharpforfunandprofit.com/series/designing-with-types/) というブログシリーズをご存知でしょうか?これは “ Domain Modeling Made Functional” の著者の Scott Wlaschin氏のブログシリーズでF#で型によるモデリング(主にドメイン層)のテクニックをいくつか紹介しているものです。その中でも直和型とステートマシンを利用したテクニックは Kotlin でも Sealed Class と when の網羅性で実現できるものになっています。
本トークでは、上記の直和型についての紹介からそれを用いてなるべくコンパイルタイムで安全で理解しやすいモデルの設計を実際のサーバーサイドKotlinの事例も交えながら紹介していきます。
登壇者はKtorをv1.0.0-betaの頃に導入し、4年近く自社サービスの本番環境で利用していました。
そしてつい先日、2022/4にリリースされたKtor v2へのアップグレードを実施しました。
Ktor v2のメジャーバージョンアップグレードでv1と何が変わったのか、どのようにアップグレードを進めるべきか、どういったトラブルに直面するのかなどについて、得た知見をシェアしたいと思います。
Kotlinを用いたのAndroidアプリの開発、Swiftを用いてのiOSアプリの開発、Dartを用いてのFlutterでのiOS/Androidアプリ開発、C#を用いてのUnityでのゲーム開発など現代のモバイルアプリで使われている技術を経験してきた私が、それぞれの言語機能の比較を簡単に行い、Kotlinのこの言語機能が良い、この書き味が最高というのを紹介していこうと思います。
ボリュームの関係で何かの言語が削られたり、中身の比較の関係でTypeScriptやScalaが出てくるかもしれないですが、そこは暖かく見守ってください。