採択
2022/12/10 10:00〜
トラックB
ショート(25分)

しっかり理解する Delegated properties

yanzm あんざいゆき

Android のモダンな UI ツールキットである Jetpack Compose では、State の持つ値に Delegated properties でアクセスすることがよくあります。
このセッションでは Kotlin の Delegated properties について解説し、Android のライブラリでどのように利用されているかを紹介します。

3
ショート(25分)

新規WebアプリケーションでArrow-ktを使った関数型プログラミングを導入してみた話

Dimitrov Chavdar

Kotlinでも関数型プログラミングを実現しやすくするためのライブラリ、Arrow-ktを利用して既存の一部のサービスのリニューアルとなる新規Webアプリケーションを構築することになりました。今回のアプリケーション開発を通じて、Arrow-ktの簡単な紹介と関数型のKotlinの事例の紹介、感じたメリットと課題などを紹介しようと思っています。

ショート(25分)

Javaでも使えるKotlin OSSを目指すためのkotlin.jvmの利用とインターフェース設計

mako_makok 小林 允

私が所属している株式会社ログラスでは、経営管理クラウド「Loglass」をKotlin + Spring Bootで開発しています。
LoglassにはExcel・スプレッドシート出力をする機能が数多く存在するのですが、メンテナンス性に課題があります。
そこで、単一のシートの定義から出力を可能にするライブラリをOSSとして公開することを目標に開発を進めています。
ライブラリはJavaでの利用も想定していますが、ただKotlinで利用しやすいインターフェース設計や実装をすると、いざJavaで見た時に難のあるインターフェースになります。
今回は
・JavaアプリケーションにKotlinを導入することを考えている方
・Kotlinを入れたが、Java利用時のインターフェースに困っている方
を対象に、ライブラリ開発を経て得たkotlin.jvmの利用とインターフェース設計の知見を共有します。

1
ショート(25分)

計算式を型で堅牢にする

duck8823 前田隼輔

我々が提供しているシステムの多くには例えば、単価や個数、割引額など様々な数値が存在しており、それらを組み合わせた計算式が記述されています。
これらの数値をすべて同じ「数値型」としてしまうと、単価に対して割引額を掛けてしまうなどの思わぬバグを生み出してしまうこともあります。

インラインクラス や 演算子オーバーロードを活用することで、
計算式である可読性はそのまま、型で堅牢なプログラムにすることができると考えています。

どちらでも

OpenAPIスキーマ駆動開発による快適な外部連携API開発を実現するための道のり

shenyu_cyan 張沈宇

背景

スキーマ駆動開発が既に多く採用されてきている一方、サーバーサイドKotlinでのノウハウはまだそれ程なく、多くの公開資料はチュートリアルに留まっています。よって、具体的な登り方や実務で受けられる恩恵、そして直面するチャレンジが広く伝わっていないとの実感があります。

概要

弊社はContract-first思想の元OpenAPI Generatorを使った外部向け連携APIの開発を実践しています。我々の応用例をベースに、採用に至った理由や実際の使用感、業務上のユースケースへの対処法をご紹介します。

目次

  • 複数の選択肢からOpenAPIを選んだ理由
  • スキーマ駆動開発の為の守破離
    • 守:OpenAPI Generatorの設定
    • 破:複数API定義の対応やテンプレカスタマイズ実例
    • 離:ジェネレータ自作
  • まとめ
3
採択
2022/12/10 13:00〜
トラックB
ショート(25分)

型だけでバグを減らそう!Kotlinの型パワーをつかった実践タイプセーフエンジニアリング

Yuiiitoto 佐藤有斗

contracts や genericsなど Kotlinは静的型付け言語トップレベルの型機能を有しています。
しかし我々はそれらのリッチな型機能を上手に使いこなせているのでしょうか?
本セッションではKotlinの型機能を使ってコンパイルで検出できる実装ミスを増やしアプリケーションの品質を高める方法を説明します。
Kotlinの機能紹介のみに終始せず、具体的な実装ミス・バグを例にとりながら具体的な実装パターンを紹介していきます。

