PHPを書いている時、軽度なエラーをどのように処理するか悩むときがあります。 Goを書いているときはとりあえずerrorをreturnすることが多いのですが、この理由も正直理解していませんでした。
上記に関して、最近ペアプロをして学びがあったのでメモ程度に書きます。
前提
以下のようにファイルの存在を確認して削除するメソッドがあるとします。このとき、ファイルが無かった時やunlinkでのファイル削除に失敗した時ですにエラーをどうするべきか悩みます。
状況も様々です。
- ここでのエラーがサービスにとって致命的なものか
- リトライされるべきものであるか
- 開発側で確認して手動でどうにかするべきものか
<?php class FileService { public static function deleteFile(string $path, LoggerInterface $logger): void { if (!file_exists($path)) { $logger->error('File not found.'); return; } unlink($path); } }
自分はこのとき、この処理でのエラーがそこまで重要なものではないし、発生回数も少ないと思ったのでエラーログを流して個別に対応することを考えました。
ただ、自信が無かったのでベテランの方に相談することにしました。
広く利用される関数の場合、使い手側に選択肢を与えるようにする
結果的に、広く利用される場合はエラーを返すようにするのが良いと聞きました。
エラーを返すようにすることで、利用側でエラーが発生した際にどうするか選べるようになるからとのこと。
外部ライブラリを考えるとだいたいこのような設計になっていると思います。「エラーが発生したおきは関数内部で勝手にログを流しておしまい」という設計になっているライブラリは確かに見たことがありません。
このように利用側でどうするか選べるように設計することで、状況に応じた選択をさせることが可能になるとのこと。
なるほど納得。