バグの少ない堅牢なアプリケーションを開発するためには、自動テストとデバッグ技術の習得が欠かせません。
特にPHPでは、PHPUnitによるテストと、xdebugを使ったステップ実行・ブレークポイントデバッグが非常に効果的です。
本記事では、PHPUnitの導入とユニットテストの基本、モックとスタブの違い、実務で役立つデバッグ手法を分かりやすく解説します。

目次
PHPUnitの導入と基本テスト
1. PHPUnitのインストール
Composerを使用してプロジェクトにインストールします。
composer require --dev phpunit/phpunit ^10
インストール後は、./vendor/bin/phpunit
でコマンド実行できます。
2. テスト対象クラスの例
// src/Calculator.php
<?php
namespace App;
class Calculator {
public function add($a, $b) {
return $a + $b;
}
}
?>
3. テストクラスの作成
// tests/CalculatorTest.php
<?php
use PHPUnit\Framework\TestCase;
use App\Calculator;
class CalculatorTest extends TestCase {
public function testAdd() {
$calc = new Calculator();
$this->assertEquals(5, $calc->add(2, 3));
}
}
?>
4. 実行コマンド
./vendor/bin/phpunit tests
テストが通れば「OK」、失敗すれば差分が出力されます。
モックとスタブの違いと使い方
ユニットテストでは、外部依存(DB、APIなど)を置き換えてテストするためにモック(Mock)やスタブ(Stub)を使います。
スタブ:決まった戻り値を返す
<?php
$stub = $this->createStub(SomeService::class);
$stub->method('getData')->willReturn('テストデータ');
?>
モック:メソッドの呼び出しを検証する
<?php
$mock = $this->createMock(Logger::class);
$mock->expects($this->once()) ->method('log') ->with('処理開始');
$mock->log('処理開始');
// テスト対象の中で呼ばれる想定
?>
スタブ=返す用、モック=監視用と覚えるとよいでしょう。
デバッグテクニック(var_dump / xdebug)
1. var_dump() / print_r()
変数の中身を確認するシンプルな手法です。
<?php
$user = ['id' => 1, 'name' => '佐藤'];
var_dump($user);
?>
<pre>
タグと併用すると整形されて見やすくなります。
2. xdebugによるステップデバッグ
xdebugは、PHPの実行をステップごとに追える強力な拡張モジュールです。
xdebugのインストール(Linux例)
sudo apt install php-xdebug
php.ini に以下を追加
[xdebug] zend_extension=xdebug.so xdebug.mode=debug xdebug.start_with_request=yes
VSCode + PHP Debug 拡張と併用
.vscode/launch.json
でブレークポイント設定- F5でステップ実行可能に
正確な変数の状態、実行の流れを可視化でき、バグの特定が一気に楽になります。
まとめ
今回は、PHPにおける自動テストとデバッグ技術を学びました:
- PHPUnit: テスト駆動で品質管理
- モック / スタブ: 外部依存を切り離す
- デバッグ技術: var_dump, xdebug による可視化
これらの技術を組み合わせれば、テストしやすく、バグの少ない堅牢なシステム開発が可能になります。