Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Javaプログラミングの体験向上に関する活動 / DX enhancement around Java programming

Javaプログラミングの体験向上に関する活動 / DX enhancement around Java programming

#SIGPX8 にて話したものです。 SpotBugs, SARIF, LSP, MagpieBridge, semantic-release, Sphinx についてざっと紹介しました。

Kengo TODA

March 19, 2021
Tweet

More Decks by Kengo TODA

Other Decks in Programming

Transcript

  1. Javaプログラミングの
    体験向上に関する活動
    #SIGPX8 2021/Mar/19
    Kengo TODA (@KengoTODA)
    1

    View Slide

  2. whoami
    15歳の頃から趣味プログラミングしている35歳。Java, TypeScriptが主要言語。ひょんな
    ことからbytecode manipilationに首を突っ込むようになる。
    現在は上海にて開発業務と育児に勤しんでいる。
    2

    View Slide

  3. Objective
    イチOSS開発者の視点からJavaプログラミングの体験向上周りについて紹介する
    日本で静的プログラム解析について活動している人を探せると良いな
    3

    View Slide

  4. Agenda
    1. 静的解析系
    a. 静的バイトコード解析ツール SpotBugs
    b. 解析ツールの結果を標準的に取り扱う SARIF
    c. 静的解析用 Java標準アノテーションの策定 jspecify
    2. バージョン番号決定とリリースとの自動化 semantic-release
    3. 多言語対応技術文書の作成 Sphinx, textlint
    4

    View Slide

  5. 静的バイトコード解析ツール SpotBugs
    The University of Marylandで研究・開発されていた静的バイトコード解析ツール
    FindBugsのfork。.classファイルを解析し潜在的な問題を発見する。
    JSR305の影響もあり、NullPointerExceptionの可能性があるコードを発見する機能が
    有名。OWASP Find Security BugsもSpotBugs上で動作している。
    5

    View Slide

  6. OASISにて一般的な静的解析ツールの
    出力形式として定めようとしているもの。
    JSON形式で、複数の静的解析ツール
    が出力したものを統合して扱える。
    GitHubでは、CodeQLの機能として
    SARIFファイルをアップロードできる。
    マイクロサービス普及により多数のプロ
    ジェクトを効率的に管理したいという
    ニーズがあるのかも。
    解析ツールの結果を標準的に取り扱う SARIF
    6

    View Slide

  7. SARIFはまだIDEでの活用は実績がなさ
    そう。LSP(Language Server Protocol)
    との統合が期待されるが今のところ公
    開での議論は無い。
    なおIBMで別途、LSPによる静的プログ
    ラム解析のIDEへの統合技術
    MagpieBridgeを研究している模様。
    WALAやSoot, Doopといった特定ライブ
    ラリのIRを前提としているので、ここに
    SARIFを使えばより汎用性が広がるかも
    しれない。
    LSPとMagpieBridge
    7

    View Slide

  8. 静的解析用 Java標準アノテーションの策定 jspecify
    JVM言語ではJSR305が休止状態に
    なってしまい、フレームワークや言語に
    縛られない解析用アノテーションが存在
    しないという問題がある。FindBugs,
    Spring Framework, IntelliJ IDEA,
    Checker Frameworkなどが独自の アノ
    テーションを提供している。
    これらのアノテーションを提供する組織
    が集まって、標準的な実装を作ろうとい
    う活動がjspecifyである。
    8

    View Slide

  9. 従来はツールごとにまちまちだったレポートやアノテーション、PRやIDEとの統合手法に
    標準化の動きがある。ツールやフレームワーク、言語を超えて統一された開発者体験が
    実現される可能性がある。
    静的解析系まとめ
    9

    View Slide

  10. バージョン番号決定とリリースとの自動化 semantic-release
    CalVer, SemVerなどのバージョンスキーマがある。ライブラリ開発時は特に、BREAKING
    CHANGEをメジャーアップデートに限定するSemVerを採用することでユーザに利便性を
    提供できることがある。
    リリース作業を自動化するにはバージョン番号の決定プロセスもまた自動化しなければ
    ならない。semantic-releaseを使うとコミットメッセージからバージョン番号を自動決定で
    きるため、PRマージ毎に自動リリースが可能。changelogも自動生成できる。
    10

    View Slide

  11. 多言語対応技術文書の作成 Sphinx, textlint
    技術文書を作成する場合、多言語対応が必要ならばSphinxかdocusaurusが選択肢に
    なる。グラフや注釈を使うならSphinxでreSTを使うのがおすすめ。例:
    ● spotbugsドキュメント
    ● jspecifyドキュメント
    ● Aarhus Univ.の講義ノート
    textlintで英語・日本語の確認を行うこともできる。
    11

    View Slide

  12. まとめ
    ● Java開発にもnodejsやPythonのコミュニティからPX改善手法を導入できる
    ● JSR305の失敗をコミュニティ主導で解決したい
    ● OSSでライブラリを開発するならsemantic-releaseがおすすめ
    12

    View Slide