Skip to content

Instantly share code, notes, and snippets.

@sadnessOjisan
Last active Feb 24, 2022
Embed
What would you like to do?
それっぽいランダムな値が欲しい時にやってること

ランダムな文字列をワンライナーで出す

まえがき

それっぽいランダムな値が欲しい時がありますよね。例えば、モックアプリで使うIDや、開発環境のダミーユーザーのパスワードなど、そんなに安全じゃなくていいから手軽に作れるランダムな文字列が欲しいという場面があります。パスワード生成アプリなどもありますが、アプリのインストールや起動がめんどくさく、一回だけ欲しいみたいなときになんか簡単かつ汎用的な方法はないものかと探していました。そこで、様々な環境から一行で作れる方法を紹介します。手軽さが優先されているので、安全性が多少は下がる面もあります。本番環境でのパスワードなどには使わない方が良いでしょう。

JavaScriptを利用する

Math経由

JavaScriptは汎用的です。ブラウザのインスペクタから実行できますし、Node.jsがあればターミナル上でREPLを実行できます。このワンライナーはどうでしょうか。

Math.random().toString(36).slice(-8);
> "x63ho3uf"

toStringは文字列に変換する関数ですが、その際に引数を与えると基数変換できます。36進数は0-9の10文字と、a-zの26文字の計36文字を扱えるので、数字とアルファベット全てを使って文字列を作ることができます。そしてランダムな数値を36進数に変換すれば、ランダムな文字列が作れるというわけです。ただ、このやり方を紹介している Javascriptでランダムな文字列を生成する方法では、衝突する可能性が指摘されているので、それなりの数を生成する場合のユニークなidとして利用するのは避けたほうが良いです。(ローカル開発時だと、筆者は多用しています。)

crypto経由

Node.jsの環境が必要になりますが、cryptoモジュールも利用できます。

require("crypto").randomBytes(10).toString("base64");
> "TBnUK6Tjqcvp2Q=="

opensslコマンドを利用する

openssl rand -base64 10 コマンドでランダムな値を生成できます。opensslコマンドは、元から入っているOSも多く、汎用性があります。ただし、記号を含める、含めないなどの制御はできないため、利用観点での汎用性は低いかもしれません。しかしそのような場合でも、コマンドである利点をいかして、trコマンドなどで文字を記号や英数字に入れ替えてしまえばある程度の制御もできます。

$ openssl rand -base64 10
IChymPn8zeVKVg==

まとめ

以上が手軽にランダムな値を作るときに使っている方法です。筆者はJSのワンライナーを好んで使っており、ローカル環境での開発時(永続化層がなくてメモリをストアとして使う場合など)に、よくソースコードに埋め込んで使っています。ライブラリを入れたりしなくても使えるので、さくっとidを作りたいときにオススメです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment