エラーの内容
JavaScriptでcrypto.randomUUID()
を使用してuuidを生成しようとした際、以下のエラーが発生しました。ここではその原因と対策を記録しておきます。
Uncaught TypeError: self.crypto.randomUUID is not a function
エラーの発生状況
このエラーがテストページでのみ発生していたため、不思議に思って検証したところ、HTTPS環境で実行した場合は発生しないが、HTTP環境では発生するという特徴がありました。
そもそもcryptoとは
Crypto インターフェイスは、現在のコンテキストで利用できる基本的な暗号機能を表します。 これは、暗号強度の強い乱数生成器と暗号プリミティブへのアクセスを許可します。
crypto
はJavaScriptの組み込みオブジェクトで、暗号関連の機能を提供してくれます。その中のrandomUUID()
メソッドは、HTTPS環境またはlocalhostのようなセキュアコンテキストでのみ利用可能な仕様になっているそうです。
対処法
HTTPS通信を使用する
特別な理由がない限り、HTTPS通信を使用するのが適切です。ローカル環境では、http://localhost
を使用していればエラーは発生しません。
一応、乱数を組み合わせるなどして無理やりuuidを自作することも可能ですが、そもそもHTTP通信しかできない環境でuuidを扱うべきではないと思われます。