はじめに
こんにちは!
プログラミングスクールSiiDでLaravel学習中です。
開発中に気づいたことを共有していきます!
Laravelを学び始めた頃、エラーが出ると
「とりあえずAIにコードを貼って、動いたらOK」
という対応をしていました。
確かに動きますが、なぜ直ったのかが分からないまま進んでしまい、後から同じようなエラーで何度も詰まります。
この記事では、エラーを"当てずっぽう"で直すのではなく、
自分で原因を確認しながら解決する方法として、Tinkerの使い方を紹介します!
この記事の対象者
- LaravelでCRUDがなんとなくわかる人
- エラーが出るたびにChatGPTに全部貼ってる
- もっと自分でデバッグできるようになりたい
この記事で学べる内容
✅ Laravel Tinkerの基本的な使い方
✅ dd(), dump(), Tinkerの違いと使い分け
✅ エラー発生時の効率的なデバッグ手順
✅ データベースの内容を素早く確認する方法
Tinkerとは?
Laravelのアプリケーションを、CLI上で対話的に操作・確認できるREPLツールです。
ターミナル上でコマンドを実行しながら、モデル・データなどを即座に確認できます。
例えば
「このユーザー、本当にデータベースにいる?」
「リレーション、ちゃんと動いてる?」
このような疑問をAIに聞く前に自分で確認できます。
ターミナルでコマンドを入力するだけで、即座に結果が確認できます。
具体的なTinkerありとなしでの比較
状況:Todoリスト作成中
Aさん:「Todo登録したのに、画面に何も表示されない!」
「もしかして、データがデータベースに保存されてないかも...」
❌ Tinkerなしの確認方法
Controllerを編集
public function store(Request $request) {
$todo = Todo::create([
'title' => $request->title
]);
dd($todo); // ← 確認用に追加
return redirect()->route('todos.index'); // ← ここには到達しない
}
フォームから「買い物」を登録してみると...
ブラウザに突然こんな画面が表示されます:
App\Models\Todo {#1234 ▼
#attributes: array:5 [▼
"id" => 1
"title" => "買い物"
"completed" => 0
"created_at" => "2024-12-23 10:00:00"
"updated_at" => "2024-12-23 10:00:00"
]
#original: array:5 [▶]
#changes: []
#casts: []
#classCastCache: []
...(大量のデバッグ情報が続く)
}
dd()を使うとこうなる
- ✅ データは確認できる(登録はされている)
- ❌ でも画面が真っ白のデバッグ表示で止まる
- ❌ Todoリスト画面には戻れない(リダイレクトされない)
さらに面倒なこと
「全件データも見たいな...」
→ またControllerを修正
dd(Todo::all()); // ← 書き換え
→ ブラウザで再送信
→ 確認
→ またdd()削除
→ テスト...
この繰り返し!
⭕️ Tinkerでの確認方法
Tinkerを起動
php artisan tinker
Docker環境の方へ
Laravel Sailを使っている場合は以下のコマンドを使ってください:
./vendor/bin/sail artisan tinker
それ以外のDockerの場合:
docker-compose exec app php artisan tinker
起動したら、データを確認:
>>> Todo::all()
=> Illuminate\Database\Eloquent\Collection {#4820
all: [
App\Models\Todo {#4821
id: 1,
title: "買い物",
completed: 0,
},
],
}
「データあるな。じゃあ件数も見たい」
>>> Todo::count()
=> 1
「最新のデータだけ見たい」
>>> Todo::latest()->first()
=> App\Models\Todo {#4825
id: 1,
title: "買い物",
completed: 0,
}
Tinkerの良いところ
- ✅ ブラウザは普通に動く(アプリに影響なし)
- ✅ コード修正不要
- ✅ 結果を見ながら次々確認できる
- ✅ Controllerはクリーンなまま
デバッグツールの使い分け
Tinkerだけでなく、dd()やdump()もそれぞれ得意な場面があります。
| 確認したいこと | ツール | 特徴 |
|---|---|---|
| DBのデータ状態 | Tinker | アプリに影響なし、対話的に確認 |
| 処理の途中経過 | dump() | 出力後も処理が続く |
| 特定箇所で止めて確認 | dd() | そこで処理が止まる |
dd()とdump()の違い
public function store(Request $request) {
dump($request->all()); // ← 表示される
$todo = Todo::create(['title' => $request->title]);
return redirect()->route('todos.index'); // ← 実行される
}
public function store(Request $request) {
dd($request->all()); // ← 表示されて、ここで終了
$todo = Todo::create(['title' => $request->title]); // ← 実行されない
return redirect()->route('todos.index'); // ← 実行されない
}
使い分けのポイント
- データの状態を確認したい → Tinker
- リクエストの流れを追いたい → dump() / dd()
- 特定の箇所で止めてじっくり確認したい → dd()
最後に
エラーの種類にもよりますが、データの有無やリレーションの状態を確認したい場面では、Tinkerは非常に有効です!
エラー調査の手段として、dd()だけに頼らず、Tinkerも選択肢の一つとして活用してみてください!
今回のようなデバッグスキルをもっと体系的に学びたい方は、プログラミングスクールSiiDもチェックしてみてください。実務を意識したカリキュラムと、活発なコミュニティで学習をサポートしています!
最後までお読みいただき、ありがとうございました。