🐘

PHP Conference Japan 2025登壇レポート: Result型で失敗を型にするPHPコードの書き方

こんにちは!TechBowl の梶川(@kajitack)です。

この記事は、2025 年 6 月 28 日に開催された PHP Conference Japan2025 の登壇レポートです。

登壇内容

「エラーハンドリングは try-catch だけじゃない!Result 型で“失敗”を型にする PHP コードの書き方」というタイトルで登壇させていただきました。

https://fortee.jp/phpcon-2025/proposal/196d87d1-5cb4-437a-b063-d523096d4ae4

Result 型(Either 型)は、Rust、Haskell、OCaml、F# などで広く採用されている、処理の成功と失敗を明示的な型として表現するパターンです。

今回のセッションでは、PHP で Result 型を実装し、実際のプロジェクトでどのように活用するかを解説しました。

登壇の背景

以前、Result 型の考え方を例外処理に活かすという内容で登壇したことがありますが、今回は Result 型を実際に使うケースにより焦点を当てました。

PHP には標準で Result 型が実装されていませんが、シンプルに実装できます。
実装では PHPStan によるジェネリクスを活用し、@phpstan-assert-if-true による型の絞り込みなど、型安全性を高める工夫を取り入れています。
サンプルコードも用意しましたので、ぜひ参考にしてみてください。

https://github.com/valbeat/php-result

また、Result 型を使う上で特に重要なのは、エラーを単なる異常状態ではなく、ドメインモデルの一部として扱うという考え方です。

例えば「在庫不足」は技術的な問題ではなく、ビジネスルールの結果です。
これをドメインの知識として明示的にモデル化することで、エラーの種類と対処法がドメイン層で定義され、ドメインエキスパートと開発者の共通言語になります。

Result 型を使うことで、このような「ビジネス上の失敗」を型として表現し、ドメインモデルをより豊かにできます。

登壇の振り返り

以前の登壇も合わせて聞いてくださった方から、より理解が深まったとのお声をいただきました。
特に、ドメインエキスパートとの会話の流れから実装に落とし込む過程や、より具体的な実装例が好評でした。

また、実際に Result 型を使用している方からのフィードバックもいただき、大変参考になりました。

まとめ

登壇を聞いてくださった皆さま、そして運営スタッフの皆さま、本当にありがとうございました!
次回の PHP Conference Japan でまたお会いできることを楽しみにしています!

TechTrainテックブログ

Discussion