【vscodeスニペット】LaravelでAPIを実装する時のデバッグ方法


laravelでのデバッグといえばdd()が有名ですね!
が、コントローラがAPIの場合には、dd()を使っても画面上に情報を表示させることができません。

ではどうすればいいのかというと、ログ出力を使って情報を出力させます。

APIを使ってない方でも、ログならばデバッグ情報が残るので、dd()との使い分けとして知っておくといいかも!

Logファサードの基本

エイリアス登録

laravelのプロジェクトフォルダ内部「src/config/app.php」を開きます。
aliasesという箇所にLogが登録されているのをチェックしましょう。

config/app.php
'aliases' => [
'Log' => Illuminate\Support\Facades\Log::class,
]

ファイル内でLogを呼び出す

呼び出す方法はuseを使う方法と\(バックスラッシュ)を使う方法の2つです。
どちらにしろ、グローバル空間から呼び出すことに違いはありません。

HogeController.php
use Log;
\Log::info();

使うならどちらか一方を使う方が、統一感があっていいですね!

ログの出力場所

config/loggin.phpをチェックしましょう。

    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['daily'],
            'ignore_exceptions' => false,
        ],

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
        ],

デフォルトでは↑のようになっていて、src/storage/logsの中にlaravel.logが生成・更新されます。

スニペット

これから紹介するメソッドをスニペットにしておきました。
ユーザースニペット(php.json)にコピペするだけで、すぐに使えます。

php.json
    "引数の表示": {
        "prefix" : "log-args",
        "body" : [
            "Log::info('${1:value}の中身' . $1);",
        ],
        "description": "expose to args content also can use typeof array"
    },
    "配列の表示": {
        "prefix" : "log-array",
        "body" : [
            "Log::info('${1:array}の中身' . print_r(\\$$1, true));",
        ],
        "description": "expose to arg content also can use typeof array"
    },
    "型の判定": {
        "prefix" : "log-type",
        "body" : [
            "Log::info('type of \\$${1:value}' . gettype(\\$$1));",
        ],
        "description": "expose to type"
    },
    "クラスの判定": {
        "prefix" : "log-class",
        "body" : [
            "Log::info('class of \\$${1:value}' . get_class(\\$${1}));",
        ],
        "description": "expose to arg class"
    },

Logを使う

スニペット

1.引数を表示する

Log::info('引数の中身' . $value);

2.引数(配列)を表示する

1だと、配列などの中身は表示できません。
そんな時はprint_rを使いましょう。

Log::info('valueの中身' . print_r($value, true));

3.型を判定する

gettype

Log::info('valueの中身' . gettype($value));

リクエスト情報の型を判定するのに使うことが多いです。

4.クラスを判定する

get_class

Log::info('valueの中身' . get_class($value));

タイプヒンティングでクラスを固めている場合は使うことが多いかも。

print_r 以外に使える関数

PHP自体に馴染みのある方はvar_dumpが馴染み深いと思います。
・・・が、var_dumpは戻り値がないため、Log::info()しても中身が表示できません!

print_rの代用としては、var_exportを使うのもアリですね。

まとめ

Logを使うとAPI含めてバックエンドのデバッグができるよ。
調べたい値に応じてPHP組み込み関数と組み合わせて使おう!