Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Javaでも使えるKotlin OSSを目指すためのkotlin.jvmの利用とインターフェー...
Search
mako_makok
December 12, 2022
Technology
1k
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.3k
Slack_API_Wrapper_BoltでBotを爆速開発.pdf
makomakok
0
380
退屈なことはバッチにやらせよう
makomakok
1
670
Firebase + BoltではじめるSlackアプリ開発
makomakok
0
15k
Other Decks in Technology
See All in Technology
その Valkey 使いこなしていますか?
onk
PRO
5
1.6k
Gemini Intelligence 入門 ― AppFunctions と Gemini Nano
takuroabe
0
290
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
180
How to Design Configuration for Rails Applications
willnet
1
830
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.7k
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
200
価値について
gree_tech
PRO
0
100
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
890
ウォンテッドリーの最近のプロダクトと技術の紹介
stomk
0
130
Claude の新機能を、 出た日に触って社内に届けるまで
rfdnxbro
1
190
NDIでApple Vision Proにリアルタイム映像送信
jyouryuusui
0
130
Featured
See All Featured
Paper Plane
katiecoart
PRO
5
54k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Designing Experiences People Love
moore
143
24k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Producing Creativity
orderedlist
PRO
348
41k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
A Tale of Four Properties
chriscoyier
163
24k
The agentic SEO stack - context over prompts
schlessera
0
970
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
530
Statistics for Hackers
jakevdp
799
230k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
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