以下目次

  1. なぜ型を使いこなすことでバグが減るのか?
  2. 型によってバグが減らせる3パターン
    1. 標準の型をラップする
    2. 認可処理などの特定の処理をパスしたことを型で示す
    3. 型でデータの不整合をなくす
  3. まとめ
  4. 最後に: タイプセーフなポストモーテム
8
どちらでも

専門性の高い領域をいかに開発し、テストするか / ドメインエキスパートとのテストケース共同作成を支える技術

agatan_ Agata Naomichi

株式会社ヘンリーでは、診療報酬制度を取り扱うソフトウェアを開発しています。
ソフトウェア開発者として、開発対象のドメイン知識を獲得する必要があることは改めて言うまでもありませんが、診療報酬制度のような専門性の高い領域においては、ドメインエキスパートと力を合わせることで、より良いシステムをより速くデリバリーできると考えています。
特に、高度に専門的な要件の場合、ドメインエキスパート自身の手によってテストケースが作られることが、開発速度やサービスの信頼性・安定性の向上に大きく寄与します。

このセッションでは、Server-side Kotlin で記述されたロジックを、ドメインエキスパートの知識をもとにいかにテストするかについてお話しします。
また、それを可能にするシステムアーキテクチャや、Kotlin 上でいかにドメインを表現し単体テストするか、についてもご紹介します。

3
採択
2022/12/10 10:30〜
トラックB
どちらでも

GraphQL Kotlin + Spring WebFluxで始める、なるべくPure KotlinなGraphQLサーバーの実装入門

yamachoo567 山中 良太

自分の所属するマネーフォワード 名古屋開発拠点では、この1年間GraphQL Kotlin + Spring WebFluxを使ったGraphQLサーバーの実装に取り組んできました。

GraphQL KotlinはGraphQL Javaをラップし、KotlinでのGraphQLクライアントとサーバーの実行を簡素化してくれるライブラリです。
しかしGraphQL Kotlinに関する情報は少なく、実装例もほぼ皆無だったため、自分たちも初期の頃はもがき苦しみました…。

本セッションではGraphQL Kotlinのハマりどころや利用すべきライブラリの機能や使い方を、成功した・失敗し改善した経験をもとに知見を共有します。
今後、GraphQLサーバーの開発を予定している方の選択肢として、サーバーサイドKotlinひいてはGraphQL Kotlinを検討する際の一助となればと思います。

4
ショート(25分)

Kotlin Fest 2019から2022でのKotlinバージョンアップで増えた便利機能100選

ke__kyukyun1828 ke__kyukyun1828

前回のKotlin Festから、早3年の月日が経ちました。

2019年、Kotlin初学者だった方もすっかりKotlinに慣れてきたのではないかと思います。
慣れてくると新しい機能が追加されていること、それを使うことはなかなかできなかったり、気づかないものです。

しかし、Kotlinはこの3年間で多くのバージョンアップをし、多くの機能が追加されてきました。

2019年のKotlinバージョン1.3から現在の1.7に至るまでに追加された便利な機能や変更について話したいと思います。

1
ショート(25分)

KotlinをJavaっぽく書いてしまっていませんか?~kotlin初学者へのすゝめ~

ke__kyukyun1828 ke__kyukyun1828

新卒研修などでJavaでの研修を会社でしている方は多いと思います。

しかし、Javaの研修後に配属されたAndroidチームではすっかりKotlinを使ったチームへとここ数年は変貌していると思います。

研修でJavaにようやく慣れてきたのに・・・というとき、Javaで書いていたものをKotlinを使った場合、戸惑いつつもその使いやすさに驚く人も多いのではないでしょうか。
しかし、あなたが書いてるそのコード、ちょっとJavaっぽくなっていませんか?
Kotlinではもっとキレイに書くことができるんです。

初学者ならではのやりがちなJavaっぽいKotlinの書き方を脱却して、これからのKotlinライフを一緒に楽しみましょう!

2
採択
2022/12/10 15:00〜
トラックA
ショート(25分)

Server-side Kotlinを使うスタートアップでどんなDetektルールが育ったか

kengo_toda Kengo TODA

