今年最後の投稿です。まだまだ投稿のネタはたくさんあります。来年も楽しみに!
tinkerに関しては、以前に紹介していますが、私には現在もなくてはならないコマンドラインツール。
このツール、実は機能が豊富にあるということ最近気づきました。ますます好きになりました。
私がtinkerを利用する一番の理由は、Laravelの知らない、あるいは正確なシンタックスを覚えていないメソッドをテストしたいときです。dd()
入れてブラウザで実行して結果をチェックするのは面倒、unit testを書くには大袈裟なとき、tinkerが一番です。
例えば、以下pluck
の関数のパラメータ、どっちが配列のインデックスになるのだっけ? all()のコールは必要だっけ? ・・というときに。
$ php artisan tinker Psy Shell v0.8.11 (PHP 7.0.23 — cli) by Justin Hileman >>> use App\User; >>> User::all()->pluck('id', 'name'); => Illuminate\Support\Collection {#705 all: [ "kenji" => 1, "test" => 2, ], } >>> User::all()->pluck('name', 'id'); => Illuminate\Support\Collection {#703 all: [ 1 => "kenji", 2 => "test", ], } >>> User::pluck('name', 'id'); => Illuminate\Support\Collection {#705 all: [ 1 => "kenji", 2 => "test", ], } >>>
と、いちいちマニュアルをチェックすることなしに、まずは実行して試す。
実行した結果だけでなく、プログラム自体の表示も可能です。
>>> show User > 9| class User extends Authenticatable 10| { 11| use Notifiable; 12| use CanResetPassword; 13| 14| /** 15| * The attributes that are mass assignable. 16| * 17| * @var array 18| */ 19| protected $fillable = [ 20| 'name', 'email', 'password', 21| ]; 22| 23| /** 24| * The attributes that should be hidden for arrays. 25| * 26| * @var array 27| */ 28| protected $hidden = [ 29| 'password', 'remember_token', 30| ]; 31| }
クラス全体だけでなく、指定のメソッドのコード部分も。実際は以下の画像のように、綺麗な色付きで表示されるので読みやすいです。
bashのhistoryのように、今まで実行した履歴も閲覧可能です。
>>> hist 0: use App\User; 1: User::all()->pluck('id', 'name'); 2: User::all()->pluck('name', 'id'); 3: User::pluck('name', 'id');
hist
の結果は、とても長くなるので、一部だけを閲覧することも可能です。
>>> hist --show 1..3 0: use App\User; 1: User::all()->pluck('id', 'name'); 2: User::all()->pluck('name', 'id'); 3: User::pluck('name', 'id');
さらに、履歴を--replay
で再実行可能です。
>>> hist --show 2 --replay Replaying 1 line of history --> User::all()->pluck('name', 'id'); => Illuminate\Support\Collection {#708 all: [ 1 => "kenji", 2 => "test", ], }
hist
には、他にも–head、–tail、–grepのオプションがあります。
さらに、tinkerは、php関数のマニュアルも出力することも可能です。
まず、設定として、マニュアルをダウンロードします。ファイルは11MBのサイズです。
mkdir ~/.local/share/psysh cd ~/.local/share/psysh wget http://psysh.org/manual/ja/php_manual.sqlite
関数のマニュアルを表示するには、doc
を利用します。例えば、
>>> doc array_shift
とタイプすれば、
と日本語で表示してくれます。また、Laravelの関数では、クラスのパス名を指定すれば、
>>> doc \Illuminate\Http\Request::input public function input($key = null, $default = null) Description: Retrieve an input item from the request. Param: string $key string|array|null $default Return: string|array
と説明が見れます。
最後に、Laravelのtinkerは、以下のPsySHのラッパーです。
https://github.com/bobthecow/psysh
こんな便利なツールを開発してくれて、ありがとう!