Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Javaのモジュール性に対する 設計を知る
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
LINEヤフーTech (LY Corporation Tech)
PRO
July 29, 2024
Technology
300
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Javaのモジュール性に対する 設計を知る
「【福岡開催】JJUG CCC 2024 Spring報告会」での発表資料です。
LINEヤフーTech (LY Corporation Tech)
PRO
July 29, 2024
More Decks by LINEヤフーTech (LY Corporation Tech)
See All by LINEヤフーTech (LY Corporation Tech)
Scaling Beyond the Exabyte: Lessons from Hadoop Integration and Operations at LY Corporation
lycorptech_jp
PRO
0
120
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
1
370
PM領域でのAI Agentの活用
lycorptech_jp
PRO
0
360
AI駆動開発を組織で促すために
lycorptech_jp
PRO
7
10k
検索技術知識0のエンジニアが広告検索システムを内製化して運用するまで
lycorptech_jp
PRO
1
460
No More Log Digging 〜AIを一次調査係にする アラートレビュー改善〜
lycorptech_jp
PRO
0
290
実践!既存 Project への AI-Driven Development 適用〜一ヶ月で Project 唯一のフロントエンドエンジニアを作り出せ〜
lycorptech_jp
PRO
1
550
AIが実装を自走する時代の認知負債との戦い
lycorptech_jp
PRO
3
1.3k
AIと1000本ノックしてたどり着いた、最速のプロダクト開発 ~toC向けAIエージェントUXを、動く選択肢とAIキャパシティで設計する~
lycorptech_jp
PRO
1
290
Other Decks in Technology
See All in Technology
AIコーディングを実践してきた1年を振り返る / Looking Back on a Year of Practicing AI Coding
takedatakashi
1
140
「社外イベント=意識高い」の壁を壊せ!元々無関心だった僕らが部内で社外イベントを民主化して15人を連れ出すまで
say_no_w
0
140
AI時代の開発はウォーターフォールに回帰する? / development-with-ai-back-to-wf
okamototakuyasr2
0
120
Claude Code on Bedrock で統制をかける小ネタ集/claude-code-bedrock-governance-tips
emiki
1
13k
クラウドエージェントの先駆け Devin。今も最先端を走る、他との違い
kinopeee
0
420
AI駆動開発におけるハーネスエンジニアリングの勘所
tsukuboshi
1
790
AWS DevOps Agentはどこまで任せられるか 〜機能の現在地と、機能拡張の実践〜
nyankotaro
0
250
Maestro MCPとClaude Code Skillsによる自律的なE2Eテスト支援
asmz
0
130
What Is JetBrains Air
x5gtrn
PRO
0
170
バフェットコード開発チームの心得(v1.1)
shoe116
0
110
ドメインエキスパートは いかにして AI を使って プロダクト開発をするか
tatsuyashiraishi
1
190
「作れる」と「リリースできる」の間にあったもの── PdMを外して見えた、PdMがやるべき仕事/Buildable ≠ Shippable: What Removing the PM Taught Me About the PM’s Job
yappli_developers
0
280
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
7k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
580
Unsuck your backbone
ammeep
672
58k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
460
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
290
For a Future-Friendly Web
brad_frost
184
10k
Accessibility Awareness
sabderemane
1
260
Optimising Largest Contentful Paint
csswizardry
37
4k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
410
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Tell your own story through comics
letsgokoyo
1
1.1k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
580
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