1 of 26

Kotlin でライブラリを

メンテしていて

よかったこと

Kazuhiro Sera (@seratch)

Server-Side Kotlin Meetup vol.7 – Kotlin × OSS (2023-01-20)

2 of 26

今日お話しすること

  • 簡単な自己紹介
  • Kotlin で作ってきたもの
  • 非互換な言語変更が極めて少ない
  • Java のサポートの実績も多い
  • 気軽に貢献してもらえる
  • さりげなく言語機能を教えてもらえる

3 of 26

簡単な自己紹介

4 of 26

Kotlin で作ってきたもの

  • KotliQuery (⭐185)
    • JDBC を Kotlin らしく利用可能に
  • 公式 Slack Java SDK (⭐493)
    • Slack API の Kotlin DSL
    • Ktor, HTTP4K の標準サポート
  • “非公式” Notion API SDK (⭐93)
    • Notion API の Kotlin/Java ラッパー

5 of 26

KotliQuery (1/2)

6 of 26

KotliQuery (2/2)

7 of 26

公式 Slack Java SDK (1/2)

8 of 26

公式 Slack Java SDK (2/2)

9 of 26

“非公式” Notion API SDK

10 of 26

非互換な言語変更が極めて少ない

  • OSS 的にはメンテナンスコストに直結
    • 言語のバージョンアップが楽
    • 数年前に書いたコードがそのまま動くのは正義
  • 自分の経験の範囲では:
    • ソースコード互換性の問題は経験なし
    • 広範囲に影響する deprecation も経験なし
    • バイナリ互換性の問題は一件(次のスライド)

11 of 26

バイナリ互換性の問題 (Kotlin 1.2 -> 1.3)

NoSuchMethodError kotlin.collections.ArraysKt.copyInto([B[BIII)

12 of 26

Java のサポートの実績も多い

  • Java からの利用のためのアノテーション

( @JvmStatic @JvmOverloads @Throws 等)

  • 利用側で Kotlin のランタイムが必要にはなるが、前述の通り互換性の問題は少ない
  • 例:Square の OkHttp
    • https://github.com/square/okhttp
    • 元々 Java で後から Kotlin に書き直された
    • Java からの利用は全く問題ない

13 of 26

気軽に貢献してもらえる

  • PR を気軽に送ってくれる人が多い印象、理由はよくわかっていないが・・
    • Android アプリ開発で触ったことあるから?
    • Java 的な重厚な構造になりにくいから?
    • Scala 等に比べるととっつきやすいから?
  • 著名フレームワーク作者などもフットワークが軽い(例:HTTP4K 共同作者自ら PR くれる)

14 of 26

さりげなく言語機能を教えてもらえる

勉強不足の私にコミュニティの人たちがイケてる言語機能をさりげなく教えてくれる🙇🙇🙇

  • let 等のスコープ関数の基本(KotliQuery)
  • Inline Function の使い方(KotliQuery)
  • @JvmOverloads で楽々 Java 対応(Notion SDK)
  • Type-safe builders を使った DSL(Slack SDK)

15 of 26

let 使うんやでと教えてくれた人🙇

16 of 26

java.sql.Array を少し楽に扱う対応🙇

17 of 26

Inline Function 対応してくれた人🙇

18 of 26

Kotlin 本を書いてるらしい📖

19 of 26

@JvmOverloads を教えていただいた🙇

20 of 26

期待の新人がサクッと Ktor v2 対応🚀

21 of 26

Ktor 対応を直してくれたロシアの人🙇

22 of 26

Ktor 対応で直してくれたダブリンの人🙇

23 of 26

HTTP4K 共同作者が完璧な PR をくれた💯

24 of 26

Slack SDK の Kotlin DSL は外部から貢献🙇

25 of 26

使い勝手の動画 / @Kotlin が QT 🙇

26 of 26

終わりに

  • とにかくメンテナンスが大変でない(=しばらく放置してても大丈夫)というのが良い
  • 頻繁に言語・依存ライブラリの都合で時間を取られるエコシステムだと片手間で続けられない
  • クロスプラットフォーム系は興味ないかも・・
  • 今後もゆるゆるとメンテしていくつもりです!