カテゴリ: Laravel 更新日: 2026/02/19

Laravelでテストを始める方法!PHPUnitとartisan testの基礎

Laravelでテストを始める方法!PHPUnitとartisan testの基礎
Laravelでテストを始める方法!PHPUnitとartisan testの基礎

先生と生徒の会話形式で理解しよう

生徒

「Laravelで作ったプログラムが正しく動いているか確認する方法はありますか?」

先生

「はい、Laravelには自動テストという機能があります。PHPUnitやartisan testを使えば、プログラムが正しく動作しているか自動でチェックできるんですよ。」

生徒

「自動テストって何ですか?手動でチェックするのとは違うんですか?」

先生

「手動だと毎回ブラウザで確認する必要がありますが、自動テストなら一度書いておけば何度でも自動でチェックできます。それでは基本から見ていきましょう!」

1. Laravelのテストとは?

1. Laravelのテストとは?
1. Laravelのテストとは?

Laravelのテストとは、作成したプログラムが正しく動作しているかを自動的に確認する仕組みです。例えるなら、料理を作った後に味見をするようなものです。味見をせずに料理を出すと失敗する可能性がありますよね。プログラムも同じで、テストをすることでバグ(プログラムの不具合)を早期に発見できます。

Laravelには最初からPHPUnitという人気のテストツールが組み込まれています。PHPUnitは、PHP言語で書かれたプログラムをテストするための専用ツールです。また、Laravelにはartisan testという便利なコマンドも用意されており、初心者でも簡単にテストを実行できるようになっています。

2. テストファイルの場所と構造

2. テストファイルの場所と構造
2. テストファイルの場所と構造

Laravelプロジェクトを作成すると、testsというフォルダが自動的に作られます。このフォルダの中に、テスト用のファイルを保存していきます。testsフォルダには2つの重要なサブフォルダがあります。

  • Featureフォルダ:実際のユーザー操作に近いテストを書く場所です。例えば、ログイン機能や商品購入機能など、複数の処理をまとめてテストします。
  • Unitフォルダ:小さな機能単位でテストを書く場所です。例えば、計算処理や文字列処理など、一つの関数やメソッドだけをテストします。

最初からサンプルのテストファイルが入っているので、それを参考にしながら学習を進めることができます。テストファイルの名前は必ずTestで終わる必要があります。例えばUserTest.phpLoginTest.phpのような名前です。

3. 最初のテストを書いてみよう

3. 最初のテストを書いてみよう
3. 最初のテストを書いてみよう

それでは実際に簡単なテストを書いてみましょう。まずはコマンドラインで新しいテストファイルを作成します。コマンドラインとは、黒い画面に文字を入力してパソコンを操作する方法です。Windowsではコマンドプロンプトやターミナルと呼ばれるアプリを使います。

以下のコマンドを実行すると、Unitテスト用のファイルが自動生成されます。

php artisan make:test CalculatorTest --unit

このコマンドを実行すると、tests/Unit/CalculatorTest.phpというファイルが作成されます。それでは、このファイルを開いて、簡単な計算テストを書いてみましょう。

<?php

namespace Tests\Unit;

use PHPUnit\Framework\TestCase;

class CalculatorTest extends TestCase
{
    public function test_足し算が正しく動作する()
    {
        $result = 2 + 3;
        $this->assertEquals(5, $result);
    }
}

このコードでは、2と3を足した結果が5になることをテストしています。assertEqualsメソッドは、2つの値が等しいかどうかを確認するメソッドです。もし結果が5でなければ、テストは失敗します。メソッド名は日本語でも書けるので、何をテストしているのか分かりやすくなります。

4. テストを実行する方法

4. テストを実行する方法
4. テストを実行する方法

テストを書いたら、実際に実行してみましょう。Laravelでは2つの方法でテストを実行できます。

方法1:artisan testコマンドを使う

これが最も簡単な方法です。プロジェクトのルートディレクトリ(プロジェクトフォルダの一番上の階層)で、以下のコマンドを実行します。

php artisan test

このコマンドを実行すると、testsフォルダ内のすべてのテストが実行され、結果が見やすく表示されます。成功したテストは緑色、失敗したテストは赤色で表示されるので、一目で状態が分かります。

方法2:PHPUnitコマンドを直接使う

より詳細な情報が必要な場合は、PHPUnitコマンドを直接使うこともできます。

./vendor/bin/phpunit

この方法では、より詳しいテスト結果やエラーメッセージが表示されます。初心者の方は、まずphp artisan testから始めることをおすすめします。

5. アサーションメソッドの基本

5. アサーションメソッドの基本
5. アサーションメソッドの基本

アサーション(assertion)とは、「主張」や「断言」という意味で、テストの中で「この値はこうなっているはずだ」と確認することです。PHPUnitには様々なアサーションメソッドが用意されています。

よく使われる基本的なアサーションメソッドをいくつか紹介します。

public function test_様々なアサーション()
{
    // 値が等しいか確認
    $this->assertEquals(10, 5 + 5);
    
    // 値が真(true)であるか確認
    $this->assertTrue(true);
    
    // 値が偽(false)であるか確認
    $this->assertFalse(false);
    
    // 配列に特定の値が含まれているか確認
    $fruits = ['りんご', 'バナナ', 'オレンジ'];
    $this->assertContains('バナナ', $fruits);
}

