とりあえずTemporalが何でないかについて語っておくと、Day.jsに取って代わるものでも、date-fnsに取って代わるものでも、Luxonに取って代わるものでもありません。
はっきり言うと、一般ユーザにとっては全く無関係な機能です。
なにしろ素のままでは2000-1-23 12:34:56
をTemporalに変換することができず、2000/01/23 12:34:56
と出力することすらもできません
今までライブラリ利用前提だった日時操作がこの標準前提になる日も近いかもしれませんなんて言ってる人も居ますが、そんな日は来ません。
ではTemporalは何なのかというと、上記のようなライブラリが内部で使っているDateに取って代わる(ことになる予定の)仕組みです。
TC39ではステージ3となっており、あとは各ブラウザエンジンへの実装を待つ身となっています。
といいつつStage3になってからもちょくちょく仕様変更があったりしましたが。
実装はなにげにFirefoxが一番早く、2025/02/04にリリースされたFirefox 135から実験的サポートが始まっていました。
そして、2025/05/27リリース予定のFirefox 139でデフォルト有効化されることが決定しました。
以下はMozillaのJavaScriptエンジンSpiderMonkey公式ブログから、Shipping Temporalの紹介です。
Shipping Temporal
Teporalのプロポーザルは、JavaScript言語において大きな課題のひとつであったDateの代替手段を提供します。
この投稿では、このプロポーザルの背景にある経緯と動機の一部を紹介します。
なおTemporal APIについてはMDNで詳しく解説されています。
Temporalは、2021年3月にTC39プロセスのステージ3に到達しました。
ステージ3に到達したとは、仕様が確定したということであり、実装の準備が整ったということを意味します。
SpiderMonkeyは同月にTemporalの実装を開始しました。
最初の作業はBug 1519167に記録されています。
驚いたことに、この実装はMozillaによるものではなく、たった一人のボランティアAndré Bargullの手によるものでした。
この最初の作業は99のパッチでできていましたが、作業はそこで止まることはありませんでした。
問題が発見されるたびに、仕様は進化し続けました。
AndréはSpiderMonkeyへのContributeに留まらず、Temporalの仕様自体についても200件近くのIssueを報告しました。
Bug 1840374は、仕様を最新に保つ膨大な作業の極一部の例です。
我々は、Firefox139においてTemporalをデフォルトで有効化し、これをリリースする最初のブラウザになります。
オープンソースやコミュニティ、ボランティア開発者のアイデアといったものは、もはや美しい過去の歴史に感じる人もいるかもしれません。
しかしTemporalの例は、ひとりのボランティア開発者がFirefoxやJavaScriptに依然として大きな影響を与えることができるという事実を示しています。
Interested in contributing?
全てのプロポーザルがTemporalのように巨大なわけではありません。
あらゆる規模のContributeを歓迎しています。
SpiderMonkeyに興味があれば、ぜひバグの一覧ご覧ください。
仕様の方面に興味があるのであれば、TC39へのcontributeも参照ください。
感想
ライブラリ開発者にとっては、Dateの軽率な動作に左右される状況がなくなり、日付時刻タイムゾーンの厳格な取り扱いが可能となるため、たいへん嬉しい機能であることは間違いないことでしょう。
しかしライブラリ開発者でもない一般人にとっては、最も使いたい.parse()
や.format()
がないので、役に立たない機能であると言わざるを得ません。
いやーTemporalの紹介記事ってなんか「Dateの完全代替だ!」「これで日時ライブラリは不要!」みたいな大言壮語が目立つので、そんなわけないだろと釘を刺したくなるんですよね。
結局JavaScriptを書くときの日時管理はこれまでどおりライブラリが執り行い、Temporalはその裏側でひっそり動いている、というこれまでとほぼ変わらない光景がこれからも続くことでしょう。