専用関数をコード内に記載しPHPデバッグを行う理由
PHP開発を進めていく際に、デバッグを行ってエラー発生する箇所や挙動が設計通りに行えているかをチェックしていきます。作成したコード内にデバッグで使う関数を差し込んで、順番に実行させるステップ実行によって結果やファイル名などをログファイルへ出力します。
思い通りに進んでいれば問題ありませんが、時には細かくエラー箇所が出てきて対処しなければならないポイントも出てきます。まず始めにデバッグを行う意味などを理解したうえで、どこで実行するか判断することも重要です。
変数の処理結果をステップ実行でデバッグしログで確認可能
コーディング作業をPHPの開発で行う際に、道中でデバッグを行って確認することは非常に大切です。設計などで活用できる変数を取り入れても、本当に理想の処理を正しく行っているか判断することができます。
開発中にデバッグを行えば、気付けなかった間違いが出てきます。エラー発生前から、想定内の処理が正しく行われているか確認しながらコーディングしましょう。
方法は、PHP言語のvardump関数やprint_r関数をコード内に差し込みます。その後PHPファイルを実行すると終了時に停止し、引数や関数などのエラー箇所をログファイルへ出力します。
計算を行い出力された変数が、時には想定外の内容になっていることもあります。また、開発で設計を確実に行っていても失敗するケースも多々存在します。思い通りに操作ができているか、テストケースを複数用意してデバッグを行うといいでしょう。
間違いに気づかず進んでいたことを知れるため、その都度修正が可能です。デバッグなしで完成まで突き進みすぎると、エラーが多ければ修正に時間がかかり、大きなストレスを抱えてしまうことも。デバッグは、変数処理のテストケースも設計しながら行いましょう。
デバッグによってエラー箇所を見極めることができる
作成したコードが想定外の動作を行いエラーとなるケースもあるので、開発中はどこかで必ずデバッグを行いましょう。設計などで見つけられなかったエラー箇所を発見でき、正しい修正を行うことができます。
例えば、実行後「Fatal error: Call to undefined function」と表示されると、未定義の関数を呼び出しています。また「Fatal error: [] operator not supported for strings」ならば、文字列で使う変数を配列で扱っていることが分かります。
開発時はエラーが表示されないように事前に設定された環境で行うこともあり、プログラムがどこまで成立しているか分からないケースも少なくありません。例えば、画面上に文字出力を行うコードを書き足した際、デバッグで書き足した位置まで問題なく届けばエラーも出ません。
もしエラーが手前で出力されれば、コード修正や削除の検討が必要です。作業実施後に改めてデバッグを実施し、プログラムが正しく処理されるか精査することができます。
PHPデバッグでどのようなコードを辿るか理解できる
PHPでの開発中でエラーが発生した時、コードの構造が分からないこともあります。どのような経路を辿り処理が行われているかは、デバッグによって対応できます。エラーが生じたコードの位置を知り、内容を把握することもできます。
がむしゃらにPHPのコーディングを進めたい時もありますが、書き進めた内容を振り返りエラーにならないか立ち止まって知ることも重要です。こまめにデバッグを行い、効率よく修正などを行いながらベストなコーディングを行いましょう。
最近はChromeでもPHPデバッグを行える
ブラウザで主流になってきているGoogle ChromeでもPHPデバッグツールがリリースされています。PHPをChromeで使用する機会も増えており、Chrome Loggerというエクステンションをインストールすることでコンソール上から確認できます。
Chrome LoggerはPHP以外にもPythonやRubyなどにも対応しているため、他の言語も併用する際も利用可能です。これらを活用しながら、エラーチェックをしていきましょう。
PHPデバッグを行えるオブジェクトや関数がある
PHP言語を活用しながらデバッグする際に、代表的なオブジェクトや関数が様々あります。
様々なオブジェクトを活用し、変数・値・配列などを展開しながら、正しく処理表示ができるかチェックしていきましょう。多重構造になっているケースもあるため、事前にどのオブジェクトや関数を使うか検討も必要です。
PHPデバッグはvardump関数を使うのが基本
PHPのデバッグを行う際はvardump関数を使うのが基本で、これにより変数の中身を実行時に知ることができます。セッションの内容や配列が複雑になっても、vardump関数によって中身をスピーディーに出力します。
vardump関数は変数が配列でも、キーと値だけでなく値の型も情報として返します。ステップ実行などで順番に処理し、デバッグを進めることができます。また、多重構造でも変数の中身を簡単にチェックできるので、多くのケースで利用されています。
以下のように、vardump関数を活用していきます。
<?php
$var = 'test';
var_dump($var); // 引数の文字列
var_dump('debug'); // 文字列で確認
?>
他にもvardump関数はエラー発生ポイントを調べる時にも役立てることができ、様々な箇所でvardump関数を仕込んで随時デバッグを行えます。実行後に出力された結果と、コード内容を比較して修正などを行えます。
途中で止めたい時にはexitを併用し、書き出してプログラムを止めることも可能です。適宜活用しながら、素早く修正箇所を見つけて処理を止めることも重要です。
返り値を把握する時はdebug_backtraceを使う
vardump関数と同じくらいに活用されているのがdebugbacktraceで、開発時にPHPのコーディングで開始箇所から経路を検索する際に活用されます。コード内にprintr(debugbacktrace())と記載し、実行するとファイル名や行番号などが出力されます。
以下のようにコードを記載することによって、状況を確認することができます。
$test = debug_backtrace();
foreach($test as $line) {
errorline("{$line["file"]}: line {$line["line"]}");
}
debugbacktraceは、処理が行われている箇所がどの部分から呼び出されたかを記録する連想配列を返り値として出力し、どのような経路を辿っているか詳細を確認できます。
呼び出された情報から何行目のどの関数や引数で引っかかったのか把握でき、PHPのデバッグで役立てることができます。
情報をわかり易く表示するprint_r関数
PHPでは文字列や計算結果を表示しますが、その方法は様々あります。その中でprint_r関数を使うと、より情報を分かりやすく出すことができます。
以下のようにコードを記載し、デバッグを行うことができます。
<?php
$array = array(
'test1' => 'taro_1',
);
print_r($array);
最初に第一引数に対して出力する式や値を選び、第二引数でTRUEを選ぶ際にprint_rの結果を表示させることができます。返り値は種類も豊富で、stirngやintegerなどの型を選ぶ際に指定した型で結果を出力します。
また、配列の値もprint_r関数では把握しやすい内容で出力することができ、多次元配列でも可能です。結果はファイルに保存可能で、fopen関数を併用して書き込みモードでデバッグを行うことができます。
VSCodeを利用してPHPデバッグを行う方法
昨今注目されているVSCodeは、マイクロソフトが提供するテキストエディタです。オープンソースでの開発で活用できますが、PHPデバッグでも利用可能です。必要なパッケージをインストールし、見方をマスターしてデバッグに活用していきましょう。
PHPによる開発を幅広く行うことができる
クロスプラットフォームとなっているVSCodeは、PHP以外にも様々な言語に対応しています。処理が高速で行われるだけでなく、拡張機能も豊富です。様々なエディタと比較してもVSCodeは使いやすく、サンプルプログラムを組もうと考えた時にもスムーズに進めることができます。
PHP開発でVSCodeを使う際に必要な拡張機能を取得する
初心者でもVSCodeはPHPをデフォルトでサポートしているため、すぐに開発を行うことができます。構文について簡単に組み立てていくことができるだけでなく、デバッグ時に拡張機能を使って対応可能です。
特にPHP IntelliSenseでは、構文のハイライトやコード補完などを見えやすく表示させることができ、コマンドのパスや言語サーバが使うメモリの上限を指定することができます。エラー検出も行うので、デバッグ結果からすぐに修正などを行うことも可能です。
PHP独自のデバッグ機能を使うことができる
VSCodeの拡張機能の1つであるPHP Debugでは、PHP独自のデバッグ機能であるXdebugを使うことができます。Xdebugを使うと簡単にデバッグを行うことができ、設定ファイルへXdebugに関する情報を加えて使えます。
Xdebugは対象ファイルとは別の場所へ格納して実行できる、リモートデバッグが可能です。使う時はパスを、php.iniへ追記しなければなりません。加えてリモートデバッグを有効にする「xdebug.remote_enable = 1」、自動実行用の「xdebug.remote_autostart = 1」などの設定もphp.iniへ追記します。
Xdebugを使うとPHPデバッグで活用されることが多い、vardump関数による結果をわかりやすく表示させることができます。カラー表示となるだけでなく、多次元配列ではインデントを下げた状態でチェックすることができます。
拡張機能でPHPデバッグの方法を理解し活用する
インストール後対象のプロジェクトフォルダを開き、サイドメニューからデバッグを選択します。ファイルの種類はPHPを選択し、ルートディレクトリに「.vscode」フォルダとlaunch.jsonが作成されます。
launch.jsonへ対象のフォルダのパスを記載しますが、パスは必ずバッグスラッシュ2つに重ねて記載しなければなりません。例えば「c:\PHP\test.php」という形になります。完成後デバッグウィンドウで再生ボタンを押し、PHPのデバッグを開始できます。
PHPデバッグがどうしても止まらない時の対処方法
VSCodeを使ってデバッグを行う時に、ブレークポイントを作っても止まらないことがあります。事前に防ぐ対策として、設計する際に具体的にインデントなどを把握できるように検討しましょう。
雑に設計を進めるとエラー箇所を見出すことができなくなり、何度繰り返してもブレークポイントで止まらなくなるケースも多いです。
ブレークポイントで止まらない時には、1度強制的に止めてphpinfoをチェックしましょう。phpinfoで変数などの結果で想定外の内容が掲載されていることがあり、それがブレークポイントで止まらない原因となるケースも少なくありません。
具体的なファイルパスやコード内容が記載されていれば、その処理を実行する際にブレークポイントで止まらなくなる状況が生じていることもあります。冷静に判断しながら原因を突き止め、見やすい状態にしたVSCodeで修正を進めましょう。
PHPで開発を進める際にはデバッグは必要不可欠
PHPは様々なプログラミング言語の中でも覚えやすく、ホームページなどに組み込むケースも多いです。専門的な知識を身に着けていくと、より詳しく細かいコーディングを行うこともできます。しかし作り上げていく中で、適宜見直すためにデバッグを実行することも必要です。
そこからエラー検出を引き起こす原因を見つけながら、より完璧な内容に仕上げることができます。初心者でもVSCodeを利用して、スムーズにPHPによる開発を進められるようになっています。デバッグを適宜行う感覚を身に着けて、理想的な開発を行いましょう。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから