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 Java programming
Search
Kengo TODA
March 19, 2021
Programming
0
3.6k
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
JavaとGroovyで書かれたGradleプラグインをKotlinで書き直した話 / Converted a Gradle plugin from Groovy&Java to Kotlin
eller86
0
630
ヒューマンスキル / The Humanskills
eller86
0
480
医療機関向けシステムの信頼性 / Reliability of systems for medical institutions
eller86
0
250
Server-side Kotlinを使うスタートアップでどんなDetektルールが育ったか / Detekt rules made in start-up working with Server-side Kotlin
eller86
0
960
Java開発者向けのKotlin Gradleビルドスクリプト入門 / Gradle Build Script in Kotlin 101
eller86
1
1.3k
Goodbye JSR305, Hello JSpecify!
eller86
2
4.3k
Java8〜16におけるバイトコード生成の変化 / Changes of Bytecode Generation from Java 8 to 16
eller86
4
3.8k
静的解析ツールで生産性向上
eller86
1
780
Building Java App in 2019
eller86
0
110
Other Decks in Programming
See All in Programming
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.3k
GraphQLサーバの構成要素を整理する #ハッカー鮨 #tsukijigraphql / graphql server technology selection
izumin5210
4
820
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
26
8.2k
try! Swift Tokyo 初参加報告LT
hinakko2
0
220
Rubyでたのしむクリエイティブコーディング/Enjoy Creative coding with Ruby
chobishiba
1
180
コーンフレークから始める モデリング会話入門
ogurotakayuki
0
360
Tailwind CSSを本気でカスタマイズする方法
fsubal
13
5.2k
エンターテイメント業界で利用されるAWS
demuyan
0
210
PHPはいつから死んでいるかの調査
chiroruxx
1
390
検証も兼ねて個人開発でHonoとかと向き合った話
hanetsuki
0
780
見た目から始める生産性向上
ikumatadokoro
7
820
Goのmultiple errorsについて (2024年4月版)
syumai
3
590
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
32
12k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
21
1.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
241
1.2M
The Art of Programming - Codeland 2020
erikaheidi
42
12k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
25
2.3k
The Pragmatic Product Professional
lauravandoore
25
5.8k
Building Effective Engineering Teams - LeadDev
addyosmani
28
1.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3k
Facilitating Awesome Meetings
lara
42
5.6k
What's new in Ruby 2.0
geeforr
337
31k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
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