DB操作が楽になる【 Laravelのtinkerについて 】

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が返ってきました。

PHPではコードの最後に ; (セミコロン)を入力するのがお決まりですが、tinkerの場合はセミコロンを省略できます。
tinkerを終了する場合は exit と打てば元のターミナルの画面に戻ります。
>>> 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への値保存や関数のチェック、動作確認まで行うことができます。覚えるとすぐに使いこなせるようになるので是非使用してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

よーすけのアバター よーすけ プログラマー

2022年4月 大阪自社開発会社入社
使用言語:JavaScript / PHP / Laravel / Vue.js / (WordPress)
勉強中:React / Next.js / TypeScript

Web制作実績:6件
デザインからコーディング、運用まで幅広く行います
ご依頼はお問い合わせフォームからお願いします。

コメント

コメント一覧 (2件)

  • こんにちは、初めてコメントします。

    HogeControllerのhoge静的メソッドを実行する例が挙げられていますが、コントローラで静的メソッドを実装することは極めて稀な例だと思います。

    コントローラではコンストラクタインジェクションしたり、Requestクラスを引数にすることも多いのでその辺りの実行例もあるとより親切だなと思いました。

    • コメントありがとうございます。
      確かにRequestクラスを引数に、などの方が実例で分かりやすいですね。
      また修正します、ありがとうございます。

コメントする

目次