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
110
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がコードを書いてくれるなら、新米エンジニアは何をする? / komekaigi2025
nkzn
25
20k
Cloudflare Workers で作る専門性特化型 MCP サーバー / workers-specialist-mcp
nkzn
1
210
経済メディア編集部の実務に小さく刺さるAI / small-ai-with-editorial
nkzn
3
1.2k
Remix × Cloudflare Pages × Sentry 奮闘記 / remix-pages-sentry
nkzn
1
3k
Cloudflareスタックで月間1200万UUの経済メディアにアバター画像生成サービスを作る / Cloudflare Developer Platform for AI avatar service
nkzn
7
5.4k
5分で流し読むCloudflare Developer Platform
nkzn
3
490
次世代Web認証「パスキー」 / mo-zatsudan-passkey
nkzn
32
19k
パスキーについて今日時点の僕が知っていること / What I Know About Passkeys as of Today
nkzn
8
3.1k
青い空の歩き方 / Flying in the bluesky
nkzn
1
410
Other Decks in Technology
See All in Technology
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
2
420
リアーキテクチャ後の障害ゼロを目指したShadow Testingの取り組み
nihonbuson
PRO
1
160
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
10
4.4k
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
360
登壇の自信を奪う3匹のオバケ / 3 Ghosts That Rob You of Your Confidence in Public Speaking
pauli
9
1k
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
2.1k
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
250
人間はどの意思決定を手放せるのか
kawasima
15
7.6k
現場で役立つ技術負債の効果的な返済方法
masuda220
PRO
9
4.7k
Goodbye ShellScript, Hello File-based App
shunsock
0
500
ソフトウェアDNAとクラウドエージェントのススメ
cloudace
0
120
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
1
680
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
The untapped power of vector embeddings
frankvandijk
2
1.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Writing Fast Ruby
sferik
630
63k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
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