生成ツール

識別子やテスト用の値をその場で生成するツール群です。生成はすべてブラウザ内で行われ、送信されることはありません。

生成ツールの選び方

認証情報にはパスワード生成ツール、識別子にはUUID生成ツール、抽選やサイコロ、テスト用の値には乱数生成ツールを使います。3つとも、ブラウザの暗号学的乱数源から棄却サンプリングで値を取り出すので、どの結果も等しい確率で出ます。

表やフィクスチャファイルを埋めるにはダミーデータ生成ツール、リンクやWi-Fiの認証情報を読み取れる形にするにはQRコード作成ツール、スケジュールが実際にいつ実行されるかを確認するにはcron式ツール、その場の全員に抽選を見せたいときは抽選ルーレットを使います。

乱数がどこから来ているか

ここでのランダムな値はすべて、ブラウザの暗号学的に安全な乱数生成器crypto.getRandomValuesから取り出し、剰余ではなく棄却サンプリングで指定の範囲に収めています。そのため、範囲内のどの値もほかより出やすいということがありません。パスワードにとってこれはセキュリティ上の性質であり、抽選にとっては単純に公正さの問題です。

多くのコードが最初に手を伸ばすMath.randomは、まったく別物です。高速で、いくつかの出力から予測でき、言語仕様で暗号用途には使ってはならないと明記されています。これをパスワードに使うツールは、見た目には壊れているとわかりません。それがまさに問題なのです。

生成したデータはそのまま使っても安全であるべき

フィクスチャが役に立つのは、テストを実行しても実在の人に届かない場合だけです。そのためダミーデータ生成ツールは、電話番号を架空用途に予約されたブロックから、メールアドレスとURLをRFC 2606の例示用ドメインから、IPアドレスをルーティングされないドキュメント用の範囲から取っています。

これは、本番データをコピーして名前を消すという魅力的な代替案に反対する根拠でもあります。識別子を削除してもデータセットは匿名になりませんし、消した後のコピーも、アクセス制御の弱い場所に置かれた本番データのままです。スキーマから生成すれば、正しい形を持ちながら出どころがまったくないデータが手に入ります。

値ではなく「仕様」を生成するものもある

cron式とQRコードはランダムな出力ではなく、後で別のシステムが解釈する成果物です。そこで意味を持つのは、その解釈があなたの意図と一致しているかどうかです。cronツールがフィールドを解析するだけでなく次回以降の実行日時を一覧表示するのも、QRコード作成ツールが選んだバージョンと誤り訂正レベルを表示するのも、そのためです。

世に出す前に現実と突き合わせてください。誰もが引っかかる日と曜日の組み合わせについては実行日時を読んで確認し、印刷したコードは1,000枚発注する前に2〜3種類のスマートフォンで読み取ってみましょう。