🐈

【Laravel初心者向け】エラーをAIに聞く前に!Tinkerで自分で原因を探る方法

に公開
2026/02/03

はじめに

こんにちは!
現在、プログラミングスクールSiiDにて、Laravel学習中の駆け出しエンジニアです。

Laravelを学び始めた頃、エラーが出ると
「とりあえずAIにコードを貼って、動いたらOK」
という対応をしていました。

確かに動きますが、なぜ直ったのかが分からないまま進んでしまい、後から同じようなエラーで何度も詰まります。

この記事では、エラーを“当てずっぽう”で直すのではなく、
自分で原因を確認しながら解決する方法として、Tinkerの使い方を紹介します!
同時に、他のデバック手法も解説してるのでぜひ参考にしてみてください!

この記事の対象者

  • LaravelでCRUDがなんとなくわかる人
  • エラーが出るたびにChatGPTに全部貼ってる
  • もっと自分でデバッグできるようになりたい

この記事で学べる内容

✅ Laravel Tinkerの基本的な使い方
✅ エラー発生時の効率的なデバッグ手順
✅ dd(), dump(), Tinkerの違いと使い分け
✅ エラー発生時の効率的なデバッグ手順
✅ データベースの内容を素早く確認する方法

Tinkerとは?

Laravelのアプリケーションを、CLI上で対話的に操作・確認できるREPLツールです。

ターミナル上でコマンドを実行しながら、モデル・データなどを即座に確認できます。

例えば
「このユーザー、本当にデータベースにいる?」
「リレーション、ちゃんと動いてる?」

このような疑問をAIに聞く前に自分で確認できます。
ターミナルでコマンドを入力するだけで、即座に結果が確認できます。

こんな時はまずTinker☝️

  • 画面に表示されないがエラーは出ていない
  • null エラーが出ている
  • リレーション先が取れない
  • 想定より件数が少ない / 多い

具体的な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: []
  ...(大量のデバッグ情報が続く)
}

さらに面倒なこと

「全件データも見たいな...」
→ またControllerを修正

dd(Todo::all()); // ← 書き換え

→ ブラウザで再送信
→ 確認
→ またdd()削除
→ テスト...

この繰り返し!


⭕️ Tinkerでの確認方法

Tinkerを起動

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だけでなく、dd()やdump()もそれぞれ得意な場面があります。

確認したいこと ツール 特徴
DBのデータ状態 Tinker アプリに影響なし、対話的に確認
処理の途中経過 dump() 出力後も処理が続く
特定箇所で止めて確認 dd() そこで処理が止まる

個人的なデバック手順

  1. どの層の問題か切り分ける
    • View?
    • Controller?
    • Model?
    • DB?
  2. DB・モデルが怪しければ Tinker
  3. リクエスト・分岐確認なら dump()
  4. そこで止めたいなら dd()

エラー文は読んでくださいね!!

dd()とdump()の違い

dump()の場合 - 出力後も処理が続く
public function store(Request $request) {
    dump($request->all());  // ← 表示される
    
    $todo = Todo::create(['title' => $request->title]);
    
    return redirect()->route('todos.index');  // ← 実行される
}
dd()の場合 - そこで処理が止まる
public function store(Request $request) {
    dd($request->all());  // ← 表示されて、ここで終了
    
    $todo = Todo::create(['title' => $request->title]);  // ← 実行されない
    
    return redirect()->route('todos.index');  // ← 実行されない
}

最後に

エラーの種類にもよりますが、データの有無やリレーションの状態を確認したい場面では、Tinkerは非常に有効です!

エラー調査の手段として、dd()だけに頼らず、Tinkerも選択肢の一つとして活用してみてください!


今回のようなデバッグスキルをもっと体系的に学びたい方は、プログラミングスクールSiiDもチェックしてみてください。実務を意識したカリキュラムと、活発なコミュニティで学習をサポートしています!


最後までお読みいただき、ありがとうございました。

Discussion