Laravel の 現在と将来の UUID バージョン事情のまとめ
前置き
現状(2024年9月時点)における Laravel の UUID バージョン事情を少し整理してみました。
参考にしているプルリクは以下(及びそのリンク先)です。
[12.x] Switch models to UUID v7 #52433
以前私の書いた記事も良ければ参考に。
Laravel UUID、ULID で遊んでみる
下の本文に出てきますが、Laravel には Laravel 独自カスタマイズ版の UUID4 というのがあります。(本来の UUID4 ではない)
本題
という事で、手短に行きます。
現状では、Illuminate\Support\Str
には、以下のようなメソッドがあります。
Str::uuid()
… 本来の UUID4 を返す
Str::uuid7()
… UUID7 を返す(Ver.11.17 にて登場)
Str::orderedUuid()
… 本来の UUID4 ではなくカスタマイズされたソート可能版の(時間情報を含んだ)UUID4 を返す
また、モデルに UUID をサクッと付与できる為の以下のトレイトがあります。
(Illuminate\Database\Eloquent\Concerns\以下)
HasUuids
トレイト … 上記の Str::orderedUuid()
を使ったトレイト
HasVersion7Uuids
トレイト … UUID7 を使ったトレイト(Ver.11.17 にて登場したが…)
Ver.11.17 にて UUID7 を利用するトレイトが増えました。理由としては、MariaDB だと HasUuids
トレイトが利用する Str::orderedUuid()
を使うと不具合があったからで、その対策としての追加になっています。Str::uuid()
を使った時は本来の UUID4 を返すのに、HasUuids
トレイトではそうではないのは、微妙にややこしいですね。
Laravel 12 での予定
以下は、Laravel 12 で変わる予定の内容です。もちろん執筆時点では、まだまだ Laravel 12 は出ず、今後変わる可能性はありますので予めご了承下さい。
Ver.11.17 で登場した HasVersion7Uuids
トレイトは無くなります。代わりに HasUuids
トレイトが UUID7 を使うようになります。
ですので、これらのトレイトを使っている場合は、Ver.12 へバージョンアップ時に適宜対応が必要になりますね。Laravel 12では、以下の2つになる予定です。
HasUuids
トレイト … UUID7 を使う
HasVersion4Uuids
… Str::orderedUuid()
を使う
要は HasUuids
トレイトのデフォルトは、UUID7 になるという事ですね。
そこで微妙にややこしいのは、Str::uuid()
を使った際は、今まで通りの UUID4 の予定です。
「そっちも UUID7 にしちゃいなよ!🍺」と思いたい所ですが、そこは微妙なプライバシー問題を考慮したようで「UUID7 は時間情報を含んでいるから、ちょっとデフォルトにするのは良くないよね~」的な感じで却下されています。
「では、トレイトは何故 UUID7 にしたのさ?」と思ってしまう所ですが、HasUuids
トレイトは、元々時間情報を含む版の UUID4 が使われているので、そこは今までと変わらないから UUID7 にしちゃおう、となりました。
以上です。
雑感
微妙にややこしいですね。
おかしな所等がありましたらコメント下さい。
Discussion