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()ベースの実装は避けることをお勧めします。