Slide 1

Slide 1 text

© LY Corporation ローカル・UGCカンパニー Wallet Server-side 開発担当 ⼭道 ⼤地 Javaのモジュール性に対する 設計を知る

Slide 2

Slide 2 text

© LY Corporation 01 ⾃⼰紹介 02 今回の⽬的 03 モジュール性とは? 04 Javaにおけるモジュールシステム 05 JPMSについて 06 まとめ 2

Slide 3

Slide 3 text

© LY Corporation Daichi Yamamichi ローカル・UGCカンパニー Wallet Server-side 開発担当 3 2022 LINE Fukuoka 新卒⼊社 2024 LINEヤフー ⼊社

Slide 4

Slide 4 text

© LY Corporation Javaのモジュール設計について 概要を知る 4

Slide 5

Slide 5 text

© LY Corporation モジュール性(Modularity)はプログラムがもつ属性であり、モジュールによって構成される範囲の 程度を⽰すものである。 モジュールは低い結合度と⾼い凝集度をもつことが望ましい。 Wikipediaから引⽤ 5 モジュール性とは?

Slide 6

Slide 6 text

© LY Corporation 再利⽤性 保守性 テストの容易さ 理解しやすさ 結合度の低減 01 03 02 04 05 6 モジュール性の利点 モジュール性の利点

Slide 7

Slide 7 text

© LY Corporation モジュール性を理解し、選んだ開発プラットフォームにおけるその多くの形態を理解することは、 アーキテクトにはとても重要だ。私たちがアーキテクチャを分析する際に使うツールの多く(メトリ クス、適応度関数、可視化など)は、そうしたモジュール性の概念に依存している。モジュール性と は編成の原理を成すものだ。もし、アーキテクトが要素同⼠の繋がりに注意を払わずにシステムを設 計したとすると、数えきれない困難をもたらすシステムが出来上がってしまうことになる。物理学に 例えるなら、ソフトウェアシステムは複雑系のシステムであり、エントロピーが増⼤する(無秩序に 向かう)傾向がある。物理システムの秩序を維持するには、エネルギーを加えなければならない。ソ フトウェアシステムも同じことが⾔える。アーキテクトは、偶然に⾝を任せるのではなく、構造を良 い状態に保つために常にエネルギーを費やし続けなくてはならない。 Mark Richards. ソフトウェアアーキテクチャの基礎 から引⽤ 7 モジュール性の理解が困難を回避する モジュール性は必要か

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

© LY Corporation 概要 • バージョン競合・クラスパスの肥⼤化など、Java開発における依存関係の問題 問題点 • 予期しないバージョンのクラスがロードされる • ビルド時や実⾏時にエラーが発⽣することがある 10 JAR hell JEPS200から引⽤: The module graph

Slide 11

Slide 11 text

© LY Corporation JPMS Java Platform Module System 11

Slide 12

Slide 12 text

© LY Corporation Java Platform Module Systemとは、Javaアプリケーションをモジュールに分割し、依存関係とカプセ ル化を明確にすることで、開発・管理・セキュリティを向上させる仕組み。 12 JPMS(Java Platform Module System)

Slide 13

Slide 13 text

© 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

Slide 14

Slide 14 text

© 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 明⽰的な依存関係 強⼒なカプセル化

Slide 15

Slide 15 text

© LY Corporation • module-info.javaで依存関係を明⽰的に 宣⾔ • エクスポートするパッケージを制御 • パフォーマンスの向上 • 同じ名前のモジュールがあるとエラーが出 る 変わること 15 JPMSを使うと変わること・変わらないこと • 既存ライブラリ(クラスパス)は問題なく使 ⽤できる • JAR Hell問題 • モジュールの動的なロード・アンロードは しない 変わらないこと

Slide 16

Slide 16 text

© LY Corporation • JPMSを⽤いることで保守性や再利⽤性を向上することができる • JPMSはバージョン競合問題に焦点を当てておらず、ビルドツールなどがその責任を持つ • JAR Hellは現在も完全に解決されていないが、Javaとして解決に向かっている • アプリケーション開発者としては、費やす労⼒に⽐べて享受できる恩恵に疑問が残る • ⼀⽅で、パフォーマンス向上やJARサイズの最適化など、ライブラリには重要な機能である 16 まとめ

Slide 17

Slide 17 text

© 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

Slide 18

Slide 18 text

© LY Corporation