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
生成AI 業務応用向けガイドライン 斜め読み / Overview of Generative AI Business Application Guidelines
eller86
0
59
KotlinユーザのためのJSpecify入門 / JSpecify 101 for Kotlin Devs
eller86
0
1.1k
JavaとGroovyで書かれたGradleプラグインをKotlinで書き直した話 / Converted a Gradle plugin from Groovy&Java to Kotlin
eller86
0
1.3k
ヒューマンスキル / The Humanskills
eller86
0
610
医療機関向けシステムの信頼性 / Reliability of systems for medical institutions
eller86
0
340
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.7k
Goodbye JSR305, Hello JSpecify!
eller86
2
5k
Java8〜16におけるバイトコード生成の変化 / Changes of Bytecode Generation from Java 8 to 16
eller86
4
4.3k
Other Decks in Programming
See All in Programming
やっと腹落ち「スプリント毎に動くモノをリリースする」〜ゼロから始めるメガバンクグループのアジャイル実践〜
sasakendayo
0
110
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
1
650
GoとPHPのインターフェイスの違い
shimabox
2
210
Datadog Workflow Automation で圧倒的価値提供
showwin
1
300
未経験でSRE、はじめました! 組織を支える役割と軌跡
curekoshimizu
1
200
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.6k
Swift Testingのモチベを上げたい
stoticdev
2
190
推しメソッドsource_locationのしくみを探る - はじめてRubyのコードを読んでみた
nobu09
2
350
自力でTTSモデルを作った話
zgock999
0
120
LINE messaging APIを使ってGoogleカレンダーと連携した予約ツールを作ってみた
takumakoike
0
130
Learning Kotlin with detekt
inouehi
1
190
TCAを用いたAmebaのリアーキテクチャ
dazy
0
220
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
GraphQLの誤解/rethinking-graphql
sonatard
69
10k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
52k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
The Language of Interfaces
destraynor
156
24k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Building an army of robots
kneath
303
45k
GitHub's CSS Performance
jonrohan
1030
460k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.3k
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