PHPの人気のフレームワークLaravelではWebサイトの管理画面を開発することができます。
開発の手順に関しては以下の記事にて具体的に紹介をしていきました。
さらに開発後のデプロイの手順は以下で解説していきました。
この記事ではPHPUnitでLaravelのAPIテストをする方法について解説しています。
におすすめの記事となっています。これを読めばいよいよLaravelで開発した管理画面をリリースする準備ができますよ。
まず作業の前に、最低限やりたいことを決めておきます。
今回はLaravelの認証後のAPIのテストを書けるようにしたいので、以下の要件にしました。
● CookieのAPI認証の部分はテストせず、認証済として扱う
● 認証後の管理者ユーザーの一覧取得のAPIをテストする Cookie認証のAPIは以前の記事で実装したものを利用します。
CookieによるAPI経由のユーザー認証機能を作る【Laravel6とNuxt.jsで作る管理画面】
LaravelではデフォルトでPHPUnitが使えるようになっていますが、
実際にテスト書いていくためには、いくつか準備が必要なので、そちらを進めていきます。
開発環境のデータに影響を与えないようにするため、まずは、以下コマンドを実行してテスト用のDBを作成しましょう。
mysql> create database laravel_test; PHPUnitではデフォルトでsqliteを使う設定になっていますが、本番DBと環境を揃えるため、テストでもMySQLを使うようにします。
次に下記コマンドでテスト用の.envファイルを作成します。
cp .env.example .env.testing ファイルが作成できたら、以下の内容で.env.testingを修正します。
APP_NAME=Laravel
//testingに変更
APP_ENV=testing
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
//追加したデータベース名に変更
DB_DATABASE=laravel_test
DB_USERNAME=root
DB_PASSWORD= 修正が完了したら、次に以下コマンドでテスト用のAPP_KEYを作成します。
php artisan key:generate --env=testing 以下のような値が.env.testingに作成されればOKです。
APP_KEY=base64:XXXXXXX 次に以下の内容でphpunit.xmlを変更します。
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
//ここを変更
<server name="DB_CONNECTION" value="mysql"/>
<server name="MAIL_DRIVER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
</php> PHPUnitは.env.{APP_ENVの値}の.envファイルを自動で読み込む作りになっています。
そのため、DB_DATABASE は.env.testingの値が設定されるので、phpunit.xml側からは削除しています。
次に以下コマンドを実行します。
php artisan migrate --env=testing 以下のようにマイグレーションが反映されればOKです。
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.05 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.06 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (0.03 seconds)
Migrating: 2020_05_09_010620_create_admin_users_table
Migrated: 2020_05_09_010620_create_admin_users_table (0.05 seconds) 事前準備が完了したので、ここからは実際にテストを書いていきます。
Laravelでは、testsディレクトリの下にFeatureディレクトリとUnitディレクトリがあり、
この中にテストコードを配置します。
FeatureにはControllerやMiddlewareといったHTTPリクエストによる機能テスト、Unitにはそれ以外の単体テストについて書きます。
それ以外のディレクトリ構成にすることも出来ますが、基本の構成を踏襲した方が可読性が上がって良いでしょう。
今回はAPIのテストなので、Featureテストを書いていきます。
まず以下のコマンドでFeatureテストのファイルを作成します。
php artisan make:test Api/AdminUserTest 次のような内容のtests/Feature/Api/AdminUserTest.phpが作られていればOKです。
<?php
namespace Tests\Feature\Api;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
class AdminUserTest extends TestCase
{
/**
* A basic feature test example.
*
* @return void
*/ public function testExample()
{
$response = $this->get('/');
$response->assertStatus(200);
}
} Laravelは設定ファイルをキャッシュして高速化しているため、DBを扱うテストコードを実行する前には php artisan config:clear を実行することが公式ドキュメントで勧められています。
これをしておかないと、キャッシュで本番DBがリセットされてしまうという問題も起こりかねません。
そのため、以下の内容のtest.shというスクリプトファイルを作成します。
#!/bin/bash
php artisan config:clear
./vendor/bin/phpunit tests/Feature/Api ファイルが出来たら下記コマンドでテストを実行します。
chmod +x test.sh //実行権限を付与(最初の1回だけでOK)
./test.sh 以下のような画面が出ればOKです。
ログインのテストをするために管理者ユーザーのアカウントを作成します。
こういったテスト用データの用意には、Factoryを使いましょう。
以下コマンドで管理者ユーザー用のFactoryを作成します。
php artisan make:factory AdminUserFactory --model=AdminUser 作成されたdatabase/factories/AdminUserFactory.phpを以下内容に編集します。
<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\AdminUser;
use Faker\Generator as Faker;
$factory->define(AdminUser::class, function (Faker $faker) {
static $password;
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => $password ?: $password = bcrypt('secret'),
'remember_token' => Str::random(10),
];
}); これで管理者ユーザーを作ることが出来るようになりました。
次にtests/Feature/Api/AdminUserTest.phpを以下の内容に編集します。
<?php
namespace Tests\Feature\Api;
use App\AdminUser;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
class AdminUserTest extends TestCase
{
// テストデータのリセット
use RefreshDatabase;
// ミドルウェアの無効化
use WithoutMiddleware;
private $adminUser;
public function testIndex()
{
// テストデータをFactoryで作成
$adminUser1 = factory(AdminUser::class)->create();
$adminUser2 = factory(AdminUser::class)->create();
$response = $this->json('GET', '/api/admin_users');
$response
->assertStatus(200)
->assertJson(
[
[
'id' => $adminUser1->id,
'name' => $adminUser1->name,
'email' => $adminUser1->email,
],
[
'id' => $adminUser2->id,
'name' => $adminUser2->name,
'email' => $adminUser2->email,
]
]
);
}
}
Laravelでは便利な共通処理がtraitとして提供されており、上記のコードではRefreshDatabaseとWithoutMiddlewareを利用しています。
今回使っているAPIではAjax以外の通信を403エラーにするMiddlewareを指定していますが、テストでは不要なため除外するようにしています。
編集できたら、テスト実行後に以下のコマンドを実行します。
php artisan tinker --env=testing テストが成功し、以下のようにデータがリセットされていればOKです。
今回はPHPUnitでLaravelの認証付きAPIのテストを行いました。
本記事では一覧取得のテストケースのみ紹介しましたが、同様にCRUDのテストケースを書けますね。
本日紹介したようなものを外注してみるのはいかがでしょうか。 dehaソリューションズではオフショア開発によって低コストで迅速な開発をサポートしています。
Laravelに関して詳しくお話を聞きたい方、開発相談や無料お見積りをしたい方はこちらからご気軽にお問い合わせください。
▼ dehaソリューションへの簡単見積もりの依頼はこちら
「AIを業務に取り入れたいけれど、導入コストが気になる」「どのようなAIツールを選べばよいのかわからない」「補助金を使ってDXを進めたい」――このような悩みを抱える中小企業・小規模事業者は少なくありません。 そこで活用を検討したいのが、2026年度の「デジタル化・AI導入補助金」です。 従来の「IT導入補助金」から名称が変更され、2026年度はAI活用を含むデジタル化をより意識した制度となっています。 業務効率化や生産性向上につながるITツールの導入費用を支援することで、中小企業のDXを後押しする制度です。 この記事では、2026年度のデジタル化・AI導入補助金について、制度の概要から申請スケジュール、AI活用の具体例、申請時の注意点までをわかりやすく解説します。 AI導入を検討している方 IT導入補助金を申請したい方 これらに当てはまる方におすすめの記事となっています。これを読めば2026年度の「デジタル化・AI導入補助金」の詳細がわかるだけでなく、具体的な申請方法も丸わかりですよ。 (more…)
生成AIやAIエージェントなどの技術が急速に進化し、企業におけるAI活用は「一部の業務を効率化する段階」から「企業そのものの仕事の進め方を変える段階」へと移行しています。 こうした変革を指す言葉として注目されているのが、AX(AI Transformation)です。 しかし、AXを推進しようとして「まずは生成AIを導入してみよう」と考えるだけでは、十分な成果につながらないケースも少なくありません。 AIツールを導入したものの、一部の社員しか利用しない、期待したほど生産性が上がらない、既存システムとの連携が進まないといった問題が発生することがあります。 AXで重要なのは、AIという技術そのものではなく、AIを活用して業務・組織・意思決定・顧客体験などをどのように変えていくかという視点です。 そのためには、明確な構想を立て、対象業務を選定し、小さく実証し、成果を検証したうえで全社へ展開していく必要があります。 この記事では、AX推進を成功させるためのプロセスを7つのステップに分け、構想から社内への定着まで、企業が実践すべきポイントを解説します。 AXを推進したい方 AIに興味がある企業の方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めばAX推進のための方法がステップごとに具体的にわかりますよ。 (more…)
皆さんは「クラウドAI」をご存知でしょうか。クラウド環境を利用することで、高価なサーバーや専門的なAIインフラを自社で保有することなく、高度なAI機能を利用できるようになりました。 市場調査会社の各種レポートでも、クラウドAI市場は2034年に向けて急速な成長が予測されており、多くの企業が競争力強化や業務効率化を目的に導入を進めています。 この記事では、市場規模の最新予測や成長を支える要因、企業がクラウドAIを導入するメリットについて、最新の市場調査データをもとに詳しく解説します。 クラウドAI市場に興味がある方 クラウドAIの動向が気になる方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めばクラウドAI市場の規模や動向について分かるだけでなく、企業のメリットまで丸わかりですよ。 (more…)
近年、ChatGPTをはじめとする生成AIの登場によって、多くの企業がAI活用に注目しています。 しかし、「AIを導入したいが、自社でサーバーやシステムを構築するのは難しい」「コストを抑えながらAIを活用したい」と考える企業も少なくありません。 そこで注目されているのがクラウド型AIです。インターネット経由でAIを利用できるため、高性能なAIを低コストかつ短期間で導入できることから、多くの企業で採用が進んでいます。 この記事では、クラウド型AIの仕組みや特徴、オンプレミス型との違い、導入メリット、導入時の注意点まで詳しく解説します。 AIを導入したいとお考えの方 社内のIT人材が不足している方 業務効率を上げたい方 これらに当てはまる方におすすめの記事となっています。これを読めばクラウド型AIの特徴がわかるだけでなく、導入方法まで丸わかりですよ。 (more…)
「AIを導入したいけれど、何から始めればよいかわからない」「ChatGPTを試してはいるものの、業務改善にはつながっていない」「競合企業はAIを活用しているようだが、自社はどのレベルなのか知りたい」。 このような悩みを抱える企業は少なくありません。 近年、企業のAI活用は「AIツールを使う」段階から、「AIを前提とした企業へ変革する」段階へと進化しています。 その変革を体系的に理解するために注目されているのがAX(AI Transformation)段階モデルです。 この記事では、AX段階モデルの概要と各ステージの特徴、自社がどの段階にあるのかを判断するポイントについて、3分で理解できるようわかりやすく解説します。 AIを導入したいが、どこから始めればよいかわからない方 自社のAI活用レベルを客観的に把握したい方 AIを活用して生産性向上や競争力強化を目指したい方 に当てはまる方におすすめの記事となっています。これを読めばAIを活用するための具体的な方法とAXモデルの具体的な仕組みが分かりますよ。 (more…)
近年、AI(人工知能)は私たちの生活だけでなく、企業活動にも急速に浸透しています。 文章作成や画像生成、データ分析、問い合わせ対応など、これまで人が担っていた業務をAIが支援・代替できるようになり、多くの企業がAI活用に注目しています。 一方で、「AIツールを導入しただけ」で終わってしまう企業も少なくありません。 本当に競争力を高めるためには、単なるAI活用ではなく、企業全体をAI中心に変革する「AX(AIトランスフォーメーション)」という考え方が重要になります。 この記事では、AXとは何か、DXとの違い、そしてなぜ今企業にAXが必要なのかについて詳しく解説します。 AXに興味がある方 AIを活用したいとお考えの方 社内のIT人材が不足している方 これらに当てはまる方におすすめの記事となっています。これを読めば今注目のAXについて丸わかりですよ。 (more…)