[Laravel]tinker(psysh)を使ってみた

Laravel

laravel tinkerを触ってみたので、tinker(psysh)について書いてみました。
laravel tinkerはpsyshを搭載したもので同じものじゃないかなと思います。

laravel tinker(psysh)とは

起動すると、コンソールからphpコードを入力出来るようになり、結果が即時返ってきます。

こういうアプリケーションはREPL(レプル)と呼ばれているようです。

REPLはプログラムを入力して、結果が返ってきて、また入力して。。
というループを行うのでこう呼ばれているようです。

wiki =>
REPL (Read-Eval-Print Loop) とは、入力・評価・出力のループのこと。

起動方法

laravelのあるディレクトリでartisanコマンドを使って起動します。

php artisan tinker 

tinkerを使う

helpを打つとコマンドリストがつらつら表示されます。
基本的な使い方と、よく使いそうなコマンドを下記に載せてます。

計算してみる

echoでも

>>> echo 100+11
111⏎
>>> echo 100+11+12+12
135⏎
>>> echo 100+11*10
210⏎

直接でも結果が返ってきますね。

>>> 100 + 11
=> 111
>>> 20 / 3
=> 6.6666666666667
>>> 10 * 10
=> 100

標準関数を使ってみる

途中まで、タイプしてtabキーを押すと補完してくれます。
結果が簡単に確認できますね。

>>> str_shuffle("123abc")                                                                                                                                                
=> "a21c3b"

laravelで使われているクラスを使ってみる

プロジェクトで使っているクラスも使用して、挙動を確認することができます。

>>> $carbon = new Carbon\Carbon();
=> Carbon\Carbon @1591950070 {#4130
     date: 2020-06-12 17:21:10.659105 Asia/Tokyo (+09:00),
     timezone_type: 3,
     timezone: "Asia/Tokyo",
   }
>>> $carbon->now()->format("Y/m/d");
=> "2020/06/12"

自作関数を書く

「{」を入力すると、次の行を書くモードに移行して
閉じるまで続いて入力できます。

>>> function hello() {
... 
... for ($i = 0; $i < 10; $i++) {
... echo "hello{$i}\n";
... }
... }
>>> hello()
hello0
hello1
hello2
hello3
hello4
hello5
hello6
hello7
hello8
hello9

docコマンド

docコマンドを使うと、標準関数やプロジェクトに入れているライブラリのクラス、プロパティなどの説明を確認できます。

使う前の設定として、
こちらでマニュアルを落として、~/.local/share/psysh/配下に配置しておきます。

標準関数(str_replace)を確認

>>> doc str_replace 
function str_replace($search, $replace, $subject, &$replace_count = unknown)

Description:
  検索文字列に一致したすべての文字列を置換する

// --- 省略 ---

laravelに入っているCarbonクラスを確認

>>> doc Carbon\Carbon
class Carbon\Carbon extends DateTime implements Carbon\CarbonInterface, DateTimeInterface, JsonSerializable

Description:
  A simple API extension for DateTime.

// --- 省略 ---

historyコマンド

つらつらと使ったコマンドが表示されます。
画面一杯になった時は、Enterで進めて:qで抜けれます。

>>> history
  0: Carbon::now()->addMonth()->endOfMonth()
  1: Carbon::now()->addMonth()->endOfMonth();
  2: Carbon

historyの最後から5件表示する場合は–tailを使います。

>>> history --tail 5
136: history --show
137: history -S
138: history 
139: help history
140: history --replay

historyの前方から5件表示する場合は–headを使います。

>>> history --head 5
0: Carbon::now()->addMonth()->endOfMonth()
1: Carbon::now()->addMonth()->endOfMonth();
2: Carbon
3: Carbon::now()->addMonth()->endOfMonth();
4: Carbon\Carbon::now()->addMonth()->endOfMonth();

historyから再度コマンドを実行するには–showで指定した後に、
–replayを使います。

>>> history --show 4 --replay
Replaying 1 line of history
-->  Carbon\Carbon::now()->addMonth()->endOfMonth();
=> Carbon\Carbon @1596207599 {#4138
     date: 2020-07-31 23:59:59.999999 Asia/Tokyo (+09:00),
     timezone_type: 3,
     timezone: "Asia/Tokyo",

psyshを使う

laravel入れてない場合で、使いたい場合はpsyshを入れるといいです。

インストールする

wgetで取ってこれます!

wget https://psysh.org/psysh
chmod +x psysh
./psysh

使い方やコマンドは上記まで記載してきた、php artisan tinkerと変わらないです。

おわりに

便利ですね!
test.phpとかテストファイルを作って実行しなくても、簡単なことならここで確認できそうです。

あとdocコマンドがあるおかげで、マニュアルをググることが減りそうですね。
何か気づいたことがあれば記事を更新して行こうと思います。

コメント

タイトルとURLをコピーしました