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
460
JavaとGroovyで書かれたGradleプラグインをKotlinで書き直した話 / Converted a Gradle plugin from Groovy&Java to Kotlin
eller86
0
1.1k
ヒューマンスキル / The Humanskills
eller86
0
560
医療機関向けシステムの信頼性 / Reliability of systems for medical institutions
eller86
0
320
Server-side Kotlinを使うスタートアップでどんなDetektルールが育ったか / Detekt rules made in start-up working with Server-side Kotlin
eller86
0
1.3k
Java開発者向けのKotlin Gradleビルドスクリプト入門 / Gradle Build Script in Kotlin 101
eller86
1
1.5k
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
920
Other Decks in Programming
See All in Programming
Beyond ORM
77web
7
920
103 Early Hints
sugi_0000
1
230
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
110
Amazon S3 NYJavaSIG 2024-12-12
sullis
0
100
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
2
390
menu基盤チームによるGoogle Cloudの活用事例~Application Integration, Cloud Tasks編~
yoshifumi_ishikura
0
110
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
260
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
120
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
CSC305 Lecture 26
javiergs
PRO
0
140
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
340
Go の GC の不得意な部分を克服したい
taiyow
3
790
Featured
See All Featured
KATA
mclloyd
29
14k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.6k
Optimizing for Happiness
mojombo
376
70k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
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