{"id":28213490,"url":"https://github.com/wiz-develop/php-value-object","last_synced_at":"2026-03-07T23:31:03.858Z","repository":{"id":289191734,"uuid":"963281837","full_name":"wiz-develop/php-value-object","owner":"wiz-develop","description":"📦 The PHP Value Object library offers immutable, type-safe, and self-validating objects to model domain values using the Value Object pattern.","archived":false,"fork":false,"pushed_at":"2025-10-15T09:15:30.000Z","size":411,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-27T13:22:15.782Z","etag":null,"topics":["ddd","immutable","php","type-safe","value-object"],"latest_commit_sha":null,"homepage":"https://packagist.org/packages/wiz-develop/php-value-object","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wiz-develop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-09T12:47:32.000Z","updated_at":"2025-10-15T09:12:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"d5269780-19bf-4d4a-a66c-b9276ac6a78e","html_url":"https://github.com/wiz-develop/php-value-object","commit_stats":null,"previous_names":["endou-mame/php-value-object","wiz-develop/php-value-object"],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/wiz-develop/php-value-object","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiz-develop%2Fphp-value-object","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiz-develop%2Fphp-value-object/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiz-develop%2Fphp-value-object/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiz-develop%2Fphp-value-object/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wiz-develop","download_url":"https://codeload.github.com/wiz-develop/php-value-object/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wiz-develop%2Fphp-value-object/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30237329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T23:24:20.706Z","status":"ssl_error","status_checked_at":"2026-03-07T23:21:10.486Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ddd","immutable","php","type-safe","value-object"],"created_at":"2025-05-17T20:10:44.629Z","updated_at":"2026-03-07T23:31:03.834Z","avatar_url":"https://github.com/wiz-develop.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PHP Value Object\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![PHP Version](https://img.shields.io/badge/PHP-8.4%2B-purple.svg)](composer.json)\n\n📦 The PHP Value Object library offers immutable, type-safe, and self-validating objects to model domain values using the Value Object pattern.\n\n## 概要\n\nこのライブラリは、ドメイン駆動設計における値オブジェクトパターンを PHP で実装するためのツールセットを提供します。\n値オブジェクトは以下の特性を持ちます：\n\n- **不変性** - 一度作成された値オブジェクトは変更できません\n- **自己検証** - 値オブジェクトは常に有効な状態を保証します\n- **型安全性** - 厳格な型チェックにより、予期しない型の値が混入することを防ぎます\n- **値による等価性** - 同じ値を持つオブジェクトは等価とみなされます\n\n## インストール\n\nComposer を使用してインストールできます：\n\n```bash\ncomposer require wiz-develop/php-value-object\n```\n\n## 要件\n\n- PHP 8.4 以上\n\n## 主な機能\n\n### 基本型\n\n- **Boolean** - 真偽値を扱う値オブジェクト。自己検証機能を備え、`from`メソッドによる直接作成と`tryFrom`メソッドによる検証付き作成をサポート。\n- **String** - 文字列を扱う値オブジェクト。最小長・最大長の検証や正規表現による検証機能を持ち、以下の特殊タイプも提供：\n  - **EmailAddress** - メールアドレスを表現する値オブジェクト\n  - **Ulid** - ULIDを表現する値オブジェクト\n- **Number** - 数値を扱う値オブジェクト：\n  - **IntegerValue** - 整数値を表現（最小値・最大値の範囲検証あり）\n  - **PositiveIntegerValue** - 正の整数を表現\n  - **NegativeIntegerValue** - 負の整数を表現\n  - **DecimalValue** - 少数値をBCMath\\Number型で表現（高精度計算対応）\n  - **PositiveDecimalValue** - 正の少数値を表現\n  - **NegativeDecimalValue** - 負の少数値を表現\n- **DateTime** - 日付と時刻を扱う値オブジェクト：\n  - **LocalDate** - 日付のみを表現（年月日）\n  - **LocalTime** - 時刻のみを表現（時分秒）\n  - **LocalDateTime** - 日付と時刻を組み合わせて表現\n\n### コレクション\n\n- **ArrayList** - 順序付きリストコレクション。要素の追加、フィルタリング、マッピング、ソート、マージなどの操作をサポート。常に不変性を保ちながら新しいインスタンスを返す。\n- **Map** - キーと値のペアを管理するマップコレクション。キーによる値の取得、追加、削除、フィルタリングなどの操作をサポート。常に不変性を保つ。\n- **Pair** - キーと値のペアを表現する基本型。MapコレクションはPairの集合として実装されている。\n- **ValueObjectList** - 値オブジェクトのコレクションを扱うための特別なArrayList。値オブジェクトの等価性に基づいた操作を提供。\n\n### その他\n\n- **Enum Value** - 列挙型の値を安全に扱うためのファクトリと基底クラス。型安全な列挙値の作成と検証をサポート。\n- **Result 型** - WizDevelop\\PhpMonadライブラリを活用したエラーハンドリングのための型。成功/失敗を表現し、エラーチェーンの構築を可能にする。\n\n## 使用例\n\n### Boolean 値の作成と検証\n\n```php\nuse WizDevelop\\PhpValueObject\\Boolean\\BooleanValue;\nuse WizDevelop\\PhpMonad\\Result;\n\n// 直接作成 - 検証なし\n$bool = BooleanValue::from(true);\n\n// 検証付き作成 - Result型を返す\n$result = BooleanValue::tryFrom(true);\nif ($result-\u003eisOk()) {\n    $bool = $result-\u003eunwrap();\n} else {\n    $error = $result-\u003eunwrapErr(); // エラー情報を取得\n}\n\n// 等価性の比較\n$anotherBool = BooleanValue::from(true);\n$areEqual = $bool-\u003eequals($anotherBool); // true\n```\n\n### String 値の作成と操作\n\n```php\nuse WizDevelop\\PhpValueObject\\String\\StringValue;\nuse WizDevelop\\PhpValueObject\\String\\EmailAddress;\nuse WizDevelop\\PhpValueObject\\String\\Ulid;\n\n// 基本的な文字列\n$str = StringValue::from(\"Hello, World!\");\necho $str; // 文字列への自動変換\n\n// メールアドレス - 検証付き\n$emailResult = EmailAddress::tryFrom(\"example@example.com\");\nif ($emailResult-\u003eisOk()) {\n    $email = $emailResult-\u003eunwrap();\n}\n\n// ULID\n$ulid = Ulid::generate(); // 新しいULIDを生成\n```\n\n### Number 値の作成と演算\n\n```php\nuse WizDevelop\\PhpValueObject\\Number\\IntegerValue;\nuse WizDevelop\\PhpValueObject\\Number\\PositiveIntegerValue;\nuse WizDevelop\\PhpValueObject\\Number\\DecimalValue;\nuse BcMath\\Number;\n\n// 整数値\n$int = IntegerValue::from(42);\n\n// 正の整数値 - 0未満の値は検証エラー\n$positiveInt = PositiveIntegerValue::tryFrom(10);\n\n// 少数値（BCMath を利用した高精度計算）\n$decimal = DecimalValue::from(new Number(\"3.14159\"));\n\n// 算術演算 (DecimalValueの場合)\n$pi = DecimalValue::from(new Number(\"3.14159\"));\n$radius = DecimalValue::from(new Number(\"5\"));\n$area = $pi-\u003emultiply($radius-\u003esquare()); // πr²\n```\n\n### DateTime 値の作成と操作\n\n```php\nuse WizDevelop\\PhpValueObject\\DateTime\\LocalDate;\nuse WizDevelop\\PhpValueObject\\DateTime\\LocalTime;\nuse WizDevelop\\PhpValueObject\\DateTime\\LocalDateTime;\nuse DateTimeImmutable;\nuse DateTimeZone;\n\n// 日付\n$date = LocalDate::of(2025, 5, 14);\n$tomorrow = $date-\u003eaddDays(1);\n\n// 時刻\n$time = LocalTime::of(13, 30, 0);\n$laterTime = $time-\u003eaddHours(2);\n\n// 日時\n$dateTime = LocalDateTime::of($date, $time);\n\n// 現在時刻からの作成\n$now = LocalDateTime::now(new DateTimeZone('Asia/Tokyo'));\n\n// DateTimeImmutableとの相互変換\n$nativeDate = $dateTime-\u003etoDateTimeImmutable();\n$backToLocalDateTime = LocalDateTime::from($nativeDate);\n\n// 日付の比較\n$isBefore = $date-\u003eisBefore($tomorrow); // true\n```\n\n### コレクションの使用\n\n```php\nuse WizDevelop\\PhpValueObject\\Collection\\ArrayList;\nuse WizDevelop\\PhpValueObject\\Collection\\Map;\nuse WizDevelop\\PhpValueObject\\Collection\\Pair;\nuse WizDevelop\\PhpValueObject\\ValueObjectList;\nuse WizDevelop\\PhpValueObject\\String\\StringValue;\n\n// ArrayList - 不変のリスト\n$list = ArrayList::from([1, 2, 3, 4, 5]);\n$filteredList = $list-\u003efilter(fn($value) =\u003e $value \u003e 2); // [3, 4, 5]\n$mappedList = $list-\u003emap(fn($value) =\u003e $value * 2); // [2, 4, 6, 8, 10]\n$sortedList = $list-\u003esort(fn($a, $b) =\u003e $b \u003c=\u003e $a); // [5, 4, 3, 2, 1]\n$concatList = $list-\u003econcat(ArrayList::from([6, 7, 8])); // [1, 2, 3, 4, 5, 6, 7, 8]\n\n// Map - キーと値のペアを扱う不変のマップ\n$map = Map::make(['name' =\u003e 'John', 'age' =\u003e 30]);\n$hasKey = $map-\u003ehas('name'); // true\n$values = $map-\u003evalues(); // ArrayList::from(['John', 30])\n$keys = $map-\u003ekeys(); // ArrayList::from(['name', 'age'])\n$filteredMap = $map-\u003efilter(fn($value) =\u003e is_string($value)); // ['name' =\u003e 'John']\n$updatedMap = $map-\u003eput('age', 31); // ['name' =\u003e 'John', 'age' =\u003e 31]\n\n// Pair - キーと値のペア\n$pair = Pair::of('key', 'value');\necho $pair-\u003ekey; // 'key'\necho $pair-\u003evalue; // 'value'\n\n// 値オブジェクトのリスト\n$stringList = ArrayList::from([\n    StringValue::from('apple'),\n    StringValue::from('banana'),\n    StringValue::from('orange')\n]);\n// ValueObjectListへの変換 - 値オブジェクトの等価性に基づいた操作をサポート\n$valueObjectList = new ValueObjectList($stringList-\u003etoArray());\n$hasApple = $valueObjectList-\u003ehas(StringValue::from('apple')); // true\n```\n\n## 拡張\n\n既存の値オブジェクトを拡張して、独自のドメイン固有の値オブジェクトを作成できます：\n\n```php\nuse Override;\nuse WizDevelop\\PhpValueObject\\String\\StringValue;\nuse WizDevelop\\PhpValueObject\\ValueObjectMeta;\n\n#[ValueObjectMeta(name: '商品コード')]\nfinal　readonly class ProductCode extends StringValue\n{\n    #[Override]\n    final public static function minLength(): int\n    {\n        return 5;\n    }\n\n    #[Override]\n    final public static function maxLength(): int\n    {\n        return 5;\n    }\n\n    #[Override]\n    final protected static function regex(): string\n    {\n        return '/^P[0-9]{4}$/';\n    }\n}\n```\n\n## ライセンス\n\nMIT ライセンスの下で公開されています。詳細は [LICENSE](LICENSE) ファイルを参照してください。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwiz-develop%2Fphp-value-object","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwiz-develop%2Fphp-value-object","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwiz-develop%2Fphp-value-object/lists"}