😎

GAS(GoogleAppsScript)でULIDを生成

2023/09/07に公開

はじめに

GASでUUIDはUtilitiesで簡単に作れるけどULIDは作れないので、ULIDを生成するライブラリを作った。生成ロジックはnpmのulidにほぼ準拠。
https://www.npmjs.com/package/ulid

使い方

  1. ライブラリを追加で以下のIDを検索
    1tgILvqgrHaGtKGeXraC6d6tD-C1BCOQBEhHS-IuGSgcGhqOOYxRJdtjY

  2. 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