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
740
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
HTML/CSS超絶浅い説明
yuki0329
0
190
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
28
4.2k
20241217 競争力強化とビジネス価値創出への挑戦:モノタロウのシステムモダナイズ、開発組織の進化と今後の展望
monotaro
PRO
0
290
CQRS+ES の力を使って効果を感じる / Feel the effects of using the power of CQRS+ES
seike460
PRO
0
240
「とりあえず動く」コードはよい、「読みやすい」コードはもっとよい / Code that 'just works' is good, but code that is 'readable' is even better.
mkmk884
6
1.4k
asdf-ecspresso作って 友達が増えた話 / Fujiwara Tech Conference 2025
koluku
0
1.4k
rails newと同時に型を書く
aki19035vc
5
710
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
410
ドメインイベント増えすぎ問題
h0r15h0
2
570
AHC041解説
terryu16
0
400
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
940
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
7
1.4k
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Scaling GitHub
holman
459
140k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
230
52k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
30
2.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
Code Review Best Practice
trishagee
65
17k
Speed Design
sergeychernyshev
25
740
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
570
Gamification - CAS2011
davidbonilla
80
5.1k
Making the Leap to Tech Lead
cromwellryan
133
9k
Typedesign – Prime Four
hannesfritz
40
2.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
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