tinker好きの私としては、嬉しいニュースです。今までコンソールからでしか使用できなかったtinkerがブラウザでアクセスできるようになりました。と言っても、Laravelのパッケージの一部ではなく、Laravelのtinkerにフロントエンドを追加したphpのパッケージ、Web Tinkerのことです。

インストール

まず、パッケージのレポは以下のGitHubです。

https://github.com/spatie/laravel-web-tinker

これによると、まずcomposerの実行です。–devのオプションが必要なことに注意してください。ウェブからのアクセスが可能なので、これなしではproduction版でアクセスされて、セキュリティの問題となります。

$ composer require spatie/laravel-web-tinker --dev

次に、以下の実行でWeb Tinkerのアセットをpublic/vendor/web-tinkerのディレクトリにインストールします。

$ php artisan web-tinker:install

フロントエンド

早速、ブラウザからアクセスしてみましょう。url + ‘/tinker’でアクセスできます。

実行には、cmd+enter あるいは ctrl+enterとあります。コンソール版のtinkerとは違って、1行タイプしてenterで実行とはいかないようです。

とりあえず、以下のように実行してみました。

結果が右パネルに出ましたね。

しかし、以下のように2行タイプすると、右パネルがクリアされて最後の行の結果のみが出力されます。

コンソール版のtinkerと違い、実行の ctrl+enterを押すと、画面に入力したコードすべて(複数行あっても)が実行されるようです。たとえ最初の1行目にカーソルを持っていき実行しても同じ結果です。これは、複雑なコードのテストには理想かもしれません。例えば、以前に掲載した複雑なコードは、コンソール版にtinkerでは以下のように1行1行タイプ実行していきます。8行目のファクトリーの実行では長い1行となっているので、括弧の数など間違わないように注意が必要です。

$ php artisan tinker
sy Shell v0.9.9 (PHP 7.2.16 — cli) by Justin Hileman
>>> use App\User;
>>> use App\Address;
>>> User::truncate();
>>> Address::truncate();
=> Illuminate\Database\Eloquent\Builder {#2974}
>>> factory(App\User::class)->create()->each(function ($user) { $user->addresses()->saveMany(factory(App\Address::class, 2)->make()); });
=> true
...

しかし、Web Tinkerでは、以下のように直接プログラムからのチャンクのコードをコピペしてそのまま実行できます。

これは便利です。

それから、コンソール版と比べて、毎回の実行において環境がリロードされるので、コンソール版のように、プログラム変更するたびに、exitして再度php artisan tinkerする必要がないのもプラスです。

マイナーなマイナスの面では、編集にemacsのキー、つまり、control + a(行先頭へ移動)、control + e (行末へ移動)などが使えないことです。私(だけ?)にとっては少し残念なことです。コンソール版ではそれらのキーは重宝しています。

結論としては、コンソール版のtinkerを捨てて、このウェブ版のtinkerに乗り換えることはできませんが、目的によって使い分けをすれば十分パワフルなツールとして使えそうです。

By khino