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
99
26 Java Years
#31 ~オープンソースプロジェクトを支える言語たち~
2021-08/25
Shin Tanimoto
August 25, 2021
Tweet
Share
More Decks by Shin Tanimoto
See All by Shin Tanimoto
Spring Bootで実装とインフラをこれでもかと分離するための試み
shintanimoto
7
1.4k
クラウドネイティブ時代のコンテナ環境におけるJavaアプリケーションのメトリクス・ログ・トレースモニタリング
shintanimoto
5
2.4k
Let’s Have Fun with Reactive Programming, Using Reactor and WebFlux
shintanimoto
0
310
Monitoring and Visualizing Your (Micro)services
shintanimoto
1
390
現代に求められるJavaコミュニティとは / What should be the Java Community of Today?
shintanimoto
0
980
人生がときめく「学び」の魔法 / The Life-Changing Magic of Studying
shintanimoto
6
1.8k
業務で使いたいWebFluxによるReactiveプログラミング / Introduction to Reactive Programming using Spring WebFlux
shintanimoto
9
9.7k
from old Java to modern Java (2017) #jjug
shintanimoto
4
1.8k
Spring Cloud Sleuth + Zipkin with Elasticsearch #zipkin_jp
shintanimoto
1
1.3k
Other Decks in Technology
See All in Technology
[mercari GEARS 2025] なぜメルカリはノーコードを選ばなかったのか? 社内問い合わせ工数を60%削減したLLM活用の裏側
mercari
PRO
0
110
X-Ray SDKとDaemonのサポート終了と移⾏ガイド
o11yfes2023
0
120
Progressive Deliveryで支える!スケールする衛星コンステレーションの地上システム運用 / Ground Station Operation for Scalable Satellite Constellation by Progressive Delivery
iselegant
1
180
現地速報!Microsoft Ignite 2025 M365 Copilotアップデートレポート
kasada
1
450
Service Monitoring Platformについて
lycorptech_jp
PRO
0
180
はじめての OSS コントリビューション 〜小さな PR が世界を変える〜
chiroito
4
340
技術広報のOKRで生み出す 開発組織への価値 〜 カンファレンス協賛を通して育む学びの文化 〜 / Creating Value for Development Organisations Through Technical Communications OKRs — Nurturing a Culture of Learning Through Conference Sponsorship —
pauli
5
350
CloudFormationコンソールから、実際に作られたリソースを辿れるようになろう!
amixedcolor
1
190
ABEJA FIRST GUIDE for Software Engineers
abeja
0
3.2k
Proxmox × HCP Terraformで始めるお家プライベートクラウド
lamaglama39
1
210
「データ無い! 腹立つ! 推論する!」から 「データ無い! 腹立つ! データを作る」へ チームでデータを作り、育てられるようにするまで / How can we create, use, and maintain data ourselves?
moznion
8
4.4k
個人から巡るAI疲れと組織としてできること - AI疲れをふっとばせ。エンジニアのAI疲れ治療法 ショートセッション -
kikuchikakeru
2
870
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
It's Worth the Effort
3n
187
28k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Raft: Consensus for Rubyists
vanstee
140
7.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
What's in a price? How to price your products and services
michaelherold
246
12k
Designing for Performance
lara
610
69k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
192
56k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
118
20k
Designing Experiences People Love
moore
142
24k
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