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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
370
退屈なことはバッチにやらせよう
makomakok
1
650
Firebase + BoltではじめるSlackアプリ開発
makomakok
0
15k
Other Decks in Technology
See All in Technology
AIとハーネスで育てるトランスコンパイラ / 20260722 Yasushi Katayama
shift_evolve
PRO
3
900
Claude CodeとAmazon Bedrock AgentCoreでつくる、自分だけのAIアシスタント
ymae
0
110
”AIを使う” から ”AIに任せる” へ ─ 開発プロセスを再設計してAIを組織標準にするまで
cyberagentdevelopers
PRO
2
150
それでも、技術なブログを書く理由 #kichijojipm / Why I Still Write Tech Blogs Even Now
shinkufencer
0
780
ソフトウェアアーキテクチャ研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
2
140
事業成長とAI活用を止めないデータ基盤アーキテクチャの設計思想
hiracky16
0
700
AI工学特論: MLOps・継続的評価
asei
10
2.4k
アップデートで何が変わった?デモで学んで使いこなすIBM Bob2.0
muehara
0
250
AI時代の開発生産性を捉え直す — 経営と現場をつなぐ「開発組織のオブザーバビリティ」— / AI Dev Ex Conference 2026
tkyowa
1
1.5k
インシデント事例と パッケージの全量解析に学ぶ ソフトウェアサプライチェーンの守り方 / supply-chain-attack-defense
flatt_security
0
1k
副作用のある Lambda でも Lambda Power Tuning は使えるのか / lambda-power-tuning-side-effects
koukihosaka
2
150
セキュリティ研修【MIXI 26新卒技術研修】
mixi_engineers
PRO
2
200
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
380
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
440
Utilizing Notion as your number one productivity tool
mfonobong
4
460
Marketing to machines
jonoalderson
1
5.6k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
45k
The Language of Interfaces
destraynor
162
27k
We Have a Design System, Now What?
morganepeng
55
8.2k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
270
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
First, design no harm
axbom
PRO
2
1.2k
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