Laravel v10.33.0 で追加されたNumberユーティリティクラスの紹介

Laravel v10.33.0 で追加されたNumberユーティリティクラスの紹介

Laravel v10.33.0では、Numberユーティリティクラスが導入され、数値フォーマットの取り扱いを大幅に強化しました。このクラスには、数値、パーセンテージ、通貨、ファイルサイズのフォーマットや、それらを人間が読みやすい形に変換する複数のメソッドが含まれています。

Number::format()

Number::format()メソッドは、ロケールに応じた数値のフォーマットを可能にします。例えば、Number::format(100000)は「100,000」と出力され、ロケールをドイツ語に設定すると「100.000」となります。

use Illuminate\Support\Number;
 
$number = Number::format(100000);
 
// 100,000
 
$number = Number::format(100000, precision: 2);
 
// 100,000.00
 
$number = Number::format(100000.123, maxPrecision: 2);
 
// 100,000.12
 
$number = Number::format(100000, locale: 'de');
 
// 100.000

Number::percentage()

Number::percentage()メソッドは、数値をパーセンテージとして表示します。精度の指定やロケールの設定も可能です。

use Illuminate\Support\Number;
 
$percentage = Number::percentage(10);
 
// 10%
 
$percentage = Number::percentage(10, precision: 2);
 
// 10.00%
 
$percentage = Number::percentage(10.123, maxPrecision: 2);
 
// 10.12%
 
$percentage = Number::percentage(10, precision: 2, locale: 'de');
 
// 10,00%

Number::currency()

Number::currency()メソッドは、数値を通貨表記に変換します。異なる通貨やロケールに対応しているため、グローバルな用途に適しています。

use Illuminate\Support\Number;
 
$currency = Number::currency(1000);
 
// $1,000
 
$currency = Number::currency(1000, in: 'EUR');
 
// €1,000
 
$currency = Number::currency(1000, in: 'EUR', locale: 'de');
 
// 1.000 €

Number::fileSize()

Number::fileSize()メソッドは、バイト値を人間が読みやすいファイルサイズの形式(KB、MB、GBなど)に変換します。

use Illuminate\Support\Number;
 
$size = Number::fileSize(1024);
 
// 1 KB
 
$size = Number::fileSize(1024 * 1024);
 
// 1 MB
 
$size = Number::fileSize(1024, precision: 2);
 
// 1.00 KB

Number::forHumans()

Number::forHumans()メソッドは、数値をより読みやすい形式に変換します。例えば、1000を「1 thousand」と表示します。

use Illuminate\Support\Number;
 
$number = Number::forHumans(1000);
 
// 1 thousand
 
$number = Number::forHumans(489939);
 
// 490 thousand
 
$number = Number::forHumans(1230000, precision: 2);
 
// 1.23 million

しかし、こちらの機能は、v10.34.2時点では単位がハードコードされており、英語以外の言語に対応していない点に注意してください。

https://github.com/laravel/framework/blob/c581caa233e380610b34cc491490bfa147a3b62b/src/Illuminate/Support/Number.php#L146-L152

Number::setLocale

Number::setLocale()メソッドは、グローバルにロケールを設定できます。これは、例えばサービスプロバイダ内で設定することができます。

Number::setLocale('sv');

Number::withLocale

Number::withLocale() メソッドは、指定されたコールバック関数の実行中だけ特定のロケールを使用し、その後元のロケールに戻ります。

Number::withLocale('sv', function () {
    return Number::format(123456789);
});

おわりに

LaravelのNumberユーティリティクラスは、数値フォーマットの柔軟性を大幅に向上させています。特に、Number::fileSize()メソッドは、その中核的な機能として注目に値します。これは、ファイルサイズを人間が読みやすい形式で表示するために特に有用です。一方で、Number::format(), Number::percentage(), Number::currency()メソッドは、基本的にNumberFormatterクラスのラッパーとして実装されており、特に目新しい機能ではありません。また、Number::forHumans()メソッドはまだ多言語に対応していないため、その有用性は限定されています。

今後のアップデートで新しいメソッドが追加されるかどうかは注目されるところです。このような進化は、Laravelが開発者のニーズに応え、フレームワークとして成長し続けることを示しています。

参考サイト