PHPカンファレンス新潟2025登壇レポート:PHPでResult型の考え方を取り入れてみよう
こんにちは!TechBowlの梶川(@kajitack)です。
TechTrainの開発を担当しています。
この記事は、2025年5月31日に開催されたPHPカンファレンス新潟2025の登壇レポートです。
登壇内容
「try-catchを使わないエラーハンドリング!? PHPでResult型の考え方を取り入れてみよう」というタイトルで登壇させていただきました。
今回の発表では、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カンファレンス新潟の開催を楽しみにしています!
Discussion