「php artisan tinkerと入力すればいいのは知っているけれど、終了方法やエラー時の対処、実務での活用法までは分からない」——Laravel Tinkerで検索する人の多くは、この段階でつまずいています。本記事では、Laravel 13環境で実際にTinkerを動かしながら検証した結果をもとに、起動・終了方法から、Eloquentモデルの操作、非対話実行、設定ファイルのカスタマイズ、つまずきやすいポイントまでを一通り解説します。
Laravel Tinkerとは
Laravel Tinkerは、PHPのREPL(Read-Eval-Print Loop)ツールであるPsySHをベースにした、Laravelアプリケーション専用の対話型シェルです。ターミナル上でPHPのコードを1行ずつ入力しながら、その場で実行結果を確認できます。
実際にLaravel 13で新規プロジェクトを作成してcomposer.jsonを確認すると、laravel/tinkerは最初から依存パッケージに含まれており、追加のインストール作業なしにすぐ使えることが確認できます。ルーティングや設定を変更せず、既存のEloquentモデルやヘルパー関数、Facadeにそのままアクセスできる点が、Tinkerの最大の特徴です。
Tinkerの起動方法と終了方法
起動方法
Laravelプロジェクトのルートディレクトリで、以下のコマンドを実行します。
php artisan tinker
起動すると、Psy Shellのバージョン情報とともにプロンプト(>)が表示され、対話モードに入ります。
終了方法
Tinkerを終了する方法は3通りあります。実際にプロンプトへexitと入力すると、以下のようにGoodbye.と表示されてシェルが終了します(終了コード0)。
> exit
INFO Goodbye.
| 方法 | 入力内容 | 備考 |
|---|---|---|
| コマンド入力 | exit |
検証済み。Goodbye.と表示され終了 |
| コマンド入力 | quit |
検証済み。exitと同じ挙動 |
| キー操作 | Ctrl + D | 入力のEOF(終端)としてシェルを終了 |
Eloquentモデルを操作する
Tinkerの主な用途は、Eloquentモデルを介したデータベース操作です。ここではUserモデルを例に、作成・取得・更新・削除の一連の流れを、実際にコマンドを実行して確認します。Eloquentモデルの基本仕様についてはLaravel Eloquentとは?使い方の基本からリレーション・クエリビルダとの違いまで徹底解説で詳しく解説しています。
レコードの作成
テスト用データを1件作成する場合、Factoryを組み合わせるのが手早い方法です。
$user = App\Models\User::factory()->create([
'name' => 'Tinker Taro',
'email' => 'tinker@example.com',
]);
$user->id;
// => 1
Factoryを使った柔軟なテストデータ生成についてはLaravel Factoryの基礎から応用まで:効率的なテストデータ生成方法を参照してください。まとまったデータを一括投入したい場合は、後述の「Tinker内からArtisanコマンドを呼び出す」でSeederを実行する方法も紹介します。
レコードの取得・検索
$user = App\Models\User::find(1);
$user->name;
// => "Tinker Taro"
App\Models\User::pluck('name');
// => Illuminate\Support\Collection {#... all: [ "Tinker Taro" ] }
モデル名を都度フルネームで書くのが面倒な場合、Tinkerはクラスを一度参照すると自動でエイリアスを設定してくれます。実際にUser::first()のように短縮形で呼び出すと、次のメッセージがコンソールに表示され、以降はそのセッション内でApp\Models\Userとして解決されるようになります。
> User::first();
[!] Aliasing 'User' to 'App\Models\User' for this Tinker session.
レコードの更新
$user = App\Models\User::find(1);
$user->name = 'Updated Taro';
$user->save();
$user->name;
// => "Updated Taro"
レコードの削除
$user = App\Models\User::find(1);
$user->delete();
App\Models\User::count();
// => 0
ヘルパー関数・Facadeをその場で試す
TinkerではEloquentモデルだけでなく、Laravelのヘルパー関数やFacadeもそのまま呼び出せます。設定値の確認や日時処理、コレクション操作の動作確認に便利です。
config('app.name');
// => "Laravel"
now();
// => Illuminate\Support\Carbon @... {#...}
collect(['a', 'b', 'c'])->implode(',');
// => "a,b,c"
本番相当の値を見ながら挙動を確認したいケースでは、dd()やdump()と組み合わせるとさらに効率が上がります。ダンプ関数の使い分けはLaravelのdd関数を活用してデバッグを効率化する方法とその実例で解説しています。Tinker上でdump()を実行すると、変数の内容に加えて評価元コードの行番号(ExecutionClosure.phpのeval行)も一緒に出力されます。
Tinker内からArtisanコマンドを呼び出す
Tinkerのソースコード(TinkerCommand.php)を確認すると、次のArtisanコマンドはコマンド名をそのまま入力するだけで実行できるホワイトリストとして定義されています。
clear-compiled, down, env, inspire, migrate, migrate:install, optimize, up
たとえば、Tinkerを開いたままmigrateとだけ入力すればマイグレーションを実行できます。上記以外のArtisanコマンドは、Artisanファサード経由で呼び出します。
Illuminate\Support\Facades\Artisan::call('db:seed', ['--class' => 'DatabaseSeeder']);
echo Artisan::output();
Seederの使い分けについてはLaravel Seeder 実行方法まとめ|初心者向けに基本コマンドから使い分けまで解説を参照してください。artisan tinkerを含むArtisanコマンド全体の一覧はLaravelのArtisanコマンド徹底解説|最速チートシート&現場ノウハウにまとめています。
非対話でTinkerを実行する:–executeオプション
Tinkerは対話シェルとしてだけでなく、--executeオプションを使うことで1回限りのコード実行にも使えます。デプロイ後の確認作業や、CIでのちょっとした検証を自動化したい場合に有効です。
php artisan tinker --execute="echo App\Models\User::count();"
実際にこのコマンドを実行すると、対話シェルを起動せずに結果だけが標準出力に返ります。シェルスクリプトやデプロイフローに組み込みやすく、対話モードよりも事故が起きにくいという利点もあります。
config/tinker.phpでTinkerの挙動をカスタマイズする
Tinkerの設定は、Laravel本体には含まれておらず、laravel/tinkerパッケージ内のconfig/tinker.phpで定義されています。プロジェクトに公開したい場合は、以下のコマンドで発行できます。
php artisan vendor:publish --provider="Laravel\Tinker\TinkerServiceProvider"
設定できる主な項目は次の3つです。
| 項目 | 役割 |
|---|---|
commands |
Tinker内でコマンド名だけで実行できる独自Artisanコマンドを追加する |
alias / dont_alias |
vendor名前空間のクラスを自動エイリアス対象に含める・除外する(既定ではApp\Novaが除外対象) |
trust_project |
PsySHが表示する「untrusted project」警告の扱いを制御する。既定値はalwaysで、環境変数TINKER_TRUST_PROJECTからも上書きできる |
つまずきやすいポイント
コードを編集してもTinkerに反映されない
Tinkerを起動したまま、別ウィンドウでモデルやクラスを編集しても、そのセッションには反映されません。Tinkerはプロセス起動時にオートローダーを読み込むため、コードを変更した後は一度exitで終了し、php artisan tinkerで起動し直す必要があります。
本番環境では使わない
Tinkerは開発・検証用のツールであり、本番環境での常用は推奨されていません。データベースの直接操作は取り消しが効かず、意図しないレコードの削除や更新が本番データに直接反映されるリスクがあるためです。動作確認は必ずローカルやステージング環境で行い、本番での一時的な調査に限定して使う場合も操作内容を事前に精査してください。
入力履歴の場所
Tinkerで入力したコードはPsySHの履歴ファイルに保存され、上矢印キーで過去の入力を呼び出せます。検証環境(Linux)では~/.config/psysh/psysh_historyに保存されていることを確認しました。保存先はOSやPsySHのバージョンによって異なる場合があります。
まとめ
Laravel Tinkerは、php artisan tinkerで起動しexit/quit/Ctrl+Dで終了する、Laravel標準同梱のREPLです。Eloquentモデルの作成・取得・更新・削除をコマンド一つで試せるほか、--executeオプションによる非対話実行や、config/tinker.phpでのエイリアス・信頼設定のカスタマイズにも対応しています。日々のデバッグやデータ確認はもちろん、コードを本実装に組み込む前の「試し打ち」の場として活用してください。

コメント