DB操作が楽になる【 Laravelのtinkerについて 】
どーもこんにちはよーすけです。
今回は知っておくとデバックとDB操作がめちゃくちゃ楽になるLaravelの「tinker」機能について説明します!
そもそもtinkerとは
簡単にいうとLaravel用のREPL(Read-Eval-Print-Loop)のことです。
REPLとはコードを書くとすぐに計算が実行され結果が返ってくるという仕組みのことで、tinkerを用いることで対話的にプログラムを実行することができます。
自作関数やモデルの操作なども1行のコードで出来るので「この関数の返り値なんだっけ」や「楽してDBに値代入したい」などというときに役立ちます。
tinkerを使ってみる
説明だけだとまだ何が便利かが見えてこないので色々と使用例を出してみる。
ターミナルでLaravelで作成したプロジェクトへ cd コマンドで移動し以下のコマンドを実行してください。
php artisan tinker
入力した後に以下のような表示があれば成功です。
Psy Shell v0.10.8 (PHP 7.3.29 — cli) by Justin Hileman
>>>
これで無事にtinkerが使えるようになったので試しにechoしてみましょう
Psy Shell v0.10.8 (PHP 7.3.29 — cli) by Justin Hileman
>>> echo "hoge"
入力後にエンターを押すと
hoge
無事にhogeが返ってきました。
>>> exit
Exit: Goodbye
tinkerの使い所
ここまでtinkerの使い方を説明しましたが、実際にどういう場面で使えるのかを解説していきます。
① メソッドの返り値を簡単に調べられる
② DBへのデータ登録が簡単に出来る
③ 関数やメソッドの動作確認ができる
順を追って説明します。
① メソッドの返り値を簡単に調べられる
これは全員に当てはまることでは無いのかもしれませんが、僕はメソッドが返り値に配列を返すんだっけ?コレクションを返すんだっけ?となることがあります。そんな時にtinkerを使うと簡単に確認することができます。
例)HogeControllerのhogeメソッドの返り値が何かわからなくなった時の使い方
namespace App\Http\Controllers;
class HogeController extends Controller
{
public static function hoge(){
$hoge = [
"one",
"two",
"three",
"four",
"five",
];
return $hoge;
}
}
>>> App\Http\Controllers\HogeController::hoge()
上記のようにApp\Http\Controllers\コントローラー名::メソッド名()
と入力すると独自メソッドでも実行することができます。
以下実行結果です。
=> [
"one",
"two",
"three",
"four",
"five",
]
無事に宣言した通りの配列が返ってきました。今回のコントローラーは簡単すぎるのでtinkerを使うまでも無いと思いますがよりコントローラーが複雑になった時には1行コマンドを打つだけで簡単に中身を確認することができます。
今回は配列が返ってきましたが配列以外の表示のされ方も確認しておきます
【コレクションの時】
>>> collect(['りんご','バナナ', 'ブドウ'])
=> Illuminate\Support\Collection {#3543
all: [
'りんご',
'バナナ',
'ブドウ',
],
}
【連想配列の時】
>>> array ('apple' => 'りんご', 'banana' => 'バナナ', 'grape' => 'ブドウ')
=> [
'apple' => 'りんご',
'banana' => 'バナナ',
'grape' => 'ブドウ'
]
以上のように返り値を簡単に判別することができます。
② DBへのデータ登録が簡単に出来る
個人的に最も使っているのがこの機能。phpAdminなどを使わなくても簡単にDBに値を登録できます。特に管理者ページがあって管理者の登録をしなければならない時などにすごく役立ちます。
例)DBに新規顧客として名前、メールアドレス、パスワードを登録したい時。
>>$admin = new App\Models\Admin
>>$admin->name = 'hoge'
>>$admin->email = 'test@test.com'
>>$admin->password = password_hash("password", PASSWORD_DEFAULT)
>>$admin->save()
上記のように$adminに対象のモデルを設定しそれぞれの項目を指定することで登録できます。また、パスワードはpassword_hash("password", PASSWORD_DEFAULT)
を使うことによって暗号化することができます。
最後にsave()を入力しtrueと表示されたら登録完了です。
③ 関数やメソッドの動作確認ができる
自作関数やメソッドが意図した通りに動いているかチェックしたい時に使うことができます。
またライブラリのチェックなども簡単に行うことができるので、新しいライブラリを導入する場合やひさしぶり触るライブラリのテストや使用感などを簡単にテストすることができます。
まとめ
今回tinkerについて解説しました。
tinkerの魅力はなんといってもその手軽さ。コード1行でDBへの値保存や関数のチェック、動作確認まで行うことができます。覚えるとすぐに使いこなせるようになるので是非使用してみてください。
コメント
コメント一覧 (2件)
こんにちは、初めてコメントします。
HogeControllerのhoge静的メソッドを実行する例が挙げられていますが、コントローラで静的メソッドを実装することは極めて稀な例だと思います。
コントローラではコンストラクタインジェクションしたり、Requestクラスを引数にすることも多いのでその辺りの実行例もあるとより親切だなと思いました。
コメントありがとうございます。
確かにRequestクラスを引数に、などの方が実例で分かりやすいですね。
また修正します、ありがとうございます。