PHPで構文チェックを行うやり方【エラー回避に役立つ】
構文チェックを行うことは、エラーの発生率を下げるために重要なことです。最近のIDEは非常に発達しています。コードを自動保管してくれる上に、構文として不適切な部分は赤色の下線で示してくれます。
しかし、IDEはすべての構文を完璧にチェックしてくれるわけではありません。そのため、ツールを使ってコードチェック・文法チェックを行う必要があります。
それではPHPの文法チェックツールを見ていきましょう。
PHPで構文チェックが必要な理由
思い描いたプログラムがいくら素晴らしくても、構文が間違っているだけでプログラムは正常に動きません。PHPはC#やJavaのようにコンパイルをする手間がかからないため、コードが問題なく動くかどうか、ブラウザを再読み込みするだけで、即座にチェックできます。
しかし、自分が書いたコードにエラーが発生した場合、確認する項目はいくつもあります。もちろん、熟練のエンジニアなら、短時間で原因を見つけることも可能ですが、項目が少ない方がエラーチェックにかける時間が少なくて済みます。
文法チェックを予め行っておくことは、エラー発生の要因を早い段階で1つ減らすことになります。
構文チェッカーを使って、構文チェックを行う
いちばん手っ取り早く簡単な方法は、オンラインの構文チェッカーを使うことです。
次の2つが使いやすくて便利です。
「PHP Code Checker」は、文法に問題があるポイントをブラウザ上に表示してくれます。
一方、「PHPコードの構文チェック」の方は、問題がある箇所をポップアップで表示してくれます。さらに問題がある箇所を、黄色でハイライトしてくれます。
オンラインの構文チェッカーは文章を貼り付けることで確認できるため、少量のコードを少しずつ確認するときに便利です。
逆に大量のコードを一気に確認したい、ファイル単位で確認したい場合にはあまり向いていません。大量のコードを確認したい場合は、下で取り上げるlintコマンドを使った方が効率的なエラーチェックを行えます。
lintコマンドを使って構文チェックをする
文法チェックする方法その2は、phpに付属しているlintコマンドを使うことです。lintコマンドはコンソール上にて実行します。コマンドに渡すパラメータは、PHPファイル名です。
コマンドは以下のように書きます。
php -l チェックしたいファイル名
オンラインの構文チェッカーとは異なり、ファイル単位でコードチェックを行うため、大量のコードを文法チェックにかける場合には有効な方法です。
エラーがでる要因は構文とは限らない
ここまでエラーチェックには、構文をチェックすることが重要であると説明してきました。しかし、実際にサービスを作成する中で出くわすエラーは、構文の問題だけではありません。むしろコード以外に問題が潜んでいるケースが多いくらいです。
そこでエラーが発生した時点で、どこに問題があるかチェックする順番を解説します。
入力しているデータが間違っている
よく見るのは、そもそも入力すべきデータが間違っているパターンです。
想定しているロジックに例外的なデータが渡された場合、プログラムは必ずエラーを返します。そのためデータに問題がある場合、コードチェックをしても原因が判明しません。
自分が作成したプログラムにバグが潜んでいる可能性があるという態度は謙虚で素晴らしいものです。しかし実際は、外部の要因から疑った方が、早くエラー解決につながることが多いです。
環境設定が間違っている
つぎに環境設定が異なることで、エラーが発生する場合です。
仕事でコードを書くとき、多くの場合は3つないし、4つの環境を使いまわすことになります。最近はDockerやAnsibleといった、サーバー・インフラ構築を自動化するツールがどんどん出ているため、環境設定の違いをすぐにチェックできます。
とはいえ、昔に作ったオンプレミスサーバー…つまりローカルで動いているサーバーの中には、自動構成ツールを使わずに環境構築されている場合が多々あります。
よく見るのは、
- プログラムのバージョンが違う
- ライブラリのバージョンが古い、または新しい
- フレームワークが1.~から2.~のように、大きくバージョンアップした
- サーバーに入れているサービスの設定がおかしい
などが挙げられます。
理想としてはDockerやAnsibleといった自動化ツールを使って構築することが望ましいですが、現実には上のようなケースも存在します。
ロジックが間違っている
データ、環境に問題がある場合を見てきましたが、やっとここでプログラムのロジックを疑う話になります。
コードチェックを行う際に大事なことは、デバッグを行うことです。コードをじっと見てエラーを発見することも大事ですが、エラーが出ている付近のコードでデバッグを行うほうが素早く問題を解決できます。
フレームワークを使った開発になると、プロジェクトの規模によってはコードを1から読んでいるととても時間が足りないので、デバッグしながら原因を特定しロジックを見直すほうが早いです。
ロジックのミスに対してはエラーチェックのツールで確認が難しいため、自力でデバッグしてロジックを見直すことになります。ここがエンジニアの腕の見せどころですね。
まとめ
構文チェッカーとlintについて説明してきました。しかし構文チェックツールは、あくまで構文チェックのみを行うものであり、コードのクオリティを保証するものでありません。
コードのクオリティをあげるためには、コーディング規約に則ったコードを書くことが大事です。PHP_CodeSnifferを使えば、作成したコードがPHPのコーディング規約に則っているかを確認できます。
また、プログラミングをする上でエラーを回避することは難しいです。エラーメッセージを理解し、どこに原因があるかを素早く見つける能力を磨くことが大事です。