JavaScriptでUUIDを生成する際に、以下のようなエラーに遭遇することがあります。
TypeError: crypto.randomUUID is not a functionこのエラーの主な原因は、ブラウザの互換性やNode.jsのバージョンの問題です。本記事では、この問題の解決方法と`crypto.randomUUID()`の正しい使い方を解説します。
基本的な使い方
`crypto.randomUUID()`は以下のように簡単に使用できます:
const uuid = crypto.randomUUID();
console.log(uuid); // 例: "123e4567-e89b-12d3-a456-426614174000"エラーの解決方法
1. グローバルオブジェクトの確認
Node.jsでは、cryptoモジュールを明示的にインポートする必要があります:
const crypto = require('crypto');
const uuid = crypto.randomUUID();2. ブラウザ互換性の確保
ブラウザでは、以下のようにwindow.cryptoを使用します:
const uuid = window.crypto.randomUUID();3. フォールバック実装
古いブラウザやNode.jsバージョンでも動作するフォールバック実装:
function generateUUID() {
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
return crypto.randomUUID();
}
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
const r = Math.random() * 16 | 0;
const v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}注意点
- `crypto.randomUUID()`は、Node.js v15.6.0以降で利用可能です
- 暗号学的に安全な乱数生成を使用しています
- ブラウザのサポートは比較的新しいバージョンに限られます
実践的な使用例
// ユーザーIDとして使用
const userId = crypto.randomUUID();
// ファイル名の生成
const fileName = `${crypto.randomUUID()}.jpg`;
// データベースのプライマリキーとして
const recordId = crypto.randomUUID();まとめ
`crypto.randomUUID()`は、JavaScriptでUUIDを生成する最も簡単で安全な方法です。互換性の問題がある場合は、フォールバック実装を使用することで、幅広い環境で安定して動作するコードを書くことができます。
セキュリティが重要な場合は、必ず`crypto.randomUUID()`を使用し、Math.random()ベースの実装は避けることをお勧めします。