株式会社ヘンリーではサーバサイドをKotlin(gRPC, Ktor, Koin etc.)で書いています。サービスの品質を高めるため、また拡大期にあるチームへのボーディングを簡単にするため、Detekt拡張を実装して利用しています。
このセッションではどのような課題を解決するためにDetektを利用したか、その結果どのようにコーディング体験が改善されたかをご紹介します。

5
採択
2022/12/10 17:05〜
トラックB
ロング(45分)

Androidアプリにおける Kotlin Coroutines のより良い使い方

yamasa 大石将邦

Kotlin Coroutines は、もはやAndroidアプリ開発において必須の技術となりました。
私達のチームでも Kotlin Coroutines を本格的に導入して数年が経ち、既に多くのコードがコルーチンベースで書き換えられています。

Kotlin Coroutines を用いることで非同期処理などが簡潔に記述できるようになりますが、Androidアプリ上で利用する場合はライフサイクルやキャンセルの扱い方など注意すべき点がいくつか存在します。
今回は、我々のチーム内でのコードレビューから得られた数多くの知見を紹介し、Androidアプリ開発における Kotlin Coroutines のより良い使い方について発表します。

ショート(25分)

プロポーザルを出す技術 〜エンジニアでなくてもできるKotlinから始めるコントリビューション〜

luccafort luccafort

本セッションではKotlinコミュニティがもっと活性化し、技術的コミュニティとして成熟するために「プロポーザルを書く技術」にフォーカスして話します。

皆さん、Kotlinしてますか?
私は「Hello, World」をKotlin Playgroundで書いたことがある程度です。

なぜこのような初心者がトークのプロポーザルを出したのか?
それは私がマネーフォワードで技術広報をしているからです。

本セッションをお聞きになっている方はきっと

「どうやったら社内の素晴らしい取り組みをカンファレンスで発表してくれるだろう?」
「プロポーザルを出してみたいがなにを話せばいいかわからない。」

とお悩みの方ではないでしょうか?

本セッションではほんの少しのやる気があればプロポーザルを出せる技術を紹介します。
初めてのKotlin Festのコントリビューションになることを祈っています。

3
採択
2022/12/10 16:10〜
トラックB
ロング(45分)

可読性から見たKotlinの言語機能 -「使いたい」の、その先へ。

mntsh munetoshi

皆さんご存知の通り、Kotlin には便利で有用な言語機能が豊富にあります。拡張関数・スコープ関数・null許容型・sealed class・data class・コルーチンといった言語機能は、「もう手放せない」という人も多いでしょう。

しかし、有用なはずのこれらの言語機能も、むやみに使ってしまうと有用でなくなってしまうかもしれません。大切なのは、言語機能を使いたいから使うのではなく、「何を改善するのか」という目的を明確にして使うことです。

本セッションでは、我々のチームで共有している「可読性を下げてしまうような不適切な言語機能の使用例」と、「それを防ぐためのベストプラクティス」のいくつかを紹介します。特に、「何となく読みやすいから」ではなく、ベストプラクティスの理由を言語化することに焦点を当てます。

普段のコードレビューで、より建設的な議論を行う足がかりとしていただければ幸いです。

8
ショート(25分)

KVS cacheライブラリKottageでモバイルアプリのSingle Source of Truthを実現する

irgaly irgaly

Kotlin Multiplatform 対応の KVS cache ライブラリ Kottage の使い方を紹介します。

https://github.com/irgaly/kottage

Kottage は Multiplatform (JVM/Android/iOS/macOS/Linux/Windows) で利用できます。

特にモバイルアプリ開発(Android / iOS)では以下のような用途に使われることを想定しています。

  • 期限付き cache データの保存
  • @Serializable の保存
  • API レスポンスキャッシュ
  • Single Source of Truth
  • Paging
  • (Android) Navigation Args 引数渡し

本セッションでは Kottage の基本的な使い方を説明します。

1
採択
2022/12/10 11:05〜
トラックA
ロング(45分)

Kotlin/NativeのNew Memory Managerに移行しよう

ronnnnn_jp 國師 誠也

