Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
100
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
400
現代に求められる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
re:Inventで気になったサービスを10分でいけるところまでお話しします
yama3133
1
120
寫了幾年 Code,然後呢?軟體工程師必須重新認識的 DevOps
cheng_wei_chen
1
930
エンジニアとPMのドメイン知識の溝をなくす、 AIネイティブな開発プロセス
applism118
4
950
[CMU-DB-2025FALL] Apache Fluss - A Streaming Storage for Real-Time Lakehouse
jark
0
110
【CEDEC+KYUSHU2025】学生・若手必見!テクニカルアーティスト 大全 ~仕事・スキル・キャリアパス、TAの「わからない」を徹底解剖~
cygames
PRO
0
150
Noを伝える技術2025: 爆速合意形成のためのNICOフレームワーク速習 #pmconf2025
aki_iinuma
2
2.1k
【pmconf2025】PdMの「責任感」がチームを弱くする?「分業型」から全員がユーザー価値に本気で向き合う「共創型開発チーム」への変遷
toshimasa012345
0
270
モバイルゲーム開発におけるエージェント技術活用への試行錯誤 ~開発効率化へのアプローチの紹介と未来に向けた展望~
qualiarts
0
660
生成AI・AIエージェント時代、データサイエンティストは何をする人なのか?そして、今学生であるあなたは何を学ぶべきか?
kuri8ive
2
2.1k
Karate+Database RiderによるAPI自動テスト導入工数をCline+GitLab MCPを使って2割削減を目指す! / 20251206 Kazuki Takahashi
shift_evolve
PRO
1
530
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
AI時代におけるアジャイル開発について
polyscape_inc
0
130
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
4 Signs Your Business is Dying
shpigford
186
22k
KATA
mclloyd
PRO
32
15k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
For a Future-Friendly Web
brad_frost
180
10k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
It's Worth the Effort
3n
187
29k
Music & Morning Musume
bryan
46
7k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
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