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
740
デザインを実装に落とし込むときに考えていること
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
Cloud Service Mesh への期待が止まらない!!
phaya72
1
100
歴史と背景から改めて振り返るVPC
shotashiratori
2
220
[RSJ24] Object Segmentation from Open-Vocabulary Manipulation Instructions Based on Optimal Transport Polygon Matching with Foundation Models
keio_smilab
PRO
0
130
AWSを始めた頃に陥りがちなポイントをまとめてみた
oshanqq
1
2.5k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
1
160
技術ブログや登壇資料を秒で作るコツ伝授します
minorun365
PRO
19
4.8k
標準最高!標準はださくないぞ! at fukuoka.ts #1
yoiwamoto
0
150
Functional TypeScript
naoya
5
1.6k
[RSJ24] Task Success Prediction for Open-Vocabulary Manipulation Based on Multi-Level Aligned Representations
keio_smilab
PRO
0
220
Practical GenAI with Go - Elastic and Golang Sydney
adriancole
0
140
リクルートのデータマネジメント組織に 求められてきたコト
recruitengineers
PRO
4
350
タイミーのBraze活用 ~PUSH通知を活用したレコメンド~
ozeshun
2
130
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
125
16k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
28
2.2k
Docker and Python
trallard
39
3k
Robots, Beer and Maslow
schacon
PRO
157
8.1k
Bash Introduction
62gerente
608
210k
What the flash - Photography Introduction
edds
67
11k
Faster Mobile Websites
deanohume
304
30k
Clear Off the Table
cherdarchuk
90
320k
The Pragmatic Product Professional
lauravandoore
30
6.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
263
13k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
88
15k
Git: the NoSQL Database
bkeepers
PRO
425
64k
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