コードを実行する
コードを見ただけでは、全体的に何をやっているのかわからない、ということがよくあると思う。 例えば、以下のコードは何を出力しているコードでしょうか? (変数名などは意図的に不親切な感じにしてある)
<?php // nazono.php function nazono() { $a = 0; $b = 1; for ($i = 1; $i <= 10; $i++) { $l = $a; $a = $b; $b += $l; print "$a\n"; } } nazono();
プログラムを眺めただけで分かる人もいれば、ずっと見ていてもわからない人もいるかもしれない。 今回は、実行・デバッグしてみてプログラムを理解する方法について解説する。
Run 機能を使ってスクリプトを実行する
まず、新規プロジェクトを作成し、nazono.php
を保存する。素朴にphpコマンドで実行してみると以下のように出力される。
10番目までのフィボナッチ数を出力するプログラムだった。(わかりにくくするために再帰を用いていない)
$ php nazono.php 1 1 2 3 5 8 13 21 34 55
PhpStormと連携するCLI環境をDockerで用意してからProjectパネルで nazono.php
を右クリックし、「Run 」とRunパネルに以下のように表示される。
ここまでは、少ない設定でPHPスクリプトが実行できるようになることを示したかっただけで、Debug 機能の説明で本題に入る。
Debug 機能でスクリプト実行中の状態を確認しながら実行する(デバッグ実行)
理解しづらいコードを、デバッグ機能を使ってプログラム実行中の状態を確認しながら理解する方法について説明する。もし、手元にPHPデバッグ環境がない場合はXdebugでデバッグできる最低限のWebサーバを用意するの手順で準備してほしい。
PHPプロジェクトの多くはWebプロジェクトなので、ブラウザからアクセスしてデバッグしてみる。
[Xdebugでデバッグできる最低限のWebサーバを用意する]で準備した状態は上記のようになっていて、docker-compose up -d
でコンテナを起動し、 http://localhost:8000/nazono.php
にアクセスすると以下のように表示される。
http://localhost:8000/nazono.php
を実行
ではリモートデバッグしてみる。
この状態でもう一度ブラウザからアクセスするとブレークポイント行背景が青くなり、プログラム実行が一時停止していることがわかる。
ブレークすると、Debugパネルで変数の状態を確認できる。またエディタ上で変数が変化したときにその行の右側に内容が表示される。
ループで実行されていることを理解するために、一時的に各ループごとの $i
, $a
, $b
の値をログに残したくなったら、ログ機能がつかえる。
10行目のブレークポイントを右クリックして「More」を選ぶとダイアログが表示されるので以下のように入力する
- 「Evaluate and log」をチェックし、
"\$i=$i, \$a=$a, \$b=$b"
と入力し、「Done」で閉じる
この状態でデバッグ実行すると、DebugパネルのConsoleタブに変数の状態が出力される。
ConsoleパネルはREPLを兼ねていて、任意のPHPコードをその場で実行できるし、コード補完も効く。
コードを実行しながらコードを読んでブレークしてさらにコードを実行する…そんな試行錯誤でコードを理解する機能になっている。
目次
次はテストコードを読む・書く編