【Firefox139】ついにTemporalが正式リリースされるぞ

とりあえず[Temporal](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal)が何でないかについて語っておくと、[Day.js](https://day.js.org/)に取って代わるものでも、[date-fns](https://date-fns.org/)に取って代わるものでも、[Luxon](https://moment.github.io/luxon/#/)に取って代わるものでもありません。

はっきり言うと、一般ユーザにとっては全く無関係な機能です。
なにしろ素のままでは`2000-1-23 12:34:56`を[Temporalに変換することができず](https://qiita.com/rana_kualu/items/2ec75820169659ab6d38)、[`2000/01/23 12:34:56`と出力することすらもできません](https://qiita.com/ota-meshi/items/4b525e0bfce931c9c504)
[今までライブラリ利用前提だった日時操作がこの標準前提になる日も近いかもしれません](https://gihyo.jp/article/2025/02/ride-modern-frontend-07)なんて言ってる人も居ますが、そんな日は来ません。

ではTemporalは何なのかというと、上記のようなライブラリが内部で使っている[Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)に取って代わる(ことになる予定の)仕組みです。


TC39では[ステージ3](https://github.com/tc39/proposals)となっており、あとは各ブラウザエンジンへの実装を待つ身となっています。
といいつつStage3になってからもちょくちょく仕様変更があったりしましたが。

実装はなにげにFirefoxが一番早く、2025/02/04にリリースされた[Firefox 135](https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/135)から実験的サポートが始まっていました。
そして、2025/05/27リリース予定の[Firefox 139でデフォルト有効化されることが決定](https://bugzilla.mozilla.org/show_bug.cgi?id=1912511)しました。

以下はMozillaのJavaScriptエンジン[SpiderMonkey](https://spidermonkey.dev/)公式ブログから、[Shipping Temporal](https://spidermonkey.dev/blog/2025/04/11/shipping-temporal.html)の紹介です。


# [Shipping Temporal](https://spidermonkey.dev/blog/2025/04/11/shipping-temporal.html)

[Temporalのプロポーザル](https://github.com/tc39/proposal-temporal)は、JavaScript言語において大きな課題のひとつであったDateの代替手段を提供します。
この投稿では、このプロポーザルの背景にある経緯と動機の一部を紹介します。
なおTemporal APIについては[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal)で詳しく解説されています。

Temporalは、2021年3月に[TC39プロセス](https://tc39.es/process-document/)のステージ3に到達しました。
ステージ3に到達したとは、仕様が確定したということであり、実装の準備が整ったということを意味します。

SpiderMonkeyは同月にTemporalの実装を開始しました。
最初の作業は[Bug 1519167](https://bugzilla.mozilla.org/show_bug.cgi?id=1519167)に記録されています。
驚いたことに、この実装はMozillaによるものではなく、たった一人のボランティアAndré Bargullの手によるものでした。
この最初の作業は99のパッチでできていましたが、作業はそこで止まることはありませんでした。
問題が発見されるたびに、仕様は進化し続けました。
AndréはSpiderMonkeyへのContributeに留まらず、Temporalの仕様自体についても[200件近くのIssueを報告](https://github.com/tc39/proposal-temporal/issues?q=is%3Aissue%20state%3Aclosed%20author%3Aanba)しました。
[Bug 1840374](https://bugzilla.mozilla.org/show_bug.cgi?id=1840374)は、仕様を最新に保つ膨大な作業の極一部の例です。

我々は、Firefox139においてTemporalをデフォルトで有効化し、これをリリースする最初のブラウザになります。

オープンソースやコミュニティ、ボランティア開発者のアイデアといったものは、もはや美しい過去の歴史に感じる人もいるかもしれません。
しかしTemporalの例は、ひとりのボランティア開発者がFirefoxやJavaScriptに依然として大きな影響を与えることができるという事実を示しています。


## Interested in contributing?

全てのプロポーザルがTemporalのように巨大なわけではありません。
あらゆる規模のContributeを歓迎しています。
SpiderMonkeyに興味があれば、ぜひ[バグの一覧](https://bugzilla.mozilla.org/buglist.cgi?query_format=advanced&emailbug_mentor2=1&emailtype2=regexp&resolution=---&email2=.*&component=JavaScript%20Engine&component=JavaScript%20Engine%3A%20JIT&component=JavaScript%3A%20GC&component=JavaScript%3A%20Internationalization%20API&component=JavaScript%3A%20Standard%20Library&list_id=17451567&classification=Client%20Software&classification=Developer%20Infrastructure&classification=Components&classification=Server%20Software&classification=Other&product=Core)ご覧ください。
仕様の方面に興味があるのであれば、[TC39へのcontribute](https://github.com/tc39/ecma262/blob/HEAD/CONTRIBUTING.md)も参照ください。


# 感想

ライブラリ開発者にとっては、Dateの軽率な動作に左右される状況がなくなり、日付時刻タイムゾーンの厳格な取り扱いが可能となるため、たいへん嬉しい機能であることは間違いないことでしょう。
しかしライブラリ開発者でもない一般人にとっては、最も使いたい`.parse()`や`.format()`が[ない](https://qiita.com/access3151fq/items/ec27a14271c99a379af0#%E6%96%87%E5%AD%97%E5%88%97%E3%81%8B%E3%82%89temporal%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%B8%E3%81%AE%E5%A4%89%E6%8F%9B)ので、役に立たない機能であると言わざるを得ません。

いやーTemporalの紹介記事ってなんか「[Dateの完全代替だ！](https://gigazine.net/news/20250131-javascript-temporal/)」「[これで日時ライブラリは不要！](https://gihyo.jp/article/2025/02/ride-modern-frontend-07)」みたいな大言壮語が目立つので、そんなわけないだろと釘を刺したくなるんですよね。

結局JavaScriptを書くときの日時管理はこれまでどおりライブラリが執り行い、Temporalはその裏側でひっそり動いている、というこれまでとほぼ変わらない光景がこれからも続くことでしょう。