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
88
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
780
デザインを実装に落とし込むときに考えていること
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
Datadog を使ったプロダクトとクラウドの セキュリティモニタリング
mrtc0
0
570
RAGHack: Building RAG apps in Python
pamelafox
0
130
エンジニア向け会社紹介資料
caddi_eng
15
250k
Oracle Database Backup Service:サービス概要のご紹介
oracle4engineer
PRO
0
4k
20分で分かるIAM全機能 (拡大版) / 20240903-jawsug-yokohama-iam
opelab
3
130
Practical GenAI with Go - Elastic and Golang Sydney
adriancole
0
140
四国クラウドお遍路 2024 in 高知 オープニング
yukataoka
0
130
技術ブログや登壇資料を秒で作るコツ伝授します
minorun365
PRO
19
4.9k
MySQLユーザ会なにやってるの?とおさそいと / たいへんなのw
sakaik
1
110
デジタル化・DX推進あるある
y150saya
0
230
Azure SQL Database Hyperscale HA レプリカの監視
sansantech
PRO
0
210
なぜクラウドサービスで Web コンソールを提供するのか
shuta13
4
1.9k
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
502
140k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
41
6.5k
Web Components: a chance to create the future
zenorocha
308
41k
Docker and Python
trallard
39
3k
No one is an island. Learnings from fostering a developers community.
thoeni
18
2.9k
Web development in the modern age
philhawksworth
204
10k
Automating Front-end Workflow
addyosmani
1365
200k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
225
22k
Build your cross-platform service in a week with App Engine
jlugia
228
18k
Imperfection Machines: The Place of Print at Facebook
scottboms
263
13k
Faster Mobile Websites
deanohume
304
30k
StorybookのUI Testing Handbookを読んだ
zakiyama
25
5k
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