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
120
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
220
経済メディア編集部の実務に小さく刺さるAI / small-ai-with-editorial
nkzn
3
1.3k
Remix × Cloudflare Pages × Sentry 奮闘記 / remix-pages-sentry
nkzn
1
3.1k
Cloudflareスタックで月間1200万UUの経済メディアにアバター画像生成サービスを作る / Cloudflare Developer Platform for AI avatar service
nkzn
7
5.5k
5分で流し読むCloudflare Developer Platform
nkzn
3
500
次世代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
420
Other Decks in Technology
See All in Technology
12 個 Tool と、 4,096 Token
hlum
0
110
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
780
使いこなすために知っておきたい Azure SRE Agent アンチパターン
torumakabe
2
430
Codex概要
ymiya55
0
490
FactoryBotアンチパターン / factory_bot anti-patterns
toshimaru
0
140
全PRの83%が AIレビューだけでマージできるようになった開発組織は その後どうなったか @2026/10
athug
0
130
AIに攻撃される前に、AIに攻撃させる
tsuchikazu
0
170
Deep Data Security 機能解説
oracle4engineer
PRO
2
750
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
2
370
「Docker Desktop不要の時代」は 来たのか?
ueponx
0
400
"優秀な誰か"の下位互換にならないために
yut0naga1_fa
0
1.2k
AIは爆速なのに、私が詰まっていた話 ― 音声入力と鳴くマスコットでボトルネックを削る
yama3133
0
580
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
58k
Claude Code のすすめ
schroneko
67
230k
Facilitating Awesome Meetings
lara
57
7.2k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
480
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
540
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
210
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
540
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
790
A Soul's Torment
seathinner
8
3.7k
We Have a Design System, Now What?
morganepeng
55
8.4k
Accessibility Awareness
sabderemane
1
240
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
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