PHPにて「php-ulid」ライブラリを用いてULIDを生成する方法
先日MySQLにてUUIDを発行するメモを書いたがUUID v1だと生成時間によるソートが行えない。何か方法が無いか調べたところUUID v7を使用するか、もしくはULIDというものを使用する形が良さそう。UUID v7に関しては過去記事の方法で生成できるため、今回はULIDの生成方法をメモ。
robinvdvleuten / php-ulid
GitHub
https://github.com/robinvdvleuten/php-ulid
インストール
composerでインストールする場合
サーバにSSH接続し以下コマンドでインストールする。
composer require robinvdvleuten/ulid
手動でインストールする場合
GitHubからソースコードをまとめてダウンロードし展開した上で「src」ディレクトリ内のファイルをアップロードする。今回はこちらの方法を取った。
利用方法
ソースコード
<?php require 'Ulid.php'; require './Exception/InvalidUlidStringException.php'; use Ulid\Ulid; $ulid = Ulid::generate(); var_dump((string)$ulid); //string(26) "01JD9D20QFHN0KH86M4AW0WY68" //小文字指定する場合 $ulid = Ulid::generate(true); var_dump((string)$ulid); //string(26) "01jd9dyejqhjx6rmwpw3k07mzt"
ULIDとは
UUIDと同様にランダムな識別子になる。識別子の先頭にタイムスタンプを置いているためソートが可能。
26文字になるのでMySQLに格納する場合データ型は「CHAR(26)」になりそう。
ちなみにUUID v7もソートが可能でこちらは36文字。
2038年問題は?
タイムスタンプを先頭に置いているとのことなので2038年問題が気になった。
タイムスタンプを指定してULIDを発行できるため以下をテストしてみたところ特に問題無さそう。
$ulid = Ulid::fromTimestamp(1704132245000); //2024/01/02 03:04:05 var_dump((string)$ulid); //string(26) "01HK334XG8XMSW75ZS7EQTKQ6Y" $ulid = Ulid::fromTimestamp(2147483648000); //2038/01/19 12:14:08 var_dump((string)$ulid); //string(26) "01YG00000090FWZZTQ1T3QEDT0" $ulid = Ulid::fromTimestamp(2526174848000); //2050/01/19 12:14:08 var_dump((string)$ulid); //string(26) "029GNW2900YK9GK0GKWK9KCQ26"
関連記事
-
-
PHPで住所や名前のテキストをランダム生成するライブラリFakerPHPの使い方
PHPでランダムなデータを生成したい際に値段や点数等の数値やパスワード等のランダ ...
-
-
ローソク足のグラフをJavaScriptで描写する方法(highstock)
株価か仮想通貨などの値動き(チャート)を図表とするローソク足のグラフを何らかの方 ...
-
-
バニラJS対応(jQuery非依存)の画像遅延読み込みプラグイン「echo.js」の利用方法
あるサイトをブラウザの開発者ツールで見ていると「echo.js」と聞いたことの無 ...
-
-
PHPのHTTPクライアント用ライブラリ「Guzzle」の利用方法
以前に「Requests for PHP」を試したが、似たようなライブラリで「G ...
-
-
PHPでvar_dumpをツールバー形式で表示するライブラリ「Kint」の使い方
PHPでvar_dumpを見やすくするためにdBugライブラリを利用しているが、 ...