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
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
26 Java Years
#31 ~オープンソースプロジェクトを支える言語たち~
2021-08/25
Shin Tanimoto
August 25, 2021
More Decks by Shin Tanimoto
See All by Shin Tanimoto
Spring Bootで実装とインフラをこれでもかと分離するための試み
shintanimoto
7
2k
クラウドネイティブ時代のコンテナ環境におけるJavaアプリケーションのメトリクス・ログ・トレースモニタリング
shintanimoto
5
2.5k
Let’s Have Fun with Reactive Programming, Using Reactor and WebFlux
shintanimoto
0
350
Monitoring and Visualizing Your (Micro)services
shintanimoto
1
450
現代に求められるJavaコミュニティとは / What should be the Java Community of Today?
shintanimoto
0
1k
人生がときめく「学び」の魔法 / The Life-Changing Magic of Studying
shintanimoto
6
1.9k
業務で使いたいWebFluxによるReactiveプログラミング / Introduction to Reactive Programming using Spring WebFlux
shintanimoto
9
10k
from old Java to modern Java (2017) #jjug
shintanimoto
4
1.9k
Spring Cloud Sleuth + Zipkin with Elasticsearch #zipkin_jp
shintanimoto
1
1.3k
Other Decks in Technology
See All in Technology
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
4
1.4k
20分でわかるセキュアAPI
nwiizo
2
230
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
1
1.2k
【CEDEC2026】『Relink』を拡張せよ - 『GRANBLUE FANTASY: Relink - Endless Ragnarok』の開発速度と品質を守るCI運用
cygames
PRO
0
150
Digitization部 紹介資料
sansan33
PRO
2
7.7k
Webアクセシビリティ入門 2026
recruitengineers
PRO
3
490
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
250
Cursor Meetup Sapporo - Cursor物語 続編
cocacola917
0
150
AI駆動開発は個人技からチーム戦へ:組織でAIを使いこなすための実践設計
moongift
PRO
0
490
[しろおび夏祭り2026] チャットするAIから、作業するAIへ - 使われ方の変化と、その裏側で起きていること
kk0n
0
1.7k
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
460
サイバー捜査員研修(後半)
nomizone
1
830
Featured
See All Featured
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
380
Mind Mapping
helmedeiros
PRO
1
300
The Spectacular Lies of Maps
axbom
PRO
1
900
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Typedesign – Prime Four
hannesfritz
42
3.1k
Evolving SEO for Evolving Search Engines
ryanjones
0
250
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
550
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
The Curious Case for Waylosing
cassininazir
1
450
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
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