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
LINEヤフーTech (LY Corporation Tech)
PRO
July 29, 2024
Technology
2
220
Javaのモジュール性に対する 設計を知る
「【福岡開催】JJUG CCC 2024 Spring報告会」での発表資料です。
LINEヤフーTech (LY Corporation Tech)
PRO
July 29, 2024
Tweet
Share
More Decks by LINEヤフーTech (LY Corporation Tech)
See All by LINEヤフーTech (LY Corporation Tech)
"LINE Planet" and AI: Conversations with AI
lycorptech_jp
PRO
0
16
Seamless inventory management with AI
lycorptech_jp
PRO
0
10
AI Frontiers Revealed: Transforming LINE Shopping TW with LLM-Driven Product Attribute Extraction
lycorptech_jp
PRO
0
19
LINEヤフーの音声AIがもたらす未来:ASR/TTSと対話技術の新たな可能性 / LY Corporation's Speech AI Vision: Towards Realtime Spoken Dialogue through Advanced ASR and TTS
lycorptech_jp
PRO
0
22
「Yahoo!検索」におけるWebパフォーマンス改善の取り組み / Efforts to Improve Web Performance in "Yahoo! JAPAN Search"
lycorptech_jp
PRO
0
25
アクセシビリティ改善の実践:プロダクトにおける具体的な取り組みと課題 / Practices for Accessibility Improvement: Specific Efforts and Challenges in Products
lycorptech_jp
PRO
0
27
「PayPayゲートウェイ」におけるStorybook活用事例 / Introducing Storybook: Enhancing Development in "PayPay Gateway"
lycorptech_jp
PRO
0
12
数字が導く洞察:Webパフォーマンスとビジネス指標の相関を探る / Insights Driven by Numbers: Exploring the Correlation Between Web Performance and Business Metrics
lycorptech_jp
PRO
0
39
Speculation Rules APIを用いたページ・広告表示の高速化によるメディア・広告KPIの改善への取り組み / Efforts to Improve Media and Advertising KPIs by Speeding Up Page and Ad Display Using Speculation Rules API
lycorptech_jp
PRO
0
37
Other Decks in Technology
See All in Technology
解析の定理証明実践@Lean 4
dec9ue
0
180
より良いプロダクトの開発を目指して - 情報を中心としたプロダクト開発 #phpcon #phpcon2025
bengo4com
1
3.1k
GitHub Copilot の概要
tomokusaba
1
140
CursorによるPMO業務の代替 / Automating PMO Tasks with Cursor
motoyoshi_kakaku
0
390
Delegating the chores of authenticating users to Keycloak
ahus1
0
130
急成長を支える基盤作り〜地道な改善からコツコツと〜 #cre_meetup
stefafafan
0
130
rubygem開発で鍛える設計力
joker1007
2
220
監視のこれまでとこれから/sakura monitoring seminar 2025
fujiwara3
11
4k
ドメイン特化なCLIPモデルとデータセットの紹介
tattaka
1
190
"サービスチーム" での技術選定 / Making Technology Decisions for the Service Team
kaminashi
1
180
PHP開発者のためのSOLID原則再入門 #phpcon / PHP Conference Japan 2025
shogogg
4
890
Amazon S3標準/ S3 Tables/S3 Express One Zoneを使ったログ分析
shigeruoda
4
560
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
930
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Visualization
eitanlees
146
16k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
710
BBQ
matthewcrist
89
9.7k
Balancing Empowerment & Direction
lara
1
380
GraphQLとの向き合い方2022年版
quramy
49
14k
Thoughts on Productivity
jonyablonski
69
4.7k
KATA
mclloyd
30
14k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
490
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