#SIGPX8 にて話したものです。 SpotBugs, SARIF, LSP, MagpieBridge, semantic-release, Sphinx についてざっと紹介しました。
Javaプログラミングの体験向上に関する活動#SIGPX8 2021/Mar/19Kengo TODA (@KengoTODA)1
View Slide
whoami15歳の頃から趣味プログラミングしている35歳。Java, TypeScriptが主要言語。ひょんなことからbytecode manipilationに首を突っ込むようになる。現在は上海にて開発業務と育児に勤しんでいる。2
ObjectiveイチOSS開発者の視点からJavaプログラミングの体験向上周りについて紹介する日本で静的プログラム解析について活動している人を探せると良いな3
Agenda1. 静的解析系a. 静的バイトコード解析ツール SpotBugsb. 解析ツールの結果を標準的に取り扱う SARIFc. 静的解析用 Java標準アノテーションの策定 jspecify2. バージョン番号決定とリリースとの自動化 semantic-release3. 多言語対応技術文書の作成 Sphinx, textlint4
静的バイトコード解析ツール SpotBugsThe University of Marylandで研究・開発されていた静的バイトコード解析ツールFindBugsのfork。.classファイルを解析し潜在的な問題を発見する。JSR305の影響もあり、NullPointerExceptionの可能性があるコードを発見する機能が有名。OWASP Find Security BugsもSpotBugs上で動作している。5
OASISにて一般的な静的解析ツールの出力形式として定めようとしているもの。JSON形式で、複数の静的解析ツールが出力したものを統合して扱える。GitHubでは、CodeQLの機能としてSARIFファイルをアップロードできる。マイクロサービス普及により多数のプロジェクトを効率的に管理したいというニーズがあるのかも。解析ツールの結果を標準的に取り扱う SARIF6
SARIFはまだIDEでの活用は実績がなさそう。LSP(Language Server Protocol)との統合が期待されるが今のところ公開での議論は無い。なおIBMで別途、LSPによる静的プログラム解析のIDEへの統合技術MagpieBridgeを研究している模様。WALAやSoot, Doopといった特定ライブラリのIRを前提としているので、ここにSARIFを使えばより汎用性が広がるかもしれない。LSPとMagpieBridge7
静的解析用 Java標準アノテーションの策定 jspecifyJVM言語ではJSR305が休止状態になってしまい、フレームワークや言語に縛られない解析用アノテーションが存在しないという問題がある。FindBugs,Spring Framework, IntelliJ IDEA,Checker Frameworkなどが独自の アノテーションを提供している。これらのアノテーションを提供する組織が集まって、標準的な実装を作ろうという活動がjspecifyである。8
従来はツールごとにまちまちだったレポートやアノテーション、PRやIDEとの統合手法に標準化の動きがある。ツールやフレームワーク、言語を超えて統一された開発者体験が実現される可能性がある。静的解析系まとめ9
バージョン番号決定とリリースとの自動化 semantic-releaseCalVer, SemVerなどのバージョンスキーマがある。ライブラリ開発時は特に、BREAKINGCHANGEをメジャーアップデートに限定する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