12
9

More than 1 year has passed since last update.

Laravel Ray 進化したDumpデバッグデスクトップアプリ

Last updated at Posted at 2021-12-18

この記事は ミライトデザイン Advent Calendar 2021 18日目の記事です。

【超入門】Laravelのデバッグ手法22選の記事でも紹介しています。

Laravel Ray とは

有償のデバッグデスクトップアプリです。
おしゃれなUIが特徴です。

Ray自体はLaravel専用というわけではなく他のPHPフレームワークや、JavaScript、NodeJS、Bash、Ruby、Go等の他の言語にも対応しています。

Laravelに導入する場合ですが、PHP拡張機能を別途インストールすることなく spatie/laravel-ray のComposerライブラリをインストールするだけでokです。

ブレークポイントが張れるのと、デスクトップ通知ができるのが便利そうだなと感じました。

機能としては beyondcode/laravel-dump-server の代替ツールと言って良さそうです。

インストール

$ composer require spatie/laravel-ray --dev

設定ファイルの作成

$ php artisan ray:publish-config

DockerHomestead 環境を利用する場合は下記のオプションを付けて実行してください。

$ php artisan ray:publish-config --docker
# or
$ php artisan ray:publish-config --homestead

Laravelプロジェクトルートに ray.php が生成されます。
config/ray.php へ移動します。

$ mv ray.php config/

Ray on Docker

  • Docker 20.03 以降

docker-compose.yml で環境変数で渡してあげると良さそうです。
- environment
- RAY_REMOTE_PATH にコンテナ側から見たLaravelプロジェクトルートディレクトリを指定する。
- RAY_LOCAL_PATH にホスト側から見たLaravelプロジェクトルートディレクトリを指定する。
- extra_hosts
- コンテナからホスト上のRayサービスに接続したいのでホスト設定をします。

docker-compose.yml
services:
  app:
    image: php-fpm
    # ...
    environment:
      - RAY_REMOTE_PATH=/work/backend
      - RAY_LOCAL_PATH=$PWD/backend
    extra_hosts:
      - "host.docker.internal:host-gateway"

  web:
    image: nginx
    # ...

使い方

使い方は公式ドキュメントに載ってるので詳しくはこちらを参照ください。

https://spatie.be/docs/ray/v1/usage/reference
https://spatie.be/docs/ray/v1/usage/framework-agnostic-php-project

いくつか便利なメソッドを抜粋します。

基本

ray($variable);
ray($variable, $another, ...);

文字列や配列、オブジェクトを表示します。

ray('a string');
ray(['an array']);
ray(app());

ScreenShot 2021-12-16 21.27.54.png

  • ファイル名:行番号のリンクからエディタへジャンプできます。
  • Command + K スクリーンをクリアできます。
  • Command + L アプリを非表示にできます。

色付け

rayに送信したデバッグコードに色付けできます。

ray('this is green')->green();
ray('this is orange')->orange();
ray('this is red')->red();
ray('this is blue')->blue();
ray('this is purple')->purple();
ray('this is gray')->gray();

ScreenShot 2021-12-16 21.29.28.png

上部バーの色のチェックボックスからフィルタリングできます。

dump & die

rayに送信後、処理を終了します。

ray($variable)->die();
// or
rd($variable);

現在の画面をクリア

rayの画面をクリアできます。

ray('🍎');
ray()->newScreen();
ray('🍌');

or

ray('🍎');
ray()->newScreen('🍌');

ScreenShot 2021-12-16 21.40.30.png

すべての画面をクリア

上部メニューの左、右ボタンから前後の画面の履歴を遡れますが、すべてクリアしたい場合は下記のコードを実行します。

ray()->clearAll(); 

呼び出し元の関数を表示

呼び出し元の関数を表示します。バックトレースの1つ目だけ表示してくれます。

ray()->caller();

ScreenShot 2021-12-16 21.46.54.png

バックトレース

ray()->backtrace();
// or
ray()->trace();

ScreenShot 2021-12-16 21.33.51.png

ブレークポイント

$books = Book::all();

foreach ($books as $book) {
    ray($book->name);
    ray()->pause();
}

ScreenShot 2021-12-16 21.49.47.png

ブレークポイントを張ることができます。
XDebugと比較してしまうとやれることは少ないですが便利そうです。

カウント

何回を通ったかカウントします。

$books = Book::all();

foreach ($books as $book) {
    ray()->count();
}

ScreenShot 2021-12-16 21.51.08.png

foreach (range(1, 4) as $i) {
    ray()->count('first');

    foreach (range(1, 2) as $j) {
        ray()->count('first');
        ray()->count('second');
    }
}

ScreenShot 2021-12-16 21.52.52.png

カウンターに名前を付けて同じカウンターが何度呼ばれたかカウントしてくれます。

クラス名

$books = Book::all();
ray()->className($books);

ScreenShot 2021-12-16 22.00.03.png

パフォーマンスとメモリ使用量の測定

ランタイムとメモリ使用量を表示できます。
複数回 measure 関数が呼ばれるとその間のラップタイムを表示されます。
また、実行時に使用された最大メモリ数を表示します。

ray()->measure();
sleep(1);
ray()->measure();
sleep(2);
ray()->measure();

ScreenShot 2021-12-16 22.01.24.png

ray()->measure(function() {
    sleep(5);
});

ScreenShot 2021-12-16 22.02.11.png

デスクトップ通知

デスクトップ通知を表示できます。

ray()->notify('The run command has finished');

ScreenShot 2021-12-16 22.07.49.png

長いコマンドを実行して終わった時にデスクトップ通知させておくと良いかもしれないと思いました。
個人的に一番感動しました!

phpinfo を表示

phpinfo を表示できます。

ray()->phpinfo();
ray()->phpinfo('xdebug.enabled', 'default_mimetype');

ScreenShot 2021-12-16 22.14.01.png

アプリの表示と非表示

ray()->hideApp();
sleep(5);
ray()->showApp();

参考

12
9
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
12
9