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
JS Temporalを学ぶ人のための JSR-310入門 / jsr310-for-temp...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yukiya Nakagawa
September 26, 2025
Technology
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JS Temporalを学ぶ人のための JSR-310入門 / jsr310-for-temporal
https://niigata-5min-tech.connpass.com/event/368411/
Yukiya Nakagawa
September 26, 2025
More Decks by Yukiya Nakagawa
See All by Yukiya Nakagawa
視野はAIに、視座は人に / ai-for-breadth-humans-for-perspective
nkzn
6
3.2k
明日の講演、こうやって作ってます - KomeKaigi 2026招待講演のメイキング / niigata-5min-tech-20261030
nkzn
0
59
AIがコードを書いてくれるなら、新米エンジニアは何をする? / komekaigi2025
nkzn
25
20k
Cloudflare Workers で作る専門性特化型 MCP サーバー / workers-specialist-mcp
nkzn
1
230
経済メディア編集部の実務に小さく刺さるAI / small-ai-with-editorial
nkzn
3
1.3k
Remix × Cloudflare Pages × Sentry 奮闘記 / remix-pages-sentry
nkzn
1
3.2k
Cloudflareスタックで月間1200万UUの経済メディアにアバター画像生成サービスを作る / Cloudflare Developer Platform for AI avatar service
nkzn
7
5.7k
5分で流し読むCloudflare Developer Platform
nkzn
3
500
次世代Web認証「パスキー」 / mo-zatsudan-passkey
nkzn
32
19k
Other Decks in Technology
See All in Technology
「AIチャットからもできないの?」と言われたら ~業務アプリをMCP対応するときの認証・認可の勘所
oidfj
0
130
【dbts2026】AIエージェントの 判断と探索を変える、 データベース エンジニアリング― 既存DBの処理と依存関係から作る、オペレーショナルオントロジー ―
shisyu_gaku
0
240
新米を「売り越さない」、Aurora DSQLで作る在庫ゼロ死守の限定ドロップEC
yama3133
0
190
Sizing, Benchmarking and Performance Tuning Apache Flink Clusters
rmetzger
0
130
AIエージェントの監視、思考を見るか行動を見るか / Monitoring AI Agents: Thoughts or Actions
yusukeshimizu
2
170
業務でAWSをあまり使っていない私が、AWSへのモチベを保つ方法
smt7174
0
180
AX時代の自治体支援リソース再配分と役割分担の再構成:戦略とロードマップ(概要)
sishi2026
0
200
顧客合意を取りながら進めるAWSコスト削減の実践
optim
0
130
ゼロから作るWebアプリの新定番!?Amplify Gen 2 × AWS Blocksで実現する「開発速度とRDBの柔軟性のいいとこ取り」
amixedcolor
1
170
あなたのDartコードは丸見えかもしれない ~reFlutterで暴くFlutterアプリの中身と多層防御~
zozotech
PRO
0
780
Gifu WordPress Meetup #200 に向けて、私たちには何ができるだろうか?/ 2026-11-07 Gifu WordPress Meetup
torounit
0
220
AIがGISを代替する日:〜すべてをAIが創る時代に、私たちがFOSS4Gに関わる意味〜
lehupa
1
210
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
3
790
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Balancing Empowerment & Direction
lara
6
1.4k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
540
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
How to train your dragon (web standard)
notwaldorf
96
6.9k
Site-Speed That Sticks
csswizardry
13
1.6k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
240
How to Think Like a Performance Engineer
csswizardry
28
2.9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.8k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Transcript
JS Temporalを学ぶ人のための JSR-310入門 Niigata 5min Tech #22 2025.9.26 Yukiya Nakagawa
1
今日話すこと JS Dateの奇妙な仕様の由来 Joda-Timeから java.time への進化 JS TemporalとJSR-310の共通点 同じ課題に対するアプローチは似る 2
JS Dateの不思議な仕様 // 月が0 から始まる... ? new Date(2024, 0, 1);
// 2024 年1 月1 日 // なぜこんな設計に... ? 3
JavaとJavaScriptのDate仕様は少し似ている JavaScript言語の成立からしてJavaライクな構文を求められた逸話があるが、意図して なのか偶然なのか、Dateクラスの仕様もちょっとだけ似ている。 // JavaScript - 月は0 から11 new Date(2024,
0, 1); // 2024 年1 月1 日 // Java - 月も0 から11 new Date(124, 0, 1); // 2024 年1 月1 日 // ※年は1900 年からの経過年数 // 実用上はCalendar クラスを組み合わせることでなんとか使っていた 両言語とも月が0から始まる奇妙な仕様 (まあJanuary, Februaryの国で生まれたら仕方ないんだけどさ) 4
共通の問題点 月が0から始まる (直感的でない) ミュータブル (意図しない変更が起きる) タイムゾーン処理が複雑 国際化対応が不十分 JavaもJavaScriptも同じ課題を抱えていた 5
Javaではどのように解決したのか 6
Joda-Timeの革命 2002年から開発開始、Java 8以前のデファクトスタンダードに // Joda-Time - 直感的なAPI LocalDate date =
new LocalDate(2024, 1, 1); // 月は1 から! LocalDateTime dt = date.toLocalDateTime(new LocalTime(14, 30)); LocalDate tomorrow = date.plusDays(1); // イミュータブル 「Java Dateの問題を全て解決する」ライブラリとして大成功 AndroidでもJava8正式対応前にバックポートライブラリが作られたりした 7
JSR-310 (java.time) の誕生 Joda-Timeの作者 Stephen Colebourneが主導 2014年: Java 8でリリース ただし、Joda-Timeをそのまま採用せず根本的に再設計
"Joda-Timeには設計上の欠陥があった" - Stephen Colebourne 8
JSR-310の革新 // 用途に応じた明確な型分離 LocalDate date = LocalDate.of(2024, 1, 1); LocalTime
time = LocalTime.of(14, 30); LocalDateTime dateTime = LocalDateTime.of(2024, 1, 1, 14, 30); ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Tokyo")); Instant instant = Instant.now(); 全てイミュータブル、スレッドセーフ、直感的 9
JSR-310の設計原則 1. イミュータブル - 全ての型が不変 2. 明確な責任分離 - 用途別の型設計 3.
Null安全 - ほぼ全てでNULLを拒否 4. ナノ秒精度 - ミリ秒を超える精度 10
では、JavaScriptは 11
JavaScript側の状況 JavaScriptでも長年、様々なライブラリが登場 moment.js (2011年〜) date-fns (2014年〜) dayjs (2018年〜) luxon (2017年〜)
どれも一定の支持を得たが、決定的な解決策にはならなかった 根本的な解決にはネイティブAPIの刷新が必要だった 12
Temporal の登場 TC39で提案されている新しいDate/Time API // Temporal - 明確な型分離 const date
= Temporal.PlainDate.from('2024-01-01'); const time = Temporal.PlainTime.from('14:30'); const dateTime = Temporal.PlainDateTime.from('2024-01-01T14:30'); const zoned = Temporal.ZonedDateTime.from('2024-01-01T14:30[Asia/Tokyo]'); const instant = Temporal.Instant.from('2024-01-01T00:00:00Z'); 13
型設計の類似性 JavaScript Temporal Java JSR-310 用途 PlainDate LocalDate 日付のみ PlainTime
LocalTime 時刻のみ PlainDateTime LocalDateTime 日時(TZ無し) ZonedDateTime ZonedDateTime TZ付き日時 Instant Instant UTCベースの単一時点 似た概念、似た名前 14
API設計の共通点 // Temporal const date = Temporal.PlainDate.from('2024-01-01'); const nextWeek =
date.add({ weeks: 1 }); const modified = date.with({ day: 15 }); // JSR-310 LocalDate date = LocalDate.of(2024, 1, 1); LocalDate nextWeek = date.plusWeeks(1); LocalDate modified = date.withDayOfMonth(15); 操作のパターンが類似 15
イミュータブル設計 // Temporal - 全て不変 const original = Temporal.PlainDate.from('2024-01-01'); const
modified = original.add({ days: 1 }); console.log(original.toString()); // 2024-01-01 ( 変更されない) // JSR-310 - 全て不変 LocalDate original = LocalDate.of(2024, 1, 1); LocalDate modified = original.plusDays(1); System.out.println(original); // 2024-01-01 ( 変更されない) 16
なぜ似ているのか? 同じ問題を解決しようとしているから 1. Date/Time操作の本質的な課題は言語を超えて共通 タイムゾーンの複雑さ 日付と時刻の分離の必要性 イミュータブル性の重要性 2. 業界のベストプラクティスが確立 Joda-Time
→ JSR-310の成功事例 同じ設計パターンの採用 17
注意:直接的な影響は不明 TemporalがJSR-310を直接参考にした証拠はない しかし、似た問題には似た解決策が生まれる 両者とも現代的なDate/Time APIのベストプラクティスを体現 18
JavaScriptエンジニアはJSR-310の事例を調べてみるといいかも 10年以上の実績がある成熟した設計 Temporalと驚くほど似ている 既に解決済みの落とし穴を事前に学べる js-jodaを使ったことがある?それはJSR-310の移植版 JSR-310は「未来のTemporalの予習」として最適! 19
まとめ JS DateもJava Dateも1990年代の設計の限界 Joda-Time (2002年〜) が革新をもたらした JSR-310 (2014年) でモダンな設計が確立
Temporal はかなり似た設計思想を採用 良い設計は言語を超えて共通する! 20
ありがとうございました! Temporalの正式リリースが楽しみ! JSR-310の設計思想を理解して備えよう Temporal Proposal: https://github.com/tc39/proposal-temporal 現在Stage 3(実装推奨段階) 21
参考文献URL一覧 22
JavaScript の歴史とDate API https://cybercultural.com/p/1995-the-birth-of-javascript/ https://en.wikipedia.org/wiki/JavaScript https://www.coursereport.com/blog/history-of-javascript https://auth0.com/blog/a-brief-history-of-javascript/ https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Global_Objects/Date https://www.w3schools.com/js/js_date_methods.asp
https://www.geeksforgeeks.org/javascript/history-of-javascript/ https://softteco.com/blog/history-of-javascript ※ 2025年9月26日時点でのWeb検索により収集 23
Java Date API と JSR-310 https://docs.oracle.com/javase/8/docs/api/java/util/Date.html https://www.joda.org/joda-time/ https://www.baeldung.com/joda-time https://stackoverflow.com/questions/24631909/ https://blog.joda.org/2009/11/why-jsr-310-isn-joda-time_4941.html
https://blog.joda.org/2014/11/converting-from-joda-time-to-javatime.html https://www.mscharhag.com/java/java-8-date-time-api https://belief-driven-design.com/essentials-of-java-time-59cff478fdf/ ※ 2025年9月26日時点でのWeb検索により収集 24
JavaScript Temporal https://tc39.es/proposal-temporal/ https://tc39.es/proposal-temporal/docs/ https://github.com/tc39/proposal-temporal https://developer.mozilla.org/en-US/blog/javascript-temporal-is-coming/ https://bryntum.com/blog/javascript-temporal-is-it-finally-here/ ※ 2025年9月26日時点でのWeb検索により収集 25
その他 https://js-joda.github.io/js-joda/ https://stackoverflow.com/questions/1090815/how-to-clone-a-date-object https://stackoverflow.com/questions/9243578/java-util-date-and-getyear ※ 2025年9月26日時点でのWeb検索により収集 26