カテゴリ: 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
Laravel
LaravelでAPIのレスポンスをテストする方法を完全解説!assertJsonで初心者も安心
New2
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New3
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New4
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.2
Java&Spring記事人気No2
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.3
Java&Spring記事人気No3
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.4
Java&Spring記事人気No4
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.5
Java&Spring記事人気No5
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.8
Java&Spring記事人気No8
Laravel
Laravelでファクトリを使ってテストデータを作成する方法を完全解説!初心者向けLaravelテスト入門