LoginSignup
1
0

More than 1 year has passed since last update.

Symfonyのデバッグツール、"Profiler"

Last updated at Posted at 2022-12-20

Symfony Component Advent Calendar 2022の18日目の記事です。

最初に

SymfonyはPHPのフレームワークのひとつです。しかし、公式サイトの説明文には

Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony.
(SymfonyはPHPコンポーネントのセットで、Webアプリケーションフレームワークで、哲学、そしてコミュニティです。それらがハーモニーを奏でながら動作しています。)

と書かれている通り、PHPコンポーネントのセットで、たくさんのコンポーネントを提供しており、それらを組み合わせてひとつのフレームワークとして動作しています。Symfonyのコンポーネントは、Symfony上だけで動作するのではなく、他のPHPフレームワークやアプリケーションでも動作している強力なものが揃っています。

今回はそれらの中から、役立ちそうなもの・お薦めしたいものを紹介していきたいと思います。

※記事内ではautoloadのインポートは省略します。

Symfonyのデバッグツール、"Profiler"

Profiler(もしくはWebProfiler Bundle)は、アプリケーションがどのように動いたかを確認するための、デバッグツールです。

インストール

composer require symfony/profiler-pack --dev

開発専用ツールなので、--devをつけましょう

使い方

インストールすると自動で、画面下部にツールバーが表示されます。
スクショ

それぞれをクリックすると、それぞれの内容が表示されます。
スクショ

ツールバーなどのメニューはインストールされているコンポーネントにより表示が変わります。
例えばMailerがインストールされていればE-Mailsが活性化されますし、ORMがインストールされていればDoctrineが活性化されます。

また、そのほかにも画面上でAjax通信してアプリケーションにアクセスした場合は、その結果がリアルタイムにサブリクエストとしてツールに追加されたり、Dockerを使ってMailhogなど使っている場合は、Mailhogへのリンクをdocker-compose.ymlの設定を参考に自動的に貼ってくれます。

テストでProfilerをつかう

そして、機能テストでもこのProfilerを使うことができます。
利用するには2通りのやり方があり、1つは設定ファイルで有効化する方法

config/packages/web_profiler.yaml
when@test:
    framework:
        profiler: { collect: false, enable: true }

もう一つは、WebTestCase上で有効にする方法です。

SomeTest.php

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class SomeTest extends WebTestCase
{
    public function test()
    {
        $client = static::createClient();
        $client->enableProfiler(); // テストでProfilerを利用するようにする
    }
}

テストでそれぞれの値を取得する場合は、以下のようになります。

SomeTest.php
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class SomeTest extends WebTestCase
{
    public function test()
    {
        $client = static::createClient();
        $client->enableProfiler(); // テストでProfilerを利用するようにする

        $client->request('GET', '/some/path');
        
        $profile = $client->getProfile();

        $profile->getCollector('db')->getQueryCount();
    }
}

getCollector()で該当のメニューのコレクターを取得し、それぞれのコレクターのメソッドを呼び出すことで、値を確認できます。
上記の例ではORMのコレクターのgetQueryCount()を実行してクエリー実行回数を取得しています。

それぞれのコレクターのメソッドは、インストールしたコンポーネントのDataCollectorディレクトリに入っています。

まとめ

今回はProfilerの紹介でした。機能テスト内で使えるのは最近知ったので、メールが送信されたかであったり、イベントが実行されたかなどもテストすることができるようになります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0