こんにちわ、PHPエンジニアのエンジニア婦人(@naho_osada)です。
私はPHPエンジニアとして8年~の経験があります。
以前も「PHPの@エラー抑制はしない方がいいよ」という話を書いていました。
「当然想定されるべきバグは潰せ!」…これは、某所である案件のカスタマイズをしていたときに見つけた、「ちょっと待てちゃんとやれよ」と思って怒りのあまり記述した内容ですね。というか、公開サイトにWarning出しちゃうのは論外です…。
@抑制で「とりあえず回避」はやめよう
PHPのエラー抑制マーク、「@」。エラーメッセージを画面に出力せずに終了してくれる優しい彼だが、そんな彼には裏の顔があったのだ…
エラーは解決してこそ。彼に依存せずに、自分の自由を勝ち取りましょう。
これに通じるものがありますが、実はPHPで「@」抑制をすると、表示速度が遅くなります。
これは見てわかるレベルで遅くなることもあれば、他が遅いので紛れて気づかないこともありますね。見た目にもWarningは出なくなりますし。
速いと唄っているNao Lightにfile_put_contentsのエラー抑制をやってみました。大丈夫かこれ?というくらい、下手すると表示できないくらいに遅くなりました。
そんな高速表示を唄うテーマですら破壊してしまう@エラー抑制です。
遅いと何が悪いのか
確かに表示速度は遅くなります。それでも、サイトを閲覧することは可能です。速いと唄っているサイトでも、表示ができないわけではありません。
では何が問題なのか。それは
「サイトに来てくれた人が、離れて行ってしまうこと」
です。
表示がやたらと遅いと、「なんだこのサイト、見れないじゃん」と思って離脱してしまうこと、よくありませんか?
昨今、Googleが検索表示にサイト速度を重視するという内容を発表したことです。自分のサイトをより見てもらうためにも、ここはサイト構築者として気にしておいた方がいい点でしょう。
という事情もありますので、実装するときは、@マーク抑制は絶対にやめましょう。
仮に公開サイト表示ではなく、PHPを用いた業務系システムであっても、業務作業中に無駄な待ち時間が発生するのは好ましくありません。
遅くなる考えられる原因
公式にありますが、抑制してもerror_handleは呼び出されます。つまり、無駄処理が発生しているということ。
PHP:エラー制御演算子(PHPマニュアル)
元々遅いサイトでは気にならないのでしょうが、速いサイトだとこれが致命的に感じるほどに遅いということでしょうね…そうとしか思えない。
2009年の記事ですが、これも参考になります。
PHPプログラマが”@”を使うべきでない5つの理由|肉とビールとパンケーキ
もう10年前から言われていること。私も書いてる( 当然想定されるべきバグは潰せ! )けど、本当にやめましょう?
エラーが出る可能性を考慮し、出たら速やかに対応するために
エラーが出る可能性を考慮できないなら、まだ半人前。
出たエラーを適切に対処してこそ、一人前。
PHPに限りませんが、プログラムは何かミスがあるとエラーを出して教えてくれます。
エラーが出ること自体は悪くありません。それが開発環境であれば猶更です。テストで見つけ出したらもっといい。それでも、もし本番環境で出てしまったら、速やかに解決をするよう心がければいい。
そのエラーを追求して解決してこそ、です。
まとめ
PHPの@エラー抑制は本当にやめよう
- 万一エラーが出てしまったときに、隠れてしまって発見が遅れる
- 表示速度が遅くなることもある
- @抑制に頼らず、カッコイイ書き方をしよう!