Slide 1

Slide 1 text

Ray でPHP のデバッグをちょっと快適 にする 2025/2/26 第173 回 PHP 勉強会@東京 @muno_92 1

Slide 2

Slide 2 text

自己紹介 X ( 旧Twitter): @muno_92 趣味: カンファレンススタッフ PHP カンファレンス名古屋2025 ( 当日) PHPerKaigi 2025 ( コア) PHP カンファレンス小田原2025 ( コア) PHP Conference Japan 2025 ( 実行委員) 2

Slide 3

Slide 3 text

( 宣伝) PHPerKaigi 2025 日程: 2025 年3 月21 日( 金) 〜23 日( 日) 会場: 中野セントラルパークカンファレンス & ニコニコ生放送 チケット販売中! 当日スタッフ & PHPer コードバトル予選 (3/8 土) 参加者募集中! https://phperkaigi.jp/2025/ 3

Slide 4

Slide 4 text

( 宣伝) PHP カンファレンス小田原2025 日程: 2025 年4 月12 日( 土) 会場: おだわら市民交流センター「UMECO 」 チケット販売中! https://phpcon-odawara.jp/2025 4

Slide 5

Slide 5 text

デバッグどうしてますか? print デバッグ Xdebug PsySH Debugbar etc 5

Slide 6

Slide 6 text

こんな時ありませんか? ブレークポイントで止めずに一気に処理を流したいが、変数の中身 やどこを通ったかは確認したい ログは見やすく表示されて欲しい ( 色々な理由があって) Xdebug を使えない 6

Slide 7

Slide 7 text

こんな時ありませんか? ブレークポイントで止めずに一気に処理を流したいが、変数の中身 やどこを通ったかは確認したい ログは見やすく表示されて欲しい ( 色々な理由があって) Xdebug を使えない ↓ Ray はどうでしょう? 7

Slide 8

Slide 8 text

Ray ならこんな事ができます ray('Hello'); ray(['a' => 1, 'b' => 2]); 8

Slide 9

Slide 9 text

目次 Ray とは 使い方 Ray の仕組み 便利な機能 まとめ 9

Slide 10

Slide 10 text

Ray とは デバッグ結果を表示するデスクトップアプリ 有償 (4,566 円/ 年) 。お試し可能 対応OS Windows / Mac / Linux 対応言語 PHP / JavaScript / Bash / Go / Ruby 仕組み( 後述) 的に他の言語でも使えそう https://myray.app/ 10

Slide 11

Slide 11 text

使い方 11

Slide 12

Slide 12 text

セットアップ 1. デスクトップアプリをインストール 2. ray() をPC 共通 or プロジェクト単位でインストール PC 共通 composer global require spatie/global-ray global-ray install プロジェクト単位 composer require spatie/ray https://myray.app/docs/php/vanilla-php/installation 12

Slide 13

Slide 13 text

ログの出力 ray() これだけで十分便利 配列・オブジェクトは折りたたみ・展開可能 色を変更可能 (green / orange / red / blue / purple / gray) ray("It's green")->green(); 13

Slide 14

Slide 14 text

PhpStorm と連携 ログのファイル名をクリックするとPhpStorm で該当ファイル・該 当行を開いてくれる 便利 14

Slide 15

Slide 15 text

仕組み 15

Slide 16

Slide 16 text

シンプル Ray アプリがポート23517 番で待ち受け ~ > lsof -i:23517 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Ray 45800 ******* 50u IPv6 0xd2f89e7cd65af8a 0t0 TCP *:23517 (LISTEN) プログラムからlocalhost:23517 にPOST curl_exec($curlHandle); https://github.com/spatie/ray/blob/441f904ae89e825a18d11e2e5 819a60a1c7e632a/src/Client.php#L84 16

Slide 17

Slide 17 text

つまりコンテナを使った開発では そのままだとホスト側のアプリに繋がらない 設定ファイル(ray.php) でPOST 先を切り替える必要あり return [ 'host' => 'host.docker.internal', 'port' => 23517, 'remote_path' => null, 'local_path' => null, ]; https://myray.app/docs/environments/docker 17

Slide 18

Slide 18 text

適切な形式でPOST さえすればログ出力可能 { "uuid": "ca539a10-bfd5-3e5a-6271-0c4a95612132", "payloads": [ { "type": "custom", "content": { "content": "hello world!", "label": "HTML" }, "origin": { "function_name": "test", "file": "/home/user/projects/test-project/test.php", "line_number": 16, "hostname": "my-hostname" } } ], "meta": { "php_version": "7.4.16", "php_version_id": 70416, "ray_package_version": "1.20.1.0" } } https://myray.app/docs/developing-ray-libraries/payload 18

Slide 19

Slide 19 text

便利な機能 19

Slide 20

Slide 20 text

表示を見やすくするしてくれる機能 指定形式の文字列を配列同等の折りたたみ表示に ray()->json('JSON形式の文字列') ray()->xml('XML形式の文字列') ray()->carbon(Carbonインスタンス) 20

Slide 21

Slide 21 text

デバッグ時に便利な機能 ray()->backtrace() ray()->if(条件式)->text('ログ') 条件式がtrue の場合のみメソッドチェーンで繋げた処理が実行さ れる ray()->once('ログ') ループの最初の一回にログ出力を限定できる ray()->notify('通知メッセージ') デスクトップ通知 21

Slide 22

Slide 22 text

計測 ray()->measure(); // 何か重い処理 ray()->measure(); // 何か重い処理 ray()->measure(); 22

Slide 23

Slide 23 text

まとめ Ray を使うとデバッグログをデスクトップアプリから見やすい形式 で確認できるようになる 色々便利な機能はあるが、シンプルに ray() 関数を使うだけでも十 分便利 PHP で開発する際のデバッグツールの選択肢に加えてみるのもアリ ではないでしょうか 23

Slide 24

Slide 24 text

ご清聴ありがとうございました 24

Slide 25

Slide 25 text

補足 (ray 関数の削除忘れ防止) ray() を削除するRector のカスタムルール https://myray.app/docs/php/vanilla-php/automatically-remove- ray-calls ray() の削除忘れ検知 PHPStan https://myray.app/docs/php/vanilla-php/phpstan 検知用公式パッケージ https://myray.app/docs/php/vanilla-php/x-ray 25

Slide 26

Slide 26 text

補足 ( リモートサーバーから使う場合) SSH 接続情報を設定すれば使用可能 https://myray.app/docs/environments/remote 26

Slide 27

Slide 27 text

補足 (WSL から使う場合) 下記①〜③のいずれかの方法で使用可能(公式推奨は①・②) Windows に特定のIP を設定した上でRay の通信先に設定 ① 固定IP を振る ② DHCP Reservation を設定 ③都度都度Windows のIP アドレスを設定 https://myray.app/docs/environments/windows#wsl2 27