Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Javaでも使えるKotlin OSSを目指すためのkotlin.jvmの利用とインターフェー...
Search
mako_makok
December 12, 2022
Technology
960
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Javaでも使えるKotlin OSSを目指すためのkotlin.jvmの利用とインターフェース設計/Use of kotlin.jvm and interface design for Kotlin OSS that can also be used in Java
mako_makok
December 12, 2022
More Decks by mako_makok
See All by mako_makok
Kotlinにおける型の世界と エラーハンドリング / Type World and Error Handling in Kotlin
makomakok
3
1.2k
Slack_API_Wrapper_BoltでBotを爆速開発.pdf
makomakok
0
360
退屈なことはバッチにやらせよう
makomakok
1
650
Firebase + BoltではじめるSlackアプリ開発
makomakok
0
15k
Other Decks in Technology
See All in Technology
Agile and AI Redmine Japan 2026
hiranabe
4
550
product engineering with qa
nealle
0
110
AIは、人間らしい仕事の夢を見るか?─ AI時代のtoB/toEプロダクトを再設計する
techtekt
PRO
0
190
『AIに負けない』より『AIと遊ぶ』」〜ワクワクが最強のテスト・QA学習戦略_公開用
odan611
1
220
フルAIで個人開発して学んだあれこれ / yuruai vol.1
isaoshimizu
0
160
勉強会企画をアプリで構造化してみた 〜そこで見えた、AIとの付き合い方〜 / I've structured a study group plan using an app.
pauli
0
120
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
310
Terraform 101 (初心者向け) 資料
shuadachi
0
120
ClaudeCodeの公式Memory Architecture
nagatsu
0
120
Hatena Engineer Seminar 37 jj1uzh
jj1uzh
0
310
初めてのDatabricks勉強会
taka_aki
2
210
40代で“やっとエンジニアになれた”――閉じた学びを開き、空の青さを知る / 20260628 Naoki Takahashi
shift_evolve
PRO
4
1.4k
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
3
430
Tell your own story through comics
letsgokoyo
1
980
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
New Earth Scene 8
popppiees
3
2.4k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
370
Building Adaptive Systems
keathley
44
3.1k
Thoughts on Productivity
jonyablonski
76
5.2k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
Transcript
1 ©2022 Loglass Inc. Javaでも使えるKotlin OSSを 目指すためのkotlin.jvmの利 用とインターフェース設計 Kotlin Fest
Reject Conference 2022 2022.12.12 小林 允
2 ©2022 Loglass Inc. 小林 允(Makoto Kobayashi) @mako_makok 自己紹介 •
所属: 株式会社ログラス • 好きなもの ◦ Kotlin, Java, Spring Boot, 日本酒 ◦ Java4年、Kotlin 1年くらい ◦ 日本酒は6年くらい
3 ©2022 Loglass Inc. アジェンダ • ログラスでの課題 • Sheetlinについて •
JavaからのSheetlinの利用 • kotlin.jvmの利用
4 ©2022 Loglass Inc. 小林 允(Makoto Kobayashi) 自己紹介 企業価値を向上する 経営管理クラウド
5 ©2022 Loglass Inc. ログラスでの課題 • 経営企画と呼ばれる方たちや事業部長をターゲットとしたプロダクト • 表計算ソフトを利用して予実管理業務を行っている •
表計算ソフトで作った予算をそのままアップロード・連携できる • 逆に表計算ソフトの形式で DLができる • 表計算ソフトはExcelとスプレッドシート両対応している • Apache POIとgoogle-api-services-sheetsを利用している
6 ©2022 Loglass Inc. ログラスでの課題 問題1: 手続きなAPIでセルを定義していく必要がある • 以下はPOIのコードだが、スプレッドシートのクライアントも似たような感じ
7 ©2022 Loglass Inc. ログラスでの課題 • Excelにはあってスプレッドシートにない機能があったりする • 類似機能はあるが、全然プロパティ名が違うことがある ◦
公式ドキュメントを読み込まなければならないので大変 問題2: Excel・スプレッドシート毎に全然違うコードを書くので倍の工数がかかる 機能差分で見た目が微妙に変わる
8 ©2022 Loglass Inc. Sheetlinについて • これらの課題を解決するために Sheetlinというライブラリを開発している • POIやスプレッドシートのクライアントに一定ペインを感じているユーザーはいる認識
• 実際自分もキャリアの中で利用したことがあった • そういったペインを解消できるライブラリ • OSSとして公開することを目標に開発を行っている ◦ Kotlinで開発 ◦ 言語のシェアは圧倒的に Javaが多い ◦ Kotlinはもちろんのこと、Javaで利用しやすいインターフェースを目指している • 現在Loglassのプロダクトに本番投入して検証している
9 ©2022 Loglass Inc. Sheetlinについて • Sheet, Row, Cellなどのような抽象化してい る
• ExcelファイルのByteArrayへの変換、 sheets APIを叩くwrapperを提供 • 宣言的に書くことができる
10 ©2022 Loglass Inc. JavaでのSheetlinの利用 • これだけ見るとなんの変哲もないインターフェー ス • しかしJavaから見ると結構辛いインターフェース
になる
11 ©2022 Loglass Inc. JavaでのSheetlinの利用 • ofのような一見Kotlinから見ると、クラスに static methodが生えているように見えるが違う •
Kotlin側でデフォルト引数を書いても適用されな い • 引数をnamedで書けないのでインスタンス生成 のエクスペリエンスが悪い
12 ©2022 Loglass Inc. kotlin.jvmの利用 • 生成されるバイトコードを変化させることができる • アノテーションで記述していく •
主にシグネチャを変更するようなアノテーションが多い • Kotlinで書いたコードをJavaで利用する時に便利 kotlin.jvmとは
13 ©2022 Loglass Inc. kotlin.jvmの利用 • ofの実装は companion object {
fun of(...) = Cell(...) }となっている • コンパイルすると、クラスに Companionというシングルトンのオブジェクトの中に ofがある • Kotlinから利用するときは Companionを省略できる • Cell.of() == Cell.Companion.of() • CompanionはKotlinの都合なので、Javaから見るともちろんCompanionは省略できない • JvmStaticを使う ofのような一見Kotlinから見るとstaticっぽいやつが実はstaticではない
14 ©2022 Loglass Inc. kotlin.jvmの利用 JvmStaticをつけるとStaticメソッドとして生成される ofのような一見Kotlinから見るとstaticっぽいやつが実はstaticではない
15 ©2022 Loglass Inc. kotlin.jvmの利用 • 似た挙動をするものとして JvmFieldがある • companion
object内に定義したフィールドにアノテートすると static なフィールドとして解釈される ofのような一見Kotlinから見るとstaticっぽいやつが実はstaticではない
16 ©2022 Loglass Inc. kotlin.jvmの利用 • Javaにはデフォルト引数が無いので特に何も機能しない • JvmOverloadsを使う •
引数に取らないプロパティは Kotlinのデフォルト引数に設定している値が設定される Kotlin側でデフォルト引数を書いても適用されない
17 ©2022 Loglass Inc. kotlin.jvmの利用 • Kotlinだとnamedで書けるので気にならない が、Javaだと意味わからない 引数をnamedで書けないのでインスタンス生成のエクスペリエンスが悪い
18 ©2022 Loglass Inc. kotlin.jvmの利用 • 素直にビルダーパターンで 記述するインターフェースに 引数をnamedで書けないのでインスタンス生成のエクスペリエンスが悪い
19 ©2022 Loglass Inc. kotlin.jvmの利用 kotlin.jvmのその他のアノテーション • JvmRecord ◦ クラスにつけるとrecordとして生成できる
• JvmName ◦ クラスやメソッドにつけることができ、生成される名称を変更することができる • JvmWildcard, JvmSuppressWirldcard ◦ ワイルドカードの生成をコントロールできる
20 ©2022 Loglass Inc. さいごに • kotlin.jvmのアノテーションを利用したり、インターフェス設計を行なうことで相互運用は問題なく行 える • ライブラリをベースにお話しましたが、
Kotlinを途中で導入した場合にも使えるプラクティスです • 設計パターンはOSSのokhttpをめちゃくちゃ参考にさせていただいています
21