どちらでも

Java未経験者のためのKotlin入門

yy_yank yy_yank

正直に言います。KotlinはJavaでの業務開発経験などがあれば、数日で身につくプログラミング言語です。
一方、Javaに全く触れたことがないプログラマにとっては少し学ぶ量が増えるのも事実です。

本セッションでは、Javaを使ったことのないプログラマを想定し、Kotlinを使うために最低限知っておきたいJavaのこと、そしてKotlinの学び方を考えます。

2
どちらでも

ComposeとKotlin Multiplatformを用いたクロスプラットフォーム開発

yt8492 マヤミト

Composeは、もはやAndroidアプリ開発のためだけのものではありません。Compose Multiplatformの登場により、iOSアプリやデスクトップアプリ、WebアプリなどもComposeを用いることでAndroidと共通化して実装することができるようになりました。

このセッションでは、Android, iOS, Desktop, WebをターゲットにしたKotlin Multiplatformのプロジェクトで実際にJetpack Composeを用いてクロスプラットフォーム開発する方法と、将来的にCompose Multiplatformを導入することを見据えたAndroid開発について発表します。

1
どちらでも

Kotlin/JSとTitaniumで構築するクロスプラットフォームの世界

coffeegyunyu 日向強

Kotlinでクロスプラットフォームを構築するとなると、真っ先にKotlin Multiplatform Mobileが思い浮かぶ人もいるかもしれません。しかし、JavaScriptでネイティブアプリケーションが開発できるTitaniumは2022年9月にもSDKのバージョンアップが今もリリースされています。

このセッションはTitaniumの現状やセットアップ方法などを中心に、Kotlin/JSを用いてどのようにTitaniumでの開発を行うかを検討していくセッションとなります。

どちらでも

KotlinによるIntelliJ Plugin開発で、道具箱に磨きをかけよう!

itohiro73 いとひろ

Kotlinで開発をしている皆さんは、IntelliJ IDEAあるいはAndroid StudioをIDEとして利用している方が多いのではないでしょうか。

これらのIDEのベースとなっているThe IntelliJ Platformは、実はKotlinを用いてPlugin開発をすることができます。なんせIntelliJもKotlinもJetBrains社が開発したものですからね。

普段IDEで開発をしていて、あれができたらいいのに、これができたらもっと便利なのにと思ったこと、ありませんか?

本セッションではKotlinを用いたIntelliJ Plugin開発の基本解説から、ちょっとした開発者体験を向上するためのサンプル実装をいくつか紹介します。

これを機に、みなさんが普段使っている道具箱(IDE)をKotlinを用いて拡張し、開発者体験を向上してみてください!

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

Java の進化と Kotlin の未来

gakuzzzz がくぞ

Kotlin はその最初のリリースから Java との高い相互運用性を持ち Better Java としての地位を確立してきました。
2022年現時点では Kotlin も 1.7 がリリースされ Java も 19 がリリースされています。
これら進化の中で Java も多くの機能拡張がされ、現在の Kotlin の言語仕様では表現できない高度な機能も存在し始めています。

このセッションでは、Java に現在実装されているもしくは導入が検討されている機能の中で、現在の Kotlin では表現できない機能について、どのようにその機能差分を埋めていく想定なのかを KEEP を見ながら紹介し、Kotlin の未来について考えてみたいと思います。

4
どちらでも

JavaとKotlinのコードをバイトコードレベルで比較して気づいたKoltinの良さ

baseballyama_ Yuichiro Yamashita

Kotlin は better Java と呼ばれることがあります。しかし本当にそうなのか私は気になりました。
2022年の時点で本当にKotlinを選ぶべきなのか。実はJavaで十分なのでは、という疑問がありました。
これを解消するために、KotlinとJavaで同等のコードを記述して、バイトコードの比較をしてみました。

[アジェンダ]

  1. 前提知識
  2. 何をしたのか
    • 定量 : コンパイル速度 / 実行速度 / 実装量
    • 定性 : バイトコードを見て気づいたこと
  3. 具体的な比較結果 (例)
    • Hello World
    • companion object
    • 拡張関数
    • 中置記法
    • ラッパークラス (例 : Integer)
    • インライン関数
    • ラムダ式
    • Coroutine
      .. など
  4. 全体を通して感じたこと