これらのアサーションメソッドを組み合わせることで、様々なパターンのテストが書けるようになります。例えば、ユーザー登録機能をテストする場合、メールアドレスが正しく保存されているか、パスワードが暗号化されているか、などを確認できます。

6. Featureテストの書き方

6. Featureテストの書き方
6. Featureテストの書き方

Featureテストでは、実際のユーザー操作をシミュレートしたテストが書けます。例えば、ウェブページにアクセスしたときに正しく表示されるかをテストできます。

まず、Featureテスト用のファイルを作成します。

php artisan make:test HomePageTest

次に、トップページが正しく表示されるかテストしてみましょう。

<?php

namespace Tests\Feature;

use Tests\TestCase;

class HomePageTest extends TestCase
{
    public function test_トップページが表示される()
    {
        $response = $this->get('/');
        
        $response->assertStatus(200);
    }
}

このテストでは、get('/')でトップページにアクセスし、assertStatus(200)でHTTPステータスコードが200(成功)であることを確認しています。HTTPステータスコードとは、ウェブサーバーがリクエストに対してどのような結果を返したかを示す番号です。200は「正常に表示できました」という意味です。

7. データベースを使ったテスト

7. データベースを使ったテスト
7. データベースを使ったテスト

実際のアプリケーション開発では、データベースを使った機能をテストすることが多くあります。Laravelでは、テスト用の専用データベースを使うことで、本番のデータに影響を与えずにテストができます。

データベースを使うテストでは、RefreshDatabaseという機能を使います。これは、テストが終わるたびにデータベースをリセットしてくれる便利な機能です。例えば、ユーザー登録のテストを書く場合、毎回同じ状態から始められるので、テスト結果が安定します。

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Models\User;

class UserTest extends TestCase
{
    use RefreshDatabase;
    
    public function test_ユーザーが作成できる()
    {
        $user = User::create([
            'name' => '山田太郎',
            'email' => 'yamada@example.com',
            'password' => bcrypt('password123')
        ]);
        
        $this->assertDatabaseHas('users', [
            'email' => 'yamada@example.com'
        ]);
    }
}

assertDatabaseHasメソッドは、データベースの指定したテーブルに、指定した値を持つレコード(データの行)が存在するかを確認します。このテストでは、ユーザーが正しくデータベースに保存されたかをチェックしています。

8. テスト実行時のオプション

8. テスト実行時のオプション
8. テスト実行時のオプション

テストを実行する際に、様々なオプションを指定することで、より効率的にテストができます。

オプション 説明
--filter 特定の名前を含むテストだけを実行します
--testsuite FeatureまたはUnitだけを実行します
--parallel 複数のテストを同時に実行して時間を短縮します

例えば、Calculatorという名前のテストだけを実行したい場合は、以下のようにします。

php artisan test --filter=Calculator

Unitテストだけを実行したい場合は、以下のコマンドを使います。

php artisan test --testsuite=Unit

これらのオプションを使いこなすことで、開発効率が大きく向上します。特に大規模なプロジェクトでは、全てのテストを実行すると時間がかかるため、変更した部分に関連するテストだけを実行することが一般的です。

9. テストを書くメリットと習慣化

9. テストを書くメリットと習慣化
9. テストを書くメリットと習慣化

プログラミング初心者の方は、「テストを書くのは面倒くさい」と感じるかもしれません。しかし、テストを書く習慣をつけることで、長期的には大きなメリットがあります。

まず、バグの早期発見ができます。手動でテストすると見落としがちな小さなバグも、自動テストなら確実に見つけられます。また、コードを修正したときに、他の部分が壊れていないか簡単に確認できます。これをリグレッションテスト(退行テスト)と呼びます。

次に、ドキュメントとしての役割も果たします。テストコードを読めば、その機能がどのように動くべきかが分かります。特にチームで開発する場合、テストがあることで他の開発者があなたのコードを理解しやすくなります。

さらに、テストを先に書いてからプログラムを作るテスト駆動開発(TDD)という手法もあります。これは、最初に「こういう動作をするべきだ」というテストを書き、そのテストが通るようにプログラムを作っていく方法です。この方法を使うと、必要最小限のコードだけを書くことができ、無駄なプログラムを減らせます。

最初は簡単なテストから始めて、徐々に複雑なテストにチャレンジしていきましょう。毎日少しずつテストを書く習慣をつけることで、自然とテストの書き方が身についていきます。

カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyのルーティング構成の基本を完全解説!初心者向けにYAML・PHP・アノテーション方式をやさしく紹介
New2
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法
New3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
New4
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.2
Java&Spring記事人気No2
PHP
PHPのif文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.3
Java&Spring記事人気No3
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本
No.4
Java&Spring記事人気No4
Laravel
Laravelのresponse()関数の使い方を完全ガイド!初心者でもわかるレスポンス制御とHTTPレスポンスの基本
No.5
Java&Spring記事人気No5
Laravel
LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
No.6
Java&Spring記事人気No6
CodeIgniter
CodeIgniterルーティングを完全攻略!正規表現でURLを自由自在に操る方法
No.7
Java&Spring記事人気No7
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
No.8
Java&Spring記事人気No8
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方