Tech勉強会レポート – TSKaigi2025レポート/Temporalについて

お久しぶりです。江口です。

10月に入り、ようやく涼しくなってきましたね。

今回は、9月に実施された弊社のTech勉強会のレポートをお届けします。

弊社では、2〜3ヶ月に一度「1day office」として、全社員が一堂に会する行事があります。
その際に、毎回2名ほどの発表者による勉強会を開催しています。

今回は、丸山さんによる「TSKaigi2025レポート」と、北さんによる「Temporalについて」の二本立てでした。

TSKaigi2025レポート by 丸山さん

以前、丸山さんからこちらの記事でも紹介しましたが、この中から、特に印象に残った内容をピックアップし、得られたナレッジや知見を社内向けに詳しく共有していただきました。

他者の発表内容の共有となるため詳細は割愛しますが、いくつか抜粋すると…

  • NodeJSがv23.6.0からTSの実行を正式に採用
    • ts-nodeが不要になり、直接実行できるようになる
    • webpack, esbuildなどを使ったトランスパイルも不要
  • TypeScriptネイティブ移植
    • TypeScriptのコンパイラ(tsc)をJavaScriptでの実装からGo言語でのネイティブ実装に移し替えるプロジェクト
    • 速度
    • ネイティブ化:3~3.5倍
    • 並列処理:3~3.5倍
    • およそ10倍
    • メモリの確保が大きい
    • jsはobjごとにヒープに割り当てられ、GCの確保が乱発

    などなど...

個人的な感想

JavaScriptは、オブジェクトごとにヒープ領域にメモリを割り当て、GCが頻繁に発生するため、パフォーマンスのボトルネックになることがあります。
そのため、開発体験(DX)改善の観点からも非常に興味深い話題でした。

このような勉強会に参加することで、自分が直接体験していなくても、他者の経験や知識、ナレッジを得られるのは非常にありがたいことだと思います。

今回はTSKaigiのフィードバックだけでなく、「どんどん外部の勉強会に参加していこう!学ぶことが多いよ!」という丸山さんからの呼びかけ・お誘いでもありました。
熱い男です。

Temporalについて by 北さん

Temporalは、従来のDateオブジェクトにおける以下のような既知の問題を解決するために開発された、新しい日付・時刻APIです。

1. タイムゾーンをサポートしていない
2. 日付計算の扱いにくさ
3. グレゴリオ暦以外がサポートされていない
4. パースの信頼性が低い
5. ミュータブルなオブジェクトである

現在はStage 3にあり、正式対応しているのはFirefoxのみです。

既存のDateオブジェクトに破壊的変更を加えることができないため、Temporalが新たに開発されました。
用途に応じて Temporal.PlainDate() などの形式を選択でき、add()subtract() によって簡単に日付計算が可能です。
また、Temporal.ZonedDateTime を使えばタイムゾーンの指定もできます。

これにより、外部ライブラリなしでJavaScriptネイティブに日付操作が可能となり、day.js や date-fns などのライブラリが不要になる可能性があります。

参考資料

https://github.com/tc39/proposal-temporal

https://tc39.es/process-document/

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal#browser_compatibility

https://maggiepint.com/2017/04/09/fixing-javascript-date-getting-started/

https://maggiepint.com/2017/04/11/fixing-javascript-date-web-compatibility-and-reality/

個人的な感想

北さんも最新の技術への好奇心旺盛な熱い男ですね。。

Moment.jsの開発終了に伴い、day.jsなどに移行した方も多いと思います。
day.jsはタイムゾーン変換においてパフォーマンス課題があったり、使い込まないと直面しないような問題もあり、苦労された方も多いのではないでしょうか。

どのライブラリにも言えることですが、性能面も意識して選択できると嬉しいですね(とはいえ、事前に完全にキャッチアップするのは難しいですが…)。

それでも選択肢が増えるのはありがたいことですし、開発者の皆さんには感謝しかありません。