🍙

PHPカンファレンス新潟2025登壇レポート:PHPでResult型の考え方を取り入れてみよう

に公開

こんにちは!TechBowl の梶川(@kajitack)です。
TechTrain の開発を担当しています。

この記事は、2025 年 5 月 31 日に開催された PHPカンファレンス新潟2025 の登壇レポートです。

登壇内容

「try-catch を使わないエラーハンドリング!? PHP で Result 型の考え方を取り入れてみよう」というタイトルで登壇させていただきました。

https://fortee.jp/phpconniigata-2025/proposal/de433e9c-4224-4fe8-9cba-4be9dba34084

今回の発表では、try-catch を使用した例外処理とは異なるアプローチとしてResult型を紹介しました。Result 型(Either 型)は、Rust や関数型言語(Haskell、OCaml、F#など)で広く採用されている、処理の成功と失敗を明示的な型として表現するパターンです。

PHP には標準で Result 型は実装されていませんが、シンプルな実装で導入でき、コードの可読性やエラー処理の一貫性が向上します。

この発表では、Result 型の基本的な考え方から、PHP での実装方法、そして例外処理との効果的な使い分けについて解説しました。

登壇した背景

Result 型に注目したきっかけは、ビジネスロジックにおける「予期される失敗」を「例外」として扱うことへの違和感でした。ユーザー登録時のメールアドレス重複のように、ビジネスロジックでは「予期される失敗」であっても「例外的な状況」ではないケースが多く存在します。

実際の開発現場では、例外が処理の流れを突然変えてコードの追跡を困難にしたり、メソッドシグネチャから例外の可能性が読み取れなかったり、プロジェクトの成長に伴ってカスタム例外が乱立したりと、様々な課題に直面していました。

これらの課題を解決する方法を模索する中で、PHP でも Result 型を活用できるのではないかと考えたのが今回の発表のきっかけです。

登壇の振り返り

発表後は多くの方から貴重なフィードバックをいただきました。

「うちでも Result 型を採用している」という声を複数いただき、このアプローチが PHP コミュニティでも浸透しつつあることを実感しました。特に PHPStan のジェネリクスを活用した型安全な実装や、@phpstan-assert-if-true を使った型の絞り込みテクニックなど、実践的なアドバイスを多数いただきました。

「例外と Result 型の使い分け」についても活発な議論ができました。ビジネスロジックの予期される失敗には Result 型を、システムエラーなどの真に例外的な状況には例外を使うという使い分けについて、多くの方と認識を共有できました。

興味深い指摘として、「PHP は他の言語で Result 型が実践されてきた後に導入できるため、それらの知見を活かしてより良い実装ができる」というアドバイスもいただきました。先行事例から学び、PHP の特性に合わせた最適な実装を模索していきたいと思います。

今後は、関数合成や Railway Oriented Programming(ROP)など、Result 型をさらに活用するためのテクニックについても掘り下げていきたいと考えています。

おわりに

登壇を聞いてくださった皆さま、そして運営スタッフの皆さま、本当にありがとうございました!

今回いただいたフィードバックを活かし、Result 型の実装や活用方法について今後も研究を続けていきたいと思います。新潟ならではの温かい雰囲気の中で、参加者の皆さまと技術的な議論を深められたことは、とても有意義な経験となりました。

次回の PHP カンファレンス新潟の開催を楽しみにしています!

TechTrainテックブログ

Discussion