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

Javaのモジュール性に対する 設計を知る

Javaのモジュール性に対する 設計を知る

「【福岡開催】JJUG CCC 2024 Spring報告会」での発表資料です。

More Decks by LINEヤフーTech (LY Corporation Tech)

Other Decks in Technology

Transcript

  1. © LY Corporation 01 ⾃⼰紹介 02 今回の⽬的 03 モジュール性とは? 04

    Javaにおけるモジュールシステム 05 JPMSについて 06 まとめ 2
  2. © LY Corporation Modules Packages Classes & Interfaces Methods &

    Fields 01 03 02 04 8 Javaにおけるモジュールシステム
  3. © LY Corporation Modules Packages Classes & Interfaces Methods &

    Fields 01 03 02 04 9 Javaにおけるモジュールシステム
  4. © LY Corporation 13 JPMS(Java Platform Module System) Main Module

    A Module D Module B Module C module main.app { requires a.modules; requires b.modules; requires c.modules; } module a.modules { requires d.modules; export com.example.modules.a; } module-info.java module-info.java
  5. © LY Corporation 14 JPMS(Java Platform Module System) Main Module

    A Module D Module B Module C module main.app { requires a.modules; requires b.modules; requires c.modules; } module a.modules { requires d.modules; export com.example.modules.a; } module-info.java module-info.java 明⽰的な依存関係 強⼒なカプセル化
  6. © LY Corporation • module-info.javaで依存関係を明⽰的に 宣⾔ • エクスポートするパッケージを制御 • パフォーマンスの向上

    • 同じ名前のモジュールがあるとエラーが出 る 変わること 15 JPMSを使うと変わること・変わらないこと • 既存ライブラリ(クラスパス)は問題なく使 ⽤できる • JAR Hell問題 • モジュールの動的なロード・アンロードは しない 変わらないこと
  7. © LY Corporation • JPMSを⽤いることで保守性や再利⽤性を向上することができる • JPMSはバージョン競合問題に焦点を当てておらず、ビルドツールなどがその責任を持つ • JAR Hellは現在も完全に解決されていないが、Javaとして解決に向かっている

    • アプリケーション開発者としては、費やす労⼒に⽐べて享受できる恩恵に疑問が残る • ⼀⽅で、パフォーマンス向上やJARサイズの最適化など、ライブラリには重要な機能である 16 まとめ
  8. © LY Corporation JSR 376 Java Platform Module System Project

    Jigsaw ‒ https://openjdk.org/projects/jigsaw/ JEP 200: The Modular JDK ソフトウェアアーキテクチャの基礎 ‒ Mark Richards著 JavaOne2017 Modules in One Lesson ‒ https://www.youtube.com/watch?v=MGX-JfMl9-Y Java Platform Module System: Requirements: • https://openjdk.org/projects/jigsaw/spec/reqs/#mul tiple-versions 17