Kotlinでマルチプラットフォームのモバイルアプリケーション開発を行えるKotlin Multiplatfrom Mobileが2022年10月にBetaとなりました。
JetBrainsはKMM Betaに向けてさまざまな改善に取り組んできましたが、その中でもNew Memory Managerに注力していました。旧Memory ManagerのKotlin/NativeにおけるKotlin coroutinesや並列、非同期処理の課題がKotlin 1.7.20で改善され、新Memory ManagerはBetaステータスとなっています。
本セッションでは、旧Memory Managerの課題とこれまでの対処方法、新旧の比較(仕組み、実装方法、パフォーマンス)、マイグレーション方法、関連ライブラリ(Kotlin coroutines、Ktor)の変更点などをご紹介します。

3
採択
2022/12/10 16:10〜
トラックA
どちらでも

実践的なWebサービスでのJavaからKotlinへの滑らかな移行

masa_edw バーチャルむとう

NewsPicksはローンチから10年近く経っている大きなコードベースのwebアプリケーションです。
もともとはJava+Springで開発されていましたが、開発生産性を向上させる取り組みの一環として2021年末にKotlinを導入し、一年が経過しました。
いまでは新しいコミットはほぼKotlinで行われるようになっており、開発しやすさの体感は確実に向上しています。

この1年間で得られたJavaからKotlinへの移行を滑らかに行うためのノウハウ・役に立った言語機能などを紹介します。

  • やりたいのは生産性向上であって移植ではない
  • 動いてるコードに触らないままKotlin化するテクニック
    • JvmNameアノテーション、移譲、拡張メソッド
  • kotestとJUnitを併存させる
  • Optional、Streamを廃止しKotlinらしく書く
7
ショート(25分)

状態の表現で学ぶ、クラスのうまい使い方(sealed class, objectなど)

catch_all_balls 型付け

Kotlinは、better Javaを掲げる、汎用クラスベースオブジェクト指向言語です。
JavaやScalaはもちろん、他のプログラミング言語にも影響を受けており、有名なnull安全性を始めとした豊富な言語仕様を持ちます。
いっぽうで、多くの機能をもつがゆえに、Kotlinに入門したばかりでは使い所の難しい仕様がいくつかあります。
特に、Kotlinにおけるクラスは、状態の保持と操作を細かくサポートするため、使い方に迷うこともしばしばです。

本セッションでは、状態管理が重要となるドメインを題材に、初見では旨味のイメージしづらいsealed class/interfaceおよびobjectをとりあげます。
それら機能を通じてクラスの振り回し方、さらにはJavaからどのように見えるかを確認し、より納得して使えることを目指します。

2
採択
2022/12/10 14:05〜
トラックA
どちらでも

::class.fixture() pattern — Kotlin 拡張関数を生かした、Test Fixture 管理の紹介

kazuki_matsuda 松田一樹

Test Fixture と呼ばれる形で、テストで多用される前提条件やインスタンスの集合体を適切に管理していくと、ユニットテストが非常に書きやすくなります。

従来 Fixture を CAPITAL_CASE で定義して使い回していましたが、IDE による補完が効きにくいため再利用がしにくいという問題がありました。
そこで、クラスに対する拡張関数として Fixture を定義する事で、Production コードを汚染せずに、IDE による補完の恩恵を受けられる管理ができるようになりました。

セッションでは、具体的な記述方法や、IDE で補完される場合の体験を、デモを交えながら紹介させて頂こうと思っています。

(45分枠であれば、Gradle の TestFixturePlugin ついても、組み合わせた事例も交えつつご紹介します)

6
ショート(25分)

“Designing with types” に学ぶKotlinにおける型を利用したモデリング術

omuomugin 佐々木俊亮

Designing with types (https://fsharpforfunandprofit.com/series/designing-with-types/) というブログシリーズをご存知でしょうか?これは “ Domain Modeling Made Functional” の著者の Scott Wlaschin氏のブログシリーズでF#で型によるモデリング(主にドメイン層)のテクニックをいくつか紹介しているものです。その中でも直和型とステートマシンを利用したテクニックは Kotlin でも Sealed Class と when の網羅性で実現できるものになっています。

本トークでは、上記の直和型についての紹介からそれを用いてなるべくコンパイルタイムで安全で理解しやすいモデルの設計を実際のサーバーサイドKotlinの事例も交えながら紹介していきます。

3