RangeError: invalid time zone: JST — Safari 26.4での仕様厳格化に伴う不具合とその検証

こんにちは。LegalscapeのSV(solution value)チームでフロントエンドを中心に開発している近藤です。

SVチームは、プロダクトを単にリリースするだけではなく、実際の運用フェーズにおいて改善や保守を継続し、ユーザーへの価値提供を止めないことをミッションとしています。

長くプロダクトを運用していると、ブラウザ側のアップデートという外部要因によって、昨日まで動いていたコードが突然動作しなくなる場面に遭遇することがあります。

先日、iOSのSafari 26.4以降において、JavaScriptのランタイムエラーによりサイトが正常に動作しない事案が発生しました。 本件はこれまで許容されていた非標準な記述(JST)が、最新のWebKitアップデートによって厳格に排除されたことで顕在化したものです。

普段の開発環境(Mac版Chrome/Safari)では再現しなかったこの事象を、どのように特定し、解決へと導いたのかを共有します。

1. 状況:特定のOS環境でのみ表面化したエラー

ユーザーから「iPhoneで画面が正常に表示されない」との報告がありました。 手元のMac版ChromeおよびSafari(バージョン26.2)で動作確認を行いましたが、エラーは確認できず正常に動作していました。

調査の結果、この差はブラウザの「見た目」の違いではなく、内部のJavaScriptエンジン(JavaScriptCore)が持つ標準仕様への準拠レベルの違いに起因していました。

2. Xcode Simulatorによる検証

特定のOSバージョンでの挙動を確認するため、Xcode付属のSimulatorを使用しました。

詳細な手順は割愛しますが、シミュレータ内のSafariで対象サイトを開き、Mac側のSafariからWebインスペクタを接続してコンソールログを確認したところ、特定の環境でのみ発生していた不具合を再現できました。

3. 原因:非標準なタイムゾーン指定(JST)の排除

コンソールを確認したところ、以下のエラーが出力されていました。

RangeError: invalid time zone: JST

原因は、日付処理においてタイムゾーンを「JST」と指定していたことでした。

Safari 26.4のリリースノートを確認すると、標準仕様(TC39)への準拠を目的として、非IANAタイムゾーン(JSTなど)の指定時にRangeErrorを投げるよう明確に仕様が変更されています。

developer.apple.com

Fixed Intl.DateTimeFormat to throw a RangeError for legacy non-IANA timezones, aligning behavior with TC39 standards. (156857252)

Chrome等の他ブラウザでは、歴史的経緯から「JST」を「Asia/Tokyo」に内部でマッピングする補完処理が継続されています。 しかし、最新のiOS版WebKitはこの補完を廃止し、仕様に忠実な挙動へと舵を切りました。これにより、これまでブラウザの互換性処理に委ねられていた非標準な記述が、仕様への厳格な準拠によってエラーとして顕在化したのが今回の事案の本質です。

4. 対策:IANA Time Zone Database形式への完全移行

修正にあたっては、略称である「JST」を完全に廃止し、IANA標準の形式(Region/City)に変更する必要があります。

// iOS Safari 26.4以降で厳格に排除される記述
new Intl.DateTimeFormat('ja-JP', { timeZone: 'JST' });

// 推奨される標準的な記述
new Intl.DateTimeFormat('ja-JP', { timeZone: 'Asia/Tokyo' });

修正後、シミュレータ上でエラーが解消され、意図した通りに動作することを確認しました。

5. まとめと今後の推奨

今回の事案から、開発において以下の徹底が必要であると再認識しました。

  • 標準仕様の遵守: Intl APIを使用する際は、ブラウザの補完を期待せず、IANA Time Zone Database (tz database)の形式を用いるべき
  • シミュレータの活用: Mac版ブラウザとiOS版Safariでは、最新版のSafariのバージョンが異なる場合があり、iphoneの挙動の検証にはシミュレータが有用である
  • 自動テストの役割: WebKitを対象にした自動テスト(Playwright等)をCIに組み込み、常に最新のエンジンでテストすることで、こうした仕様変更を事前に検知できそう

今後は「現状のブラウザで動くか」だけでなく、常に標準仕様に基づいた実装を徹底することで、プラットフォームのアップデートに強い堅牢なフロントエンドを目指していきます。


References

  1. Safari 26.4 Release Notes
  2. TC39 - ECMA-402 Intl.DateTimeFormat
  3. IANA — Time Zone Database