Share
Embed
Transcript
19 slides
-
© Findy Inc. 2026.06.10 TSKaigi Night talks 〜after conference〜 Temporal
- TypeScript 6.0で始める 新しい⽇時API 1 甲斐 和基 ファインディ株式会社 フロントエンドエンジニア @karukan029 -
© Findy Inc. 3 2026年のTemporal周りの動き • 2⽉ ◦ TypeScript 6.0
Betaで組み込み型としてTemporalが追加 ◦ https://devblogs.microsoft.com/typescript/announcing-typescri pt-6-0-beta/#new-types-for-temporal • 3⽉ ◦ Temporal がTC39 Process Stage 4に追加 ◦ https://github.com/tc39/agendas/blob/main/2026/03.md • 5⽉ ◦ Node.js v26リリース、実験的フラグなしでTemporalが使⽤可能に ◦ https://nodejs.org/ja/blog/release/v26.0.0 -
© Findy Inc. 6 Date APIの課題 • ミュータブルなメソッドを持ち、意図しない変更を発⽣させるリスクが ⾼い •
⽉が0始まりで分かりづらい • ローカルのタイムゾーンとUTC以外のタイムゾーンをサポートしていな い • パースの挙動が予測しづらい ◦ パースに失敗してもエラーをthrowせず、Invalid Date という値を返 す ◦ ⽇付⽂字列のフォーマットでタイムゾーンを解釈される • グレゴリオ暦のみのサポート -
© Findy Inc. 7 Temporalでどのように解決されたか • イミュータブルなメソッドを持ち、 すべてのメソッドが新しいオブジェ クトを返すため、意図しない変更を発⽣させるリスクが低い ◦
簡単な⽇時の計算ロジックはTemporalで完結できる部分も増えた • ⽉が1始まりで分かりやすい • 任意のタイムゾーン情報を持たせることが可能 • パースの仕様が厳密 ◦ パースに失敗するとエラーをthrowする ◦ Temporalは(PlainDate/Instant/ZonedDateTimeなど)でタイム ゾーンの有無やデータの構造を明⽰的に区別 • グレゴリオ暦以外の暦をサポート -
© Findy Inc. 8 Temporalの構造 • ZonedDateTime … タイムゾーンと暦を持つ •
Instant … タイムスタンプ • PlainDateTime … タイムゾーンを持たない⽇付と時刻 • PlainDate / PlainTime … ⽇付だけ / 時刻だけ • PlainYearMonth/ PlainMonthDay … 年⽉だけ / ⽉⽇だけ • Duration … 2つの時点間の差分 -
© Findy Inc. 11 Temporalでどのように解決されたか • イミュータブルなメソッドを持ち、 すべてのメソッドが新しいオブジェ クトを返すため、意図しない変更を発⽣させるリスクが低い ◦
いくつかメソッドも追加されており、簡単な⽇時の計算ロジックは Temporalで完結できるように • ⽉が1始まりで分かりやすい • 任意のタイムゾーン情報を持たせることが可能 • パースの仕様が厳密 ◦ パースに失敗するとエラーをthrowする ◦ Temporalは(PlainDate/Instant/ZonedDateTimeなど)でタイム ゾーンの有無やデータの構造を明⽰的に区別 • グレゴリオ暦以外の暦をサポート -
© Findy Inc. 13 Temporalは⽇時操作ライブラリを不要にするのか? • 今までより⽇時操作ライブラリが担う役割は⼩さくなるかもしれない が、完全に不要にするものではない • 簡単な⽇時の計算ロジックやタイムゾーン関連、不正な値の処理などは
Temporalで扱えるようになる • 柔軟なフォーマットやより具体的なユースケースに沿った⽇時操作のロ ジックは引き続き⽇時操作ライブラリが担う -
© Findy Inc. 15 Temporalのサポート状況 • ブラウザ:Chrome / Edge /
Firefox ✅ Safari ⚠ • JavaScriptランタイム:Node.js / Deno ✅ Bun ❌ ◦ Node.js は v24(LTS)では実験的フラグ付き、v26で完全サポート • 本番投⼊にはまだポリフィルが必要 ◦ https://github.com/js-temporal/temporal-polyfill ◦ https://github.com/fullcalendar/temporal-polyfill ◦ https://github.com/fabon-f/temporal-polyfill-lite -
© Findy Inc. 17 まとめ • TemporalはDateの課題を解決し、Dateを置き換えるものとして設計さ れた新しい⽇時 API •
⽇時操作ライブラリを完全に置き換えるものではない ◦ 単純な⽐較や計算ロジックは代替できるが、より複雑な⽇時操作の ユーティリティとして活⽤するメリットは残る • まだ未サポートの環境があるため、本番導⼊時はポリフィルを使う ◦ Stage 4なので、近いうちにサポートされる可能性は⾼そう? -
© Findy Inc. 18 もっと詳しく知りたい⽅へ • https://tc39.es/proposal-temporal/docs/ja/index.html • https://tc39.es/proposal-temporal/docs/cookbook.html •
https://github.com/tc39/proposal-temporal • https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Gl obal_Objects/Temporal