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とGroovyで書かれたGradleプラグインをKotlinで書き直した話 / Con...
Search
Kengo TODA
October 26, 2023
Programming
1.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JavaとGroovyで書かれたGradleプラグインをKotlinで書き直した話 / Converted a Gradle plugin from Groovy&Java to Kotlin
2023/Oct/26 集まれKotlin好き!Kotlin愛好会 vol.47 で発表したものです。
Kengo TODA
October 26, 2023
More Decks by Kengo TODA
See All by Kengo TODA
生成AI 業務応用向けガイドライン 斜め読み / Overview of Generative AI Business Application Guidelines
eller86
0
190
KotlinユーザのためのJSpecify入門 / JSpecify 101 for Kotlin Devs
eller86
0
2k
ヒューマンスキル / The Humanskills
eller86
0
760
医療機関向けシステムの信頼性 / Reliability of systems for medical institutions
eller86
0
530
Server-side Kotlinを使うスタートアップでどんなDetektルールが育ったか / Detekt rules made in start-up working with Server-side Kotlin
eller86
0
1.6k
Java開発者向けのKotlin Gradleビルドスクリプト入門 / Gradle Build Script in Kotlin 101
eller86
1
2.2k
Goodbye JSR305, Hello JSpecify!
eller86
2
5.5k
Java8〜16におけるバイトコード生成の変化 / Changes of Bytecode Generation from Java 8 to 16
eller86
4
4.7k
Javaプログラミングの体験向上に関する活動 / DX enhancement around Java programming
eller86
0
4k
Other Decks in Programming
See All in Programming
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
200
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
740
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
280
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
400
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
350k
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
180
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
210
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
570
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
580
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
2
710
1B+ /day規模のログを管理する技術
broadleaf
0
110
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
620
Being A Developer After 40
akosma
91
590k
Practical Orchestrator
shlominoach
191
11k
Navigating Team Friction
lara
192
16k
Google's AI Overviews - The New Search
badams
0
1k
RailsConf 2023
tenderlove
30
1.5k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
400
A Tale of Four Properties
chriscoyier
163
24k
Why Our Code Smells
bkeepers
PRO
340
58k
The Language of Interfaces
destraynor
162
27k
Producing Creativity
orderedlist
PRO
348
40k
Transcript
JavaとGroovyで書かれた Gradleプラグインを Kotlinで書き直した話 2023/Oct/26 集まれKotlin好き!Kotlin愛好会 vol.47 Kengo TODA
#LOVE_KOTLIN 自己紹介 フリーソフトウェア開発出身。OSSエンジニアやBtoB研究開発を経て、現在は 医療機関向けにウェブサービスを提供する株式会社ヘンリーでSREやCorporate Engineerを担当。元SpotBugsの中の人。 ChatGPTと一緒に数学書とか論文とかを読むのが最近のマイブーム。 https://twitter.com/Kengo_TODA https://github.com/KengoTODA 2
#LOVE_KOTLIN 今日話すこと JavaとGroovyで書いてあった spotbugs-gradle-plugin をKotlinで書き直してRC版リ リースまで漕ぎつけたので、所感を共有します! 3
#LOVE_KOTLIN Agenda 1. JavaとGroovyで書いて課題だと感じていたこと 2. Kotlinの流れがきた! 3. 書き換えプロセスの体験 4. Kotlinで書いて良かったところ
4
#LOVE_KOTLIN JavaとGroovyで書いて課題だと感じていたこと - null-safetyがない、アノテーションでの補完は漏れが生じる - Groovyにtype-safety がない、IDEによる補完が効かないことがある - Gradleの文書がKotlinとGroovyを前提にしていて、Javaで書きにくい -
周りにGroovyを書いているひとがいなくなった - 昔はJenkinsfileでけっこう書かれていた( 2016年〜) - GradleのGroovy対応がv3に留まっている - 2022年からv4を検証してるけどGradle 8.0から9.0に対応を延期したので優先度高くなさそう 5
#LOVE_KOTLIN Kotlinの流れがきた! - 2022年、自分がサーバサイドKotlinを書いてる企業に転職した - 周りにKotlinを書いているひとが多い環境になった - 2023年、GradleがKotlinをDSLの標準言語にした - 以前「Java開発者向けのKotlin
Gradleビルドスクリプト入門 」を話したのでご参考まで - Gradleが提供するドキュメントも多い - 何なら公式プラグインも Kotlinで書かれていたりする - Kotlinなら型安全、null安全、強力なIDEの支援などが一気に解決される 6
#LOVE_KOTLIN Javaからの書き換え 簡単だったので語るべきところがない - IntelliJ IDEAがJava→Kotlinの変換をだいたいやってくれる - IntelliJ IDEAがKotlinらしい書き方のサジェストもしてくれる -
だいたいIntelliJ IDEAに任せておけば間違いない - フォーマットもSpotless(ktlint)にお任せ 7
#LOVE_KOTLIN Groovyからの書き換え 面倒だったところ - IntelliJ IDEAが変換をやってくれないので自分でやる - コンストラクタ、メソッド、フィールドなど細かいところで書き方が違う 良かったところ -
lateinit相当のフィールドの存在に気づけた - コンストラクタでfinalではないメソッドを呼び出していたことに気づけた 8
#LOVE_KOTLIN 難しかったところ • functional testをSpockからKotestに切り替えたかったが、テストが起動しな かったので諦めた 9
workerExecutor.submit(SpotBugsRunne r.class, config -> { // getFirstEnabled() がnullable config.params(spec, getIgnoreFailures(),
reports.getFirstEnabled().getDestin ation()); 事例 Gradleプラグインにおけるnull-safetyの必要性 「解析レポート出力先」をファイルパスと形式( txt, xml, html, ...)をセットで設定できる仕様だった。 レポートがひとつも設定されていない場合に NPEを 投げてしまった。対象メソッドには @Nullableアノ テーションがついていたが、リリースされるまでこの 問題に気づけなかった。 https://github.com/spotbugs/spotbugs-gradle-p lugin/issues/68 10
#LOVE_KOTLIN Kotlinで書いて良かったところ scope functionで初期化コードを意味ある単位で まとめて書ける 11 var extension = project.extensions.create(
“extensionName”, MyExtension.class ).apply { prop.convention(true) another.convention(“default”) }
private FileCollection classes; void setClasses(FileCollection fileCollection) { this.classes = fileCollection
} FileCollection getClasses() { if (classes == null) { if (getClassDirs() == null) { throw new InvalidUserDataException("The classDirs property is not set") } return getClassDirs().asFileTree.filter({ File file -> file.name.endsWith(".class") }) } else { return classes } } Kotlinで書いて良かったところ フィールドの記述が短くできた 12 var classes: FileCollection? = null get() { return field ?: ( classDirs.asFileTree.filter { it.name.endsWith(".class") } ) }
#LOVE_KOTLIN ご清聴ありがとうございました Javaもまだ使ってるよ!という方は、今回紹介したspotbugs-gradle-pluginのv6を試 してほしいですm (_ _)m 13
#LOVE_KOTLIN 補足 なぜJavaとGroovyを混在させていたか • もともとはJavaだけだった • 公式のプラグイン実装の書き方がGroovyで説明されていてJavaだと書きにくい ことがあった • Extension周りはGroovyで書いたほうがコードも短くなることがわかった
◦ Javaだとアクセッサの嵐になる • でもGroovyはIDEの対応が微妙で全部書き換える気になれなかった 14
#LOVE_KOTLIN 補足 ファイルサイズの変化 Java/Groovy (5.2.1): 圧縮後 85 KiB Kotlin (6.0.0-rc.2):
圧縮後 115KiB ソースコードの数はExtension用コード1つしか増えていないが、コンパイル後の classファイルが37から69に増えている。GroovyでもClosureごとにclassファイルを 作っていたが、KotlinになってLambdaがより増えた。 15