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
26 Java Years
Search
Shin Tanimoto
August 25, 2021
Technology
0
46
26 Java Years
#31 ~オープンソースプロジェクトを支える言語たち~
2021-08/25
Shin Tanimoto
August 25, 2021
Tweet
Share
More Decks by Shin Tanimoto
See All by Shin Tanimoto
クラウドネイティブ時代のコンテナ環境におけるJavaアプリケーションのメトリクス・ログ・トレースモニタリング
shintanimoto
5
2.2k
Let’s Have Fun with Reactive Programming, Using Reactor and WebFlux
shintanimoto
0
230
Monitoring and Visualizing Your (Micro)services
shintanimoto
0
330
現代に求められるJavaコミュニティとは / What should be the Java Community of Today?
shintanimoto
0
870
人生がときめく「学び」の魔法 / The Life-Changing Magic of Studying
shintanimoto
6
1.6k
業務で使いたいWebFluxによるReactiveプログラミング / Introduction to Reactive Programming using Spring WebFlux
shintanimoto
9
9k
from old Java to modern Java (2017) #jjug
shintanimoto
4
1.5k
Spring Cloud Sleuth + Zipkin with Elasticsearch #zipkin_jp
shintanimoto
1
1.2k
Stream API 入門 #jjug #javajo
shintanimoto
4
3.9k
Other Decks in Technology
See All in Technology
OCI Vault 概要
oracle4engineer
PRO
0
9.7k
開発生産性を上げながらビジネスも30倍成長させてきたチームの姿
kamina_zzz
2
1.7k
SSMRunbook作成の勘所_20241120
koichiotomo
2
120
これまでの計測・開発・デプロイ方法全部見せます! / Findy ISUCON 2024-11-14
tohutohu
3
360
iOSチームとAndroidチームでブランチ運用が違ったので整理してます
sansantech
PRO
0
130
Making your applications cross-environment - OSCG 2024 NA
salaboy
0
180
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.1k
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.6k
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
220
IBC 2024 動画技術関連レポート / IBC 2024 Report
cyberagentdevelopers
PRO
0
110
Amplify Gen2 Deep Dive / バックエンドの型をいかにしてフロントエンドへ伝えるか #TSKaigi #TSKaigiKansai #AWSAmplifyJP
tacck
PRO
0
370
Application Development WG Intro at AppDeveloperCon
salaboy
0
180
Featured
See All Featured
Embracing the Ebb and Flow
colly
84
4.5k
We Have a Design System, Now What?
morganepeng
50
7.2k
How to Ace a Technical Interview
jacobian
276
23k
Practical Orchestrator
shlominoach
186
10k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Agile that works and the tools we love
rasmusluckow
327
21k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
A designer walks into a library…
pauljervisheath
203
24k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Transcript
Shin Tanimoto 26 Java Years - ͜Ε͕ࠓͷJavaͩʂ <OSS X Users
Meeting> #31 ʙΦʔϓϯιʔεϓϩδΣΫτΛࢧ͑Δݴޠͨͪʙ
୩ຊ ৺ (Shin Tanimoto) ຊJavaϢʔβʔάϧʔϓ Ϧʔμʔʢදʣ Java Champion / Oracle
Groundbreaker Ambassador Everforth / Acroquest Technologyͷ2ࣾͰಇ͘ΤϯδχΞ ෭ۀʹͯ֎෦ސʮϨϯλϧ͢ΔਓʯͳͲ ੜ͖͕͍BABYMETALͷϥΠϒࢀઓ ࣗݾհ 2 Twitter : @cero_t ஶॻ : Javaຊ֨ೖ
ຊJavaϢʔβʔάϧʔϓ (JJUG) 20074݄ʹൃͨ͠JavaͷϢʔβʔձ ౦ژΛத৺ͱͨ͠ษڧձΧϯϑΝϨϯεͷ։࠵ʢݱࡏΦϯϥΠϯத৺ʣ ߨࢣݣग़ுΠϕϯτͳͲɺຊ֤ͷJavaίϛϡχςΟͱڠྗ͍ͯ͠Δ ن ձһ 10,000໊Ҏ্ ݄ྫͷษڧձʹඦ໊ɺ2ճͷΧϯϑΝϨϯεʹ1,000໊Ҏ্͕ࢀՃ JavaϢʔβʔάϧʔϓ
3
Javaʁ
ݻ͍ ݹ͍ μα͍ ͑ɺJavaʁ 5
੩తܕ͚ݴޠ ΦϒδΣΫτࢦ Javaݻ͍ʁ 6
੩తܕ͚ݴޠ ίϯύΠϧ࣌νΣοΫIDEͷࣗಈิͷԸܙΛड͚͍͢ ΤϯλʔϓϥΠζͳͲͷେنϓϩδΣΫτʹ͘ ΦϒδΣΫτࢦ ۩ΑΓநΛΉ ۀػೳΛ࣮ݱ͢ΔͨΊͷ࣮ΑΓɺͦͷຊ࣭Λߟ͑Δ͜ͱΛΉਓ͕ଟ͍ Javaݻ͍ʁ 7
࠷ॳͷ͓ݟ͔͑Β26ɺJDK 1.0ͷϦϦʔε͔Β25 Javaݹ͍ʁ 8
࠷ॳͷ͓ݟ͔͑Β26ɺJDK 1.0ͷϦϦʔε͔Β25 Pythonઌഐͷ4ίԼ C++ઌੜͷ10ίԼ ޙํޓੑΛอͪଓ͚͍ͯΔ ϥΠϒϥϦͷαϙʔτͳͲআ͚ɺݹ͍ίʔυͰ͍͍ͩͨίϯύΠϧ͕௨Δ͠ಈ͘ ৽͍͠API͕Ճ͞Εͯɺݹ͍API͍͍ͩͨͦͷ··Δ Javaݹ͍ʁ 9
จࣈྻஔϝιου Javaݹ͍ʁ 10 String str = “12345-12345-12345"; str.replace('1', 'x');
→ "x2345-x2345-x2345"ɹ1จࣈ͚ͩࢦఆͯ͠શஔ str.replaceFirst("\\d+", "xyz"); → "xyz-12345-12345"ɹਖ਼نදݱͰࢦఆͯ͠1ճஔ str.replaceAll("\\d+", "xyz"); → "xyz-xyz-xyz"ɹਖ਼نදݱͰࢦఆͯ͠શஔ str.replace("123", "xyz"); → “xyz45-xyz45-xyz45"ɹจࣈྻͰࢦఆͯ͠શஔ
จࣈྻஔϝιου str.replace(‘1’, ‘x’); → ࠷ॳ͔Β͋Δʢ1996ʣ str.replaceFirst(“\\d+”, “xyz”); → Java 1.4ͰՃʢ2002ʣ
str.replaceAll(“\\d+”, “xyz”); →Java 1.4ͰՃʢ2002ʣ str.replace(“123”, “xyz”); → Java 1.5ͰՃʢ2004ʣ ޙํޓੑΛอͭͨΊɺݹ͍APIΛআ͠ͳ͍ Javaݹ͍ʁ 11
Javaμα͍ʁ 12
μαͳ͍Θʂʂɹμα͍ݴ͏͕ͭμα͍Μ͡Όʂʂ😭 Javaμα͍ʁ 13
ؔܕͬΆ͘දهͰ͖ΔϥϜμࣜͷಋೖ2014ͱΊ ෳͷاۀஂମͷ߹ҙʹΑ༷ͬͯΛࡦఆ͢ΔΦʔϓϯͳϓϩηε Java Community ProcessʢJCPʣ ༷ܾఆޙɺ֤͕࣮ࣾΛఏڙʢOracleɺIBMɺAzulɺBellSoftɺSAPͳͲʣ ߹ҙܗ͕ඞཁͰ͋Γɺ·ͨޙํޓੑͷҡ࣋Λॏࢹ͢ΔͨΊɺ ৽͍͠จ๏ػೳͷఏڙɺଞͷݴޠʹൺͯগ͠ΕΔ ͦͷɺݎ࿚Ͱ͋ΓಛఆϕϯμͷϩοΫΠϯΛආ͚ΒΕΔ
Javaμα͍ʁ 14
Java͍͍͡ΌΜ 15 😊
؆୯ͳྺ࢙ͱ༻ޠ
1995 : Sun MicrosystemsࣾʹΑΓॳ͓൸࿐ 1996 : JDK 1.0ϦϦʔεʢJDK = Java
Development Kitʣ 2006 : OSSԽ 2010 : Oracle͕ࣾSun MicrosystemsࣾΛങऩ 2014 : Java 8ͷϦϦʔεɻؔܕ෩ͷهड़͕Ͱ͖ΔΑ͏ʹͳΓɺվΊ͕ͯू·ΔΑ͏ʹͳͬͨ 2017 : Java 9ͷϦϦʔεɻҎ߱͝ͱʹ࣍όʔδϣϯΛϦϦʔε͢ΔΑ͏มߋ Javaͷ؆୯ͳྺ࢙ 17
JavaVM : Java Virtual MachineɻJavaΛಈ࡞ͤ͞ΔԾϚγϯɻJVMͱදه͢Δ Java࣮ߦՄೳͳόΠφϦΛ࡞ΔͷͰͳ͘ɺίϯύΠϧͨ͠ϑΝΠϧΛJavaVM্Ͱಈ࡞ͤ͞Δํࣜ Java SE : ͍ΘΏΔJavaຊମ
JDK : Java Development KitɻίϯύΠϥͳͲͷ։ൃπʔϧ JRE : Java Runtime EnvironmentɻJavaVMඪ४ϥΠϒϥϦͳͲͷ࣮ߦڥ ݱࡏJRE୯ମͰͷఏڙ͞Εͳ͘ͳͬͨ جૅ༻ޠ 18
Java EEʢݱJakarta EEʣ : αʔόΞϓϦέʔγϣϯ͚ͷAPαʔόϥΠϒϥϦ܈Λఏڙ Java ME : ΈࠐΈ͚ͷJava JVMݴޠ
: JavaVMͷ্Ͱಈ࡞͢ΔJavaͰ࣮͞Εͨݴޠ ScalaɺKotlinɺGroovyɺJRubyɺJythonͳͲ TCK : Technology Compatibility KitɻJavaͷޓੑΛஅ͢ΔπʔϧΩοτ ֤ࣾͷJava࣮TCKΛ௨ͬͯ͡ΊͯJavaͱೝఆ͞ΕΔ OracleʢݩʑSun Microsystemsʣ͕ఏڙ͍ͯ͠Δ جૅ༻ޠ 19
JavaΛऔΓר͘OSS
ΤϯλʔϓϥΠζܥͰΘΕΔ͜ͱ͕ଟ͍ݴޠͰ͋Γͳ͕Βɺ2000ࠒ͔Β ։ൃڥϥΠϒϥϦɺϑϨʔϜϫʔΫͳͲʹOSSϓϩμΫτ͕ΜʹΘΕΔΑ͏ʹͳͬͨ ʢͪΖΜϓϩϓϥΠΤλϦͳϓϩμΫτͨ͘͞Μ͋ͬͨʣ Eclipse IDEɺStrutsɺSpringɺSeasar2ͳͲ ݱࡏJavaࣗମ͕OSSԽ͞Εɺෳͷاۀஂମ͔ΒOSS൛ͷJDK͕ఏڙ͞Ε͍ͯΔ OSSΛऔΓר͘ΤίγεςϜ͕ख़͍ͯ͠Δݴޠͷͻͱͭͱݴ͑Δ JavaOSSͱڞʹาΜͰ͖ͨݴޠ 21
OSSϓϩμΫτΛఏڙ͢Δ/͍ͯͨ͠ओͳஂମ Apache Jakarta Projectʢ1999-2011ʣ Eclipse Foundationʢ2002-ʣ Spring Projectʢ2004ࠒ-ʣ SeasarϑΝϯσʔγϣϯʢ2005-2019ʣ JavaOSSͱڞʹาΜͰ͖ͨݴޠ
22
Apache Jakarta Projectʢ1999-2011ʣ ଟ͘ͷJavaͷOSSϓϩμΫτΛఏڙ͍ͯͨ͠ஂମɻOSSϓϩμΫτͷड͚ࡼͱݴ͑Δ ιʔείʔυόΠφϦΛμϯϩʔυͰ͖Δॴ Apache TomatɺAntɺMavenɺLog4jɺStrutsɺCommonsɺLuceneͳͲ 2000લͷJavaΤϯδχΞɺ͍͍ͩͨStrutsͰWebΞϓϦέʔγϣϯΛ࡞Γɺ Log4jͰϩάΛग़͠ɺCommonsϥΠϒϥϦΛ͍ɺAntͰϏϧυ͠ɺ
Tomcat্ͰՔಇ͍ͤͯͨ͞ Apache Jakarta Project 23
Apache Jakarta Projectʢ1999-2011ʣ JavaͷOSSͷΤίγεςϜͷجૅΛ࡞ͬͨஂମͱݴ͑Δ 2011ʹׂΛऴ͑ͯΫϩʔζ͞ΕɺͦΕͧΕͷϓϩμΫτ͕ಠཱͨ͠ Apache Jakarta Project 24
IBM͕ࣾEclipse IDEΛOSSͱͯ͠ެ։ʢ2002ʣ 2000ͷJava։ൃʹ͓͚ΔओྲྀͷIDEʢ౷߹։ൃڥʣ ͦΕ·ͰΤσΟλΛ͏ਓ͕ଟ͔ͬͨ EclipseҎޙɺྑ͘ѱ͘JavaͷIDEOSS͔ͭແঈͰఏڙ͞ΕΔΠϝʔδ͕ఆண ͳ͓ɺݱࡏJetbrainsࣾͷIntelliJ IDEA͕ओྲྀ OSSͷίϛϡχςΟ൛ͱɺ༗ঈͷUltimate൛͕͋Δ Eclipse IDE
25
Eclipse Foundationʢ2004-ʣ ॳEclipse IDEͷཧ͕త ͦͷޙɺJakarta EEɺOpenJ9ɺEclipse LinkɺEclipse CollectionsͳͲ ଞͷOSSϓϩμΫτఏڙ͢ΔΑ͏ʹͳͬͨ
Apache Jakarta ProjectͷΘΓʹOSSϓϩμΫτͷड͚ࡼͱͳ͍ͬͯΔ໘͋Δ Eclipse Foundation 26
Spring Projectʢ2004ࠒ-ʣ Spring FrameworkΛத৺ͱͨؔ͠࿈ϓϩμΫτͷఏڙ Spring Frameworkࣗମ͕ଞͷϓϩμΫτͱܨ͕Δ͜ͱΛલఏͱͨ͠ΈΛ ఏڙ͢ΔͷͰ͋ΔͨΊɺ༷ʑͳ࿈ܞϓϩμΫτ͕ੜ·Εͨ ݱࡏSpring͕Java։ൃͷओྲྀͱͳ͍ͬͯΔʢSpring Bootʣ
Spring Project 27
Spring Projectʢ2004ࠒ-ʣ ։ൃͷओମͰ͋ͬͨSpringSourceࣾɺVMWareࣾʹങऩ͞ΕɺPivotalࣾʹҠ͞Εɺ ࠶VMWareࣾʹങऩ͞ΕΔͳͲมભͨ͠ Spring FrameworkΛ࠷ॳʹ࡞ͬͨRod JohnsonࢯSpring ProjectΛΕͯٱ͍͠ ͦͷΑ͏ͳঢ়گͰਐԽ͠ଓ͚͍ͯΔ͜ͱ͕ɺOSSϓϩμΫτͷڧΈͷҰͭͩͱݴ͑Δ Spring
Project 28
SeasarϑΝϯσʔγϣϯʢ2005-2019ʣ ຊൃͷOSSϑϨʔϜϫʔΫSeasar2Λத৺ͱͨ͠ଟ͘ͷOSSϓϩμΫτΛఏڙ S2DaoɺS2StrtusɺS2JSFɺSAStrutsɺS2JDBCͳͲ 2000தظͷຊͷJavaΞϓϦέʔγϣϯ։ൃͰओྲྀͱͳͬͨ SeasarΧϯϑΝϨϯε1000໊લޙͷࢀՃऀΛूΊΔҰେΠϕϯτͱͳ͍ͬͯͨ ༏लͳJavaΤϯδχΞ͕ͨͪू͏ͱͳΓɺ࣌ͷίϛολͨͪݱࡏͰ֤Ͱ׆༂͍ͯ͠Δ SeasarϑΝϯσʔγϣϯ 29
ओྲྀͱͳͬͨOSSϓϩμΫτͷػೳ͕ɺJavaͷඪ४ػೳͱͯ͠औΓࠐ·ΕΔྲྀΕ͕ੜ·Εͨ Spring Framework → CDIʢDIίϯςφʣ Hibernate → JPAʢDBΞΫηεʣ ScalaKotlinͳͲͷJavaVM্Ͱಈ͘ݴޠͷػೳ →
Stream APIʢؔܕ෩ͷهड़ʣ OSS͔Βඪ४ 30
༷ʑͳاۀஂମɺ·ͨJavaΤϯδχΞͨͪͷߩݙʹΑΓɺ JavaͷOSSΤίγεςϜख़͍ͯͬͨ͠ ͍·ͰJavaͦͷͷOSSԽ͞Εɺෳͷاۀஂମ͔Βఏڙ͞Ε͍ͯΔ ͔͕ͯ͢͠͠ॱ෩ຬൕͩͬͨΘ͚Ͱͳ͘ɺաڈʹԿ͔େ͖ͳࣄ݅ى͖ͨ OSSͱJava 31
Javaք۾ͷOSSͰى͖ͨ
Java͕OSSԽ͢Δࡍɺଞ͕ࣾఏڙ͢Δ߹ʹিಥ͢Δ͜ͱ͋ͬͨ աڈʹى͖ͨ Apache Harmonyࣄ݅ Androidࣄ݅ Googleૌুࣄ݅ Javaք۾ͷOSSͰى͖ͨ 33
લఏͱͳΔഎܠͱͯ͠ɺJavaΛఏڙ͢ΔSun Microsystems ʮJavaʹΑ͘ࣅ͍ͯΔ͕ݫີʹJavaͱݺͳ͍ͷʯ͕ʮJavaʯΛ໊Δ͜ͱΛڋΜͩ JavaͷஅΛ͙ͨΊ ʮWrite Once, Run AnywhereʯͷϙϦγʔΛकΔͨΊ Javaք۾ͷOSSͰى͖ͨ
34
2006ɺJavaͷOSS࣮ͱͯ͠ʮApache Harmonyʯ͕ఏڙ͞Εͨ Apache License 2.0Ͱఏڙʢվมͨ͠ࡍͷιʔείʔυͷެ։͕ٛͳ͍ʣ˞Ҏ߱AL-2.0ͱදه͢Δ ͔࣌͠͠ɺSun MicrosystemsApache HarmonyͷTCKͷఏڙΛڋ൱ TCKΛ௨͍ͯ͠ͳ͍࣮JavaͱೝΊΒΕͳ͍ Apache
HarmonyΈࠐΈͰಈ࡞͕ͨ͠ɺ࣌ͷTCKΈࠐΈʹద༻Ͱ͖ΔJavaΛର֎ͱ͍ͯͨ͠ ಉ͘͡2006ɺSun Microsystems͕Java SEΛOSSԽʢݱࡏͷOpenJDKʣ GPLv2Ϋϥεύεྫ֎͖ͭʢվมͨ͠ࡍʹιʔείʔυͷެ։͕ٛ͋Δʣ˞Ҏ߱GPLv2ͱදه͢Δ Apache harmonyࣄ݅ 35
2007ɺSun MicrosystemsTCKΛOSSͱͯ͠ެ։ͨ͠ͷͷ OSS൛ͷJavaϥΠηϯε͕GPLv2ͷͷͷΈΛରͱͨ͠ Apache HarmonyAL-2.0ͩͬͨͨΊର֎ ࣮࣭తʹSun Microsystems͕OSSԽͨ͠JDKͷΈ͕ରͱͳ͍ͬͯͨܗ વApache߅ٞ͠ɺ֤ॴͰ͕ٞى͖ͨ ݁ہApache
HarmonyJavaͱͯ͠ೝΊΒΕͳ͍··ɺ2010ʹ։ൃΛऴྃͨ͠ Apache harmonyࣄ݅ 36
2007ʹGoogle͕AndroidΛൃද AndroidApache HarmonyΛϕʔεͱͨ͠Dalvik VMΛࡌ JavaʢతͳͷʣͰAndroidΞϓϦέʔγϣϯΛ։ൃͰ͖Δ ͪΖΜTCK௨͍ͬͯͳ͍ ιʔείʔυͷ֦ுࢠ.java͕ͩɺTCKΛ௨͍ͬͯͳ͍ͷͰJavaͰͳ͍ Sun MicrosystemsJavaͷஅΛট͘ͱͯ͠ɺAndroidͷJavaʢతͳͷʣΛඇ Androidࣄ݅
37
࣌ͷܞଳిJava ME͕ࡌ͞Ε͍ͯͨ ຊͰυίϞͱιϑτόϯΫ͕ɻauBREWʢC++ʣ Apple͕iPhoneΛϦϦʔεͯ͠ͱͳΓɺGoogleٸ͍ͰޙΛ͏ඞཁ͕͋ͬͨ Android͚ʹJavaVMΛಠࣗվม͢Δඞཁ͕͋Γɺιʔείʔυͷެ։ٛͷ͋ΔGPLv2ͷ OpenJDKΛ͍ͮΒ͔ͬͨͨΊɺެ։ٛͷͳ͍AL-2.0ͷApache HarmonyΛϕʔεʹͨ͠ʢਪଌʣ GoogleͰ͖ͪΜͱTCKΛ௨͖ͩ͢ͱ͍͏ҙݟग़͍͕ͯͨ Apache
HarmonyϕʔεͳͷͰ௨ΓΑ͏͕ͳ͔ͬͨ Androidࣄ݅ 38
20104݄ʹOracle͕Sun MicrosystemsΛങऩ 20108݄ʹOracle͕GoogleΛૌু AndroidͷJavaʢతͳͷʣ͕Javaͷஶ࡞ݖΛ৵͍ͯ͠Δͱ͍͏༰Ͱૌু ཌҎ߱ɺGoogleJavaͷ࣍ΧϯϑΝϨϯεJavaOneʹࢀՃ͠ͳ͘ͳΓɺ JavaͷOSSϓϩμΫτͷఏڙʹফۃతʹͳͬͨ Android͕αϙʔτ͢ΔJavaͷόʔδϣϯ67Ͱఀࢭͨ͠ʢؔܕ෩ͷهड़͕Ͱ͖ͳ͍ʣ Googleૌুࣄ݅ 39
ૌুͷ݁ ಛڐݖ৵ → ͍ͯ͠ͳ͍Ͱ֬ఆ JavaϥΠϒϥϦͷ࣮ίʔυΛແஅෳ → ͍ͯ͠Δ͕͔ᷮ͘͝ͳͷͰഛঈۚ0ԁ Java APIͷஶ࡞ݖ৵ →
͍ͯ͠Δ͕ϑΣΞϢʔεͩͱ֬ఆ ܞଳి͕εϚʔτϑΥϯʹஔ͖ΘΓɺJava ME͕ΘΕͳ͘ͳͬͨ͜ͱͰ Sun MicrosystemsOracleϞόΠϧʹ͓͚ΔJavaͷϏδωεΛࣦ͏͜ͱͱͳͬͨ Googleૌুࣄ݅ 40
ݱࡏɺOpenJDK͕།ҰͷOSS൛Javaͱͳ͍ͬͯΔ Apache HarmonyIcedTeaͳͲͷOSS JavaϓϩδΣΫτͯ͢OpenJDKʹ߹ྲྀͨ͠ 2016ʹAndroidOpenJDKϕʔεͱͳΓɺJava8ʹରԠͨ͠ ͨͩͦͷࠒʹAndroidΞϓϦ։ൃͷओྲྀJava͔ΒKotlinʹҠ͍ͬͯͬͨ Java67Ͱ࣮ߦͰ͖ɺϞμϯͳهड़Ͱ͖ΔͨΊ OpenJDK 41
༗ঈԽʁ
Java͜Ε·Ͱ2ʙ3͝ͱʹ৽͍͠όʔδϣϯ͕ग़͍͕ͯͨ 2017ͷJava 9Ҏ߱͝ͱʹϦϦʔε͞ΕΔ͜ͱͱͳͬͨ ৽ػೳ͕ἧ͔ͬͯΒϦϦʔε͢ΔͷͰͳ͘ ͝ͱʹؒʹ߹ͬͨػೳͷΈΛ࠾༻ͯ͠ϦϦʔε͢Δ ଞͷػೳ͕·ͩͰ͖͍ͯͳ͍͔Βɺͱ͍͏ཧ༝Ͱ৽ػೳͷϦϦʔε͕ ΕΔ͜ͱΛ͙ͨΊ
JavaͷϦϦʔεαΠΫϧͷมߋ 43
JavaΤϯδχΞ͕Javaͷ։ൃڥΛߏங͢Δࡍɺ ओྲྀOracleʢݩʑSun Microsystemsʣ͕ఏڙ͢ΔJDK/JREΛ༻͍͍ͯͨ Oracle͜ͷOracle JDKͷແঈఏڙΛதࢭ͠ɺJava 9Ҏ߱OpenJDKͷΈΛ ແঈఏڙ͢ΔΑ͏ํΛมߋͨ͠ ͜Ε͕ʮJava͕༗ঈԽ͞ΕΔʯͱ͍͏ޡղͷେݩ
Oracle JDKͷແঈऴྃ 44
Sun/Oracle JDKͷແঈαϙʔτظؒ࣍ͷόʔδϣϯ͕ग़ͨ͋ͱ1ʙ2ఔͩͬͨ ྫ͑Java 720117݄ϦϦʔεɻແঈαϙʔτ20154݄·Ͱ Java 820143݄ϦϦʔε ͜͜Ͱ͍͏ʮແঈαϙʔτظؒʯͱʮແঈΞοϓσʔτ͕ఏڙ͞ΕΔظؒʯΛࢦ͢ ಛʹηΩϡϦςΟύονͳͲ͋ΔͨΊɺແঈΞοϓσʔτ͕ఏڙ͞ΕΔ͜ͱॏཁ ༗ঈͰ͋ΕͬͱظؒͷαϙʔτΛड͚ΒΕΔ Java
7͔ΒJava 8ͷҠߦ1ʙ2͘Β͍ͷ༛༧͕͋Δͱݴ͑Δ JDKͷαϙʔτظؒ 45
Oracle OpenJDKͷແঈαϙʔτظؒʮ࣍ͷόʔδϣϯ͕ग़Δ·Ͱʯ ͭ·Γ͔ؒ͠Ξοϓσʔτ͕ఏڙ͞Εͳ͍ ޙʹ࣍ͷόʔδϣϯʹҠߦ͢Δඞཁ͕͋Δ ͜Ε͕ʮJava͕༗ঈԽ͞ΕΔʯͱ͍͏ޡղʹഥंΛֻ͚ͨ OpenJDKͷαϙʔτظؒ 46
֤͔ࣾΒOpenJDKͷϏϧυʢ͍ΘΏΔσΟετϦϏϡʔγϣϯʣ͕ఏڙ͞ΕΔΑ͏ʹͳͬͨ Red Hat OpenJDKɺEclipse AdoptiumʢچAdoptOpenJDKʣɺAmazon CorrettoͳͲ ֤ࣾͷOpenJDK3͝ͱʹग़ΔόʔδϣϯʹLTSʢLong Term SupportʣΛఏڙ OpenJDK
8ɺ11ɺ17ɺ23ɺɺɺ ແঈαϙʔτظ༷ؒʑ͕ͩɺͨͱ͑AdoptiumͷOpenJDK 82026·Ͱ ेʹ͍ແঈαϙʔτظ͕ؒ͋Δͱݴ͑Δ ༷ʑͳOpenJDK 47
͍·ͷओྲྀϓϥοτϑΥʔϜͰαϙʔτ͞Ε͍ͯΔOpenJDKΛར༻͢Δ͜ͱ Red Hat Enterprise LinuxΛ͏ͳΒRed Hat OpenJDK AWSͰ͏ͳΒAmazon Corretto AzureͰ͏ͳΒMicrosoft
Build of OpenJDK ֶशௐࠪ༻ͳΒαϙʔτظؒͷ͍Oracle OpenJDKͰߏΘͳ͍ ֤͕ࣾఏڙ͢ΔOpenJDKʹ͓͍ͯগͣͭ͠ఏڙ͢Δπʔϧ͕ҧͬͨΓɺద༻͞ΕΔύον͕ҟͳΔ͜ͱ ͋ΓಘΔ͕ɺݩͱͳΔOpenJDKಉҰͰ͋ΔͨΊͲΕΛͬͯ99%ಉ͡ɻίΞػೳ100%ಉ͡ ༷ʑͳOpenJDK 48
·ͱΊ: ͜Ε͔ΒͷJava
͜ͷΑ͏ͳឯ༨ۂંΛܦͯɺOSS൛ͷJavaOpenJDKͱͯ͠ҰຊԽ͞Εͨ ෳͷاۀஂମɺݸਓʹΑΓ࣮ɺϝϯςφϯε͞Ε͍ͯΔ ͪͳΈʹຊʹOpenJDKͷίϛολ͕͍ΔΑ ݱʹ͓͍ͯݴޠϓϥοτϑΥʔϜ͕OSSͰ͋Δ͜ͱͨΓલͷΑ͏ʹײ͡Δ͕ JavaͷΑ͏ʹ͍ྺ࢙͕͋ͬͯڊେͳΤίγεςϜΛ͏ͷΛ OSSจԽͷਁಁख़ͱڞʹOSSԽ͢Δͱ͜Ζʹ૬ͳྗ͕͋ͬͨͱݴ͑Δ OSSʹͳͬͨJava 50
GraalVMʹΑΔωΠςΟϒΠϝʔδͷ࡞ ίϯύΠϧͨ͠ͷΛJavaVM্Ͱ࣮ߦ͢ΔͷͰͳ͘ ίϯύΠϧͯͦ͠ΕͧΕͷOS͝ͱʹ࣮ߦՄೳͳόΠφϦΛ࡞Δ ىಈ࣌ؒͷॖɺϝϞϦ༻ྔͷݮ ϊϯϒϩοΩϯάॲཧܰྔεϨουʹΑΔฒྻॲཧͷվળ ReactorRxJavaͳͲΛ༻͍ͨϦΞΫςΟϒϓϩάϥϛϯάʢOSSϓϩμΫτʣ Project LoomʹΑΔܰྔεϨουݶఆܧଓͷఏڙʢJavaͷඪ४ػೳʹೖΔ༧ఆʣ ࠷ۙͱࠓޙͷJavaͷτϨϯυ
51
͝ͱͷϦϦʔεʹͳΓɺҎલΑΓػೳՃͷεϐʔυ͕૿ͨ͠ Flight RecorderʢJavaVMͷϝτϦΫεใΛه͢Δɻ༻ػೳͩͬͨͷ͕OSSԽʣ switchࣜʢswitch͕จ͚ͩͰͳࣜ͘ͱͯ͑͠ΔΑ͏ʹͳΓɺΛฦͤΔʣ ςΩετϒϩοΫʢ͍ΘΏΔώΞυΩϡϝϯτɻෳߦͷจࣈྻΛએݴͰ͖Δʣ Ϩίʔυܕʢσʔλܕʹ͍ۙɻΠϛϡʔλϒϧͳσʔλΫϥεΛ༰қʹ࡞ΕΔʣ ύλʔϯϚονʢΦϒδΣΫτͷܕʹΑͬͯذ͢Δʣ ػೳՃͷߴԽ 52
ܧଓతͳֶश͕ඞཁ ݹ͍ࣝͷ··ͰϓϩάϥϛϯάͰ͖Δ͕ɺͦΕ͕ਖ਼͍͠Θ͚Ͱͳ͍ ৽͍͠ػೳ͕ΘΕͨιʔείʔυΛಡΊͳ͍ͱࠔΔͰ͠ΐ͏ ܧଓతͳֶशΛଅ͢ίϛϡχςΟͷॏཁੑ͕૿͢ ఆظతͳษڧձใൃ৴ͳͲ ػೳՃͷߴԽͷରԠ 53
ܧଓతͳόʔδϣϯΞοϓ͕ඞཁ ͤΊͯ3͓͖ʹϦϦʔε͞ΕΔLTS൛ʹै͍ͤͨ͞ ୯७ʹJavaͷόʔδϣϯ͚ͩͰͳ͘ɺपลϥΠϒϥϦϑϨʔϜϫʔΫɺ ϛυϧΣΞͷόʔδϣϯΞοϓ͕ඞཁͱͳΔέʔεଟ͍ όʔδϣϯΞοϓʹै͢ΔͨΊͷCI/CDࣗಈςετͷΈ͕ෆՄܽ DevOpsվળɺͻ͍ͯΤϯδχΞ৫ͷ࣭ΛߴΊΔ ʢόʔδϣϯΛԘ௮͚ʹ͢Δͱ͍͏બࢶΞϦͰ͚͢Ͳʣ ϦϦʔεαΠΫϧͷߴԽͷରԠ 54
JavaOSSจԽͱڞʹาΈɺJavaࣗOSSԽ͞Εͨ ༷ʑͳOSSϓϩμΫτ͕ੜ·ΕɺJavaඪ४ʹऔΓࠐ·ΕΔྲྀΕੜ·Εͨ ଟ͘ͷ৫ݸਓͷߩݙʹࢧ͑ΒΕ͍ͯΔ ։ൃݩͷاۀ͕ങऩ͞ΕͯɺOSSϓϩμΫτาΈ͕ࢭ·Βͳ͍ ϦϦʔε͕ߴԽ͞ΕɺػೳՃ͕ૣ͘ͳͬͨ ։ൃίϛϡχςΟϢʔβʔάϧʔϓͳͲͷॏཁੑࠓޙ૿͍ͯ͘͠ ·ͱΊ 55
ຖ݄ͷJJUGφΠτηϛφʔ ࣍ճ9/29(ਫ)༧ఆ - Java 17ϦϦʔεه೦ηϛφʔ ʹ2ճͷJJUG CCC ࣍ճ11/21() URL: https://www.java-users.jp/
Twitter: @JJUG JJUGʹࢀՃ͠Α͏ʂ 56