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に乗り換えることはできませんが、目的によって使い分けをすれば十分パワフルなツールとして使えそうです。
メルマガ購読の申し込みはこちらから。