【Laravel】Laravel tinkerを使ったら開発が快適になった話

2021年6月25日

こんにちは。

Laravel開発にtinkerを取り入れたら少し快適になったので、おすすめの使い方を紹介しようと思います。まだ使ってない方の参考になれば幸いです。

Laravel tinkerとは

Laravelに標準で搭載されている対話型のコンソールです。Laravelプロジェクトで定義したモデルや関数をコンソール上から手軽に実行することができます。

この手の実行環境はREPLと呼ばれています。REPLとはRead-Eval-Print Loopの略称です。コンソールで打ち込んだコードを読み込み(Read)、その場で即時評価・実行(Eval)、結果を標準出力に表示(Print)を繰り返します。(Loop)

使い方

Laravelプロジェクトフォルダ直下でphp artisan tinkerコマンドを実行します。

php artisan tinker

tinkerが起動されプロンプトが表示されます。

Psy Shell v0.10.8 (PHP 7.3.27-1~deb10u1 — cli) by Justin Hileman
>>>

まずは何かphpのコードを実行してみましょう。echo関数を試してみます。

>>> echo('hello');
hello⏎

入力したコマンドの結果が表示されました。

次に変数に値を入れてみます。

>>> $hello = 'world';
=> "world"

代入した値が結果として表示されます。

次にLaravelのコードを呼び出してみましょう。日付操作でおなじみのCarbonを使用してみます。

>>> Carbon\Carbon::now();
=> Carbon\Carbon @1622869129 {#3404
     date: 2021-06-05 04:58:49.710927 UTC (+00:00),
   }

Carbon::now()の実行結果が表示されました。関数を実行した場合は戻り値が表示されます。

Tinkerの使いどころ

機能の確認

tinkerの利点は気軽にLaravelのコードを実行できることです。導入を検討しているLaravelの機能や、サードパーティ製のモジュールがどのような動きをするのかをtinkerで手軽に確認することができます。

機能を確認するためには、テスト用のRouterやControllerを一時的に作成する必要がありましたが、tinkerを使うことでそれらの作業をなくすことができます。

デバッグ

デバッグ時に使用するのは本当におすすめです。なにか独自のクラスや関数を作成した時に手軽にテストをすることができます。前述のようにRouterやControllerを作成する手間を省けるので相当快適です。

試しにLaravel内にサンプルでクラスを作り、tinkerから呼び出してみました。helloという文字列を返すだけの簡単な関数です。

<?php

namespace App\Utils;

class Hello
{
    public static function sayHello()
    {
        return 'hello';
    }
}
>>> App\Utils\Hello::sayHello();
=> "hello"

無事にhelloが返されることを確認できました。

tinkerを使用しない場合は、Router,Controllerを作ってブラウザやhttpクライアントソフトから呼び出す必要があります。また、関数の戻り値を確認するにはログを出力する必要もあるでしょう。

これだけの手間を省くことができるのは開発者にとってはかなり魅力的だと思います。まだ使用していない方は是非とも日々の開発に取り入れることをオススメします。

Laravel

Posted by kobainmac