😎
GAS(GoogleAppsScript)でULIDを生成
はじめに
GASでUUIDはUtilitiesで簡単に作れるけどULIDは作れないので、ULIDを生成するライブラリを作った。生成ロジックはnpmのulidにほぼ準拠。
使い方
-
ライブラリを追加で以下のIDを検索
1tgILvqgrHaGtKGeXraC6d6tD-C1BCOQBEhHS-IuGSgcGhqOOYxRJdtjY
-
ULID.ulid()
で生成
// ULID生成
const id = ULID.ulid();
説明
GASではCrypto.getRandomValues()
が使えないので、SHA256のハッシュ値を使って0〜1のランダム数値を生成。キーとなる文字列にはUUIDを使用。
function getRandomValues() {
// SHA256のハッシュを生成(byte)
const hash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, Utilities.getUuid(), Utilities.Charset.UTF_8)
// byteを文字列に変換
const hashText = digest.map(b => {
if (b < 0) b += 256
return b.toString(16).length === 1 ? `0${b.toString(16)}` : b.toString(16)
}).join('')
// 64桁の16進数の最大値で割る
return parseInt(hashText, 16) / parseInt('f'.repeat(64), 16)
}
おわりに
GAS最高!
Discussion