0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

0
Posted at

はじめに

こんにちは!
プログラミングスクール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()の違い

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
  • リクエストの流れを追いたい → dump() / dd()
  • 特定の箇所で止めてじっくり確認したい → dd()

最後に

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

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


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


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

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?