Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Javaのモジュール性に対する 設計を知る
Search
LY Corporation Tech
PRO
July 29, 2024
Technology
2
74
Javaのモジュール性に対する 設計を知る
「【福岡開催】JJUG CCC 2024 Spring報告会」での発表資料です。
LY Corporation Tech
PRO
July 29, 2024
Tweet
Share
More Decks by LY Corporation Tech
See All by LY Corporation Tech
Scaling Time-Series Data to Infinity: A Kubernetes-Powered Solution with Envoy
lycorptech_jp
PRO
1
85
LINEギフトにおけるアクセシビリティ向上の取り組み
lycorptech_jp
PRO
2
720
【MIRU2024 オーラル発表】Layout-Corrector: Alleviating Layout Sticking Phenomenon in Discrete Diffusion Model
lycorptech_jp
PRO
4
280
大規模なコードベースの改修のために自作TypeScriptツールを作るメリット
lycorptech_jp
PRO
3
140
デザイン修正時のチェックポイント
lycorptech_jp
PRO
1
750
デザインを実装に落とし込むときに考えていること
lycorptech_jp
PRO
1
1.2k
年間一億円削減した時系列データベースのアーキテクチャ改善~不確実性の高いプロジェクトへの挑戦~
lycorptech_jp
PRO
3
3.3k
大規模Hive-Trino移行PJの事例紹介
lycorptech_jp
PRO
2
230
Trinoの長期運用から学んだこと
lycorptech_jp
PRO
3
380
Other Decks in Technology
See All in Technology
Dify - LINE Bot連携 考え方と実用テクニック
uezo
5
1.1k
Estrategias de escalabilidade para projetos web
jessilyneh
1
180
Practical GenAI with Go - Elastic and Golang Sydney
adriancole
0
140
スーパーマリオRPGのリメイク版の変更点からみるUX
nishiharatsubasa
1
190
標準最高!標準はださくないぞ! at fukuoka.ts #1
yoiwamoto
0
150
SHIFTの課題と目指したい組織像 / 20240827 Rinto Ikenoue
shift_evolve
0
150
Binary Authorizationと友達になろう / Let's be friends with Binary Authorization
iselegant
2
130
20分で分かるIAM全機能 (拡大版) / 20240903-jawsug-yokohama-iam
opelab
3
120
歴史と背景から改めて振り返るVPC
shotashiratori
2
220
自社開発した大規模言語モデルをどうプロダクションに乗せて運用していくか〜インフラ編〜
pfn
PRO
4
980
Dojo 20240830 COBOL to Java on Z
ichikawayasuhisa
0
240
標準ライブラリの奥深アップデートを掘り下げよう!
logica0419
2
420
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
25
5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
662
120k
Designing on Purpose - Digital PM Summit 2013
jponch
113
6.8k
5 minutes of I Can Smell Your CMS
philhawksworth
201
19k
The Cult of Friendly URLs
andyhume
76
5.9k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
109
6.9k
The Art of Programming - Codeland 2020
erikaheidi
48
13k
Docker and Python
trallard
39
3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
122
18k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
27
1.6k
Designing with Data
zakiwarfel
98
5k
GitHub's CSS Performance
jonrohan
1029
450k
Transcript
© LY Corporation ローカル・UGCカンパニー Wallet Server-side 開発担当 ⼭道 ⼤地 Javaのモジュール性に対する
設計を知る
© LY Corporation 01 ⾃⼰紹介 02 今回の⽬的 03 モジュール性とは? 04
Javaにおけるモジュールシステム 05 JPMSについて 06 まとめ 2
© LY Corporation Daichi Yamamichi ローカル・UGCカンパニー Wallet Server-side 開発担当 3
2022 LINE Fukuoka 新卒⼊社 2024 LINEヤフー ⼊社
© LY Corporation Javaのモジュール設計について 概要を知る 4
© LY Corporation モジュール性(Modularity)はプログラムがもつ属性であり、モジュールによって構成される範囲の 程度を⽰すものである。 モジュールは低い結合度と⾼い凝集度をもつことが望ましい。 Wikipediaから引⽤ 5 モジュール性とは?
© LY Corporation 再利⽤性 保守性 テストの容易さ 理解しやすさ 結合度の低減 01 03
02 04 05 6 モジュール性の利点 モジュール性の利点
© LY Corporation モジュール性を理解し、選んだ開発プラットフォームにおけるその多くの形態を理解することは、 アーキテクトにはとても重要だ。私たちがアーキテクチャを分析する際に使うツールの多く(メトリ クス、適応度関数、可視化など)は、そうしたモジュール性の概念に依存している。モジュール性と は編成の原理を成すものだ。もし、アーキテクトが要素同⼠の繋がりに注意を払わずにシステムを設 計したとすると、数えきれない困難をもたらすシステムが出来上がってしまうことになる。物理学に 例えるなら、ソフトウェアシステムは複雑系のシステムであり、エントロピーが増⼤する(無秩序に 向かう)傾向がある。物理システムの秩序を維持するには、エネルギーを加えなければならない。ソ
フトウェアシステムも同じことが⾔える。アーキテクトは、偶然に⾝を任せるのではなく、構造を良 い状態に保つために常にエネルギーを費やし続けなくてはならない。 Mark Richards. ソフトウェアアーキテクチャの基礎 から引⽤ 7 モジュール性の理解が困難を回避する モジュール性は必要か
© LY Corporation Modules Packages Classes & Interfaces Methods &
Fields 01 03 02 04 8 Javaにおけるモジュールシステム
© LY Corporation Modules Packages Classes & Interfaces Methods &
Fields 01 03 02 04 9 Javaにおけるモジュールシステム
© LY Corporation 概要 • バージョン競合・クラスパスの肥⼤化など、Java開発における依存関係の問題 問題点 • 予期しないバージョンのクラスがロードされる •
ビルド時や実⾏時にエラーが発⽣することがある 10 JAR hell JEPS200から引⽤: The module graph
© LY Corporation JPMS Java Platform Module System 11
© LY Corporation Java Platform Module Systemとは、Javaアプリケーションをモジュールに分割し、依存関係とカプセ ル化を明確にすることで、開発・管理・セキュリティを向上させる仕組み。 12 JPMS(Java
Platform Module System)
© 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
© 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 明⽰的な依存関係 強⼒なカプセル化
© LY Corporation • module-info.javaで依存関係を明⽰的に 宣⾔ • エクスポートするパッケージを制御 • パフォーマンスの向上
• 同じ名前のモジュールがあるとエラーが出 る 変わること 15 JPMSを使うと変わること・変わらないこと • 既存ライブラリ(クラスパス)は問題なく使 ⽤できる • JAR Hell問題 • モジュールの動的なロード・アンロードは しない 変わらないこと
© LY Corporation • JPMSを⽤いることで保守性や再利⽤性を向上することができる • JPMSはバージョン競合問題に焦点を当てておらず、ビルドツールなどがその責任を持つ • JAR Hellは現在も完全に解決されていないが、Javaとして解決に向かっている
• アプリケーション開発者としては、費やす労⼒に⽐べて享受できる恩恵に疑問が残る • ⼀⽅で、パフォーマンス向上やJARサイズの最適化など、ライブラリには重要な機能である 16 まとめ
© 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
© LY Corporation