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プログラミングの体験向上に関する活動 / DX enhancement around ...
Search
Kengo TODA
March 19, 2021
Programming
0
3.8k
Javaプログラミングの体験向上に関する活動 / DX enhancement around Java programming
#SIGPX8 にて話したものです。 SpotBugs, SARIF, LSP, MagpieBridge, semantic-release, Sphinx についてざっと紹介しました。
Kengo TODA
March 19, 2021
Tweet
Share
More Decks by Kengo TODA
See All by Kengo TODA
KotlinユーザのためのJSpecify入門 / JSpecify 101 for Kotlin Devs
eller86
0
730
JavaとGroovyで書かれたGradleプラグインをKotlinで書き直した話 / Converted a Gradle plugin from Groovy&Java to Kotlin
eller86
0
1.2k
ヒューマンスキル / The Humanskills
eller86
0
580
医療機関向けシステムの信頼性 / Reliability of systems for medical institutions
eller86
0
330
Server-side Kotlinを使うスタートアップでどんなDetektルールが育ったか / Detekt rules made in start-up working with Server-side Kotlin
eller86
0
1.4k
Java開発者向けのKotlin Gradleビルドスクリプト入門 / Gradle Build Script in Kotlin 101
eller86
1
1.6k
Goodbye JSR305, Hello JSpecify!
eller86
2
4.9k
Java8〜16におけるバイトコード生成の変化 / Changes of Bytecode Generation from Java 8 to 16
eller86
4
4.3k
静的解析ツールで生産性向上
eller86
1
940
Other Decks in Programming
See All in Programming
令和7年版 あなたが使ってよいフロントエンド機能とは
mugi_uno
10
5.2k
DevinとCursorから学ぶAIエージェントメモリーの設計とMoatの考え方
itarutomy
0
150
.NETでOBS Studio操作してみたけど…… / Operating OBS Studio by .NET
skasweb
0
120
オニオンアーキテクチャを使って、 Unityと.NETでコードを共有する
soi013
0
370
いりゃあせ、PHPカンファレンス名古屋2025 / Welcome to PHP Conference Nagoya 2025
ttskch
1
180
DMMオンラインサロンアプリのSwift化
hayatan
0
190
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
940
Amazon Nova Reelの可能性
hideg
0
200
Findy Team+ Awardを受賞したかった!ベストプラクティス応募内容をふりかえり、開発生産性向上もふりかえる / Findy Team Plus Award BestPractice and DPE Retrospective 2024
honyanya
0
140
週次リリースを実現するための グローバルアプリ開発
tera_ny
1
1.2k
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
3
870
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
450
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Bash Introduction
62gerente
610
210k
Embracing the Ebb and Flow
colly
84
4.5k
Building an army of robots
kneath
302
45k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.5k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
A Philosophy of Restraint
colly
203
16k
Testing 201, or: Great Expectations
jmmastey
41
7.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
500
Code Review Best Practice
trishagee
65
17k
Side Projects
sachag
452
42k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Transcript
Javaプログラミングの 体験向上に関する活動 #SIGPX8 2021/Mar/19 Kengo TODA (@KengoTODA) 1
whoami 15歳の頃から趣味プログラミングしている35歳。Java, TypeScriptが主要言語。ひょんな ことからbytecode manipilationに首を突っ込むようになる。 現在は上海にて開発業務と育児に勤しんでいる。 2
Objective イチOSS開発者の視点からJavaプログラミングの体験向上周りについて紹介する 日本で静的プログラム解析について活動している人を探せると良いな 3
Agenda 1. 静的解析系 a. 静的バイトコード解析ツール SpotBugs b. 解析ツールの結果を標準的に取り扱う SARIF c.
静的解析用 Java標準アノテーションの策定 jspecify 2. バージョン番号決定とリリースとの自動化 semantic-release 3. 多言語対応技術文書の作成 Sphinx, textlint 4
静的バイトコード解析ツール SpotBugs The University of Marylandで研究・開発されていた静的バイトコード解析ツール FindBugsのfork。.classファイルを解析し潜在的な問題を発見する。 JSR305の影響もあり、NullPointerExceptionの可能性があるコードを発見する機能が 有名。OWASP Find
Security BugsもSpotBugs上で動作している。 5
OASISにて一般的な静的解析ツールの 出力形式として定めようとしているもの。 JSON形式で、複数の静的解析ツール が出力したものを統合して扱える。 GitHubでは、CodeQLの機能として SARIFファイルをアップロードできる。 マイクロサービス普及により多数のプロ ジェクトを効率的に管理したいという ニーズがあるのかも。 解析ツールの結果を標準的に取り扱う
SARIF 6
SARIFはまだIDEでの活用は実績がなさ そう。LSP(Language Server Protocol) との統合が期待されるが今のところ公 開での議論は無い。 なおIBMで別途、LSPによる静的プログ ラム解析のIDEへの統合技術 MagpieBridgeを研究している模様。 WALAやSoot,
Doopといった特定ライブ ラリのIRを前提としているので、ここに SARIFを使えばより汎用性が広がるかも しれない。 LSPとMagpieBridge 7
静的解析用 Java標準アノテーションの策定 jspecify JVM言語ではJSR305が休止状態に なってしまい、フレームワークや言語に 縛られない解析用アノテーションが存在 しないという問題がある。FindBugs, Spring Framework, IntelliJ
IDEA, Checker Frameworkなどが独自の アノ テーションを提供している。 これらのアノテーションを提供する組織 が集まって、標準的な実装を作ろうとい う活動がjspecifyである。 8
従来はツールごとにまちまちだったレポートやアノテーション、PRやIDEとの統合手法に 標準化の動きがある。ツールやフレームワーク、言語を超えて統一された開発者体験が 実現される可能性がある。 静的解析系まとめ 9
バージョン番号決定とリリースとの自動化 semantic-release CalVer, SemVerなどのバージョンスキーマがある。ライブラリ開発時は特に、BREAKING CHANGEをメジャーアップデートに限定するSemVerを採用することでユーザに利便性を 提供できることがある。 リリース作業を自動化するにはバージョン番号の決定プロセスもまた自動化しなければ ならない。semantic-releaseを使うとコミットメッセージからバージョン番号を自動決定で きるため、PRマージ毎に自動リリースが可能。changelogも自動生成できる。 10
多言語対応技術文書の作成 Sphinx, textlint 技術文書を作成する場合、多言語対応が必要ならばSphinxかdocusaurusが選択肢に なる。グラフや注釈を使うならSphinxでreSTを使うのがおすすめ。例: • spotbugsドキュメント • jspecifyドキュメント •
Aarhus Univ.の講義ノート textlintで英語・日本語の確認を行うこともできる。 11
まとめ • Java開発にもnodejsやPythonのコミュニティからPX改善手法を導入できる • JSR305の失敗をコミュニティ主導で解決したい • OSSでライブラリを開発するならsemantic-releaseがおすすめ 12