今年最後の投稿です。まだまだ投稿のネタはたくさんあります。来年も楽しみに!

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
こんな便利なツールを開発してくれて、ありがとう!

By khino