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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

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