1
採択
2022/12/10 13:30〜
トラックA
どちらでも

Kotlin Symbol Processing APIを使ってKotlinアプリケーションの開発を効率化する

takuji31 takuji31

普段Kotlinを使ったアプリケーション開発において、アノテーションプロセッサーを使ったコード生成は至るところで利用されています。
Kotlinでは近年KSPが登場し、メジャーなライブラリーの対応が進むなどkaptに代わって主流となりつつあります。
しかし、多くの方はアノテーションプロセッサーを使ってコードを生成することはあってもプロセッサーそのものを作って活用することはないのではないでしょうか。

このセッションではKSPのプロセッサーを作る方法や、実際に私がKSPのプロセッサーを実装して開発に活用した様子や困ったことの解決方法を紹介します。

  • KSPを使う理由
  • KSPのプロセッサーを作る
  • マルチラウンドに対応する
  • インクリメンタル処理に対応する
  • マルチモジュールでプロセッサーを活用する
  • プロセッサーをテストする
1
どちらでも

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

shenyu_cyan 張沈宇

背景

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

概要

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

目次

  • 複数の選択肢からOpenAPIを選んだ理由
  • スキーマ駆動開発の為の守破離
    • 守:OpenAPI Generatorの設定
    • 破:複数API定義の対応やテンプレカスタマイズ実例
    • 離:ジェネレータ自作
  • まとめ
3
どちらでも

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

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
採択
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
採択
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
採択
2022/12/10 17:05〜
トラックA
どちらでも

Kotlin製自作OSSの普及戦略 ~kotlin-csvの実例を元に~

doyaaaaaken 小山 健太

このセッションでは登壇者が自作しているOSS "kotlin-csv"(https://github.com/doyaaaaaken/kotlin-csv )についてGithubのStar数450超になるまでどのようにして普及させたのかについて紹介します。

自作OSSというと『プライベートの時間を多く費やして』『自身の技術的ロマンを詰め込んだものを作る』イメージがあるかと思いますが、登壇者は『なるべく時間を使わずメンテでき』『技術的ロマンはなくてもいいので』『世界の人々から実際に使われる』ライブラリにすることを戦略的に目指して作りました。
なぜそういった目標を立てたのか、目標実現のために立てた戦略、開発中に直面したトラブル、開発後の運用で得た気づきなどについてなるべく具体的に共有することで、今後自作OSSを作る人・作りたい人の参考になる内容にしたいと思います。

3
どちらでも

KotlinのGenericsとReflectionの応用と実務での活用

chimerast たけうち ひでゆき

KotlinのGenericsとReflectionの組み合わせは、reifiedキーワードの存在により、強く型安全なコードを書く事ができるようになっています。

Generic TypesのReflectionでどんな操作ができるのか、GenericsとReflectionをうまく組み合わせると何ができるのか、実務で使っているソースコードを基に実際の挙動を通してお話しします。

このセッションを聞くことで、下記のスライド(22ページ目)の内容が理解できるようになると思います。

Exposed DAOで、IDカラムをValueObjectのまま扱う
https://speakerdeck.com/chimerast/exposed-ying-yong-bian-nei-bu-shi-zhuang-to-mo-kuo-zhang?slide=22

3
どちらでも

【コンパイラプラグイン】ユースケースと共に解説するKotlinコンパイラプラグインの作り方

baseballyama_ Yuichiro Yamashita

このセッションでは、Kotlinコンパイラプラグインのユースケースと実装方法を解説します。

【アジェンダ】
👉 コンパイラプラグインの種類のご紹介
👉 ライブコーディング
👉 参考資料の共有

今回ライブコーディングで解説するコンパイラプラグインは以下です。
1️⃣ クラスAからクラスBを自動生成するプラグイン
2️⃣ 独自のコンパイルエラーをスローするプラグイン

ユースケース以下です。
1️⃣ 全ての独自型に対してプリミティブ型との相互変換クラスを実装する必要がある場合 (例えばORMの型マッピング)
2️⃣ 自動生成したクラスが正しく利用されているかを検査したい場合

今回は、ライブコーディングで実際に動作するコンパイラプラグインを実装します。

7