0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【簡易版】デバッグのやり方解説!

Last updated at Posted at 2025-08-20

この記事の対象

  • Rails 7 + Docker で開発している方
  • デバッグの進め方を整理したい初学者

環境

  • macOS
  • Rails 7.2.1
  • slim記法
  • Docker

概要

ここでは、自作アプリの削除機能が実行できなかったため、デバッグで解決を試みた例を紹介します。

発生した事象

  • 画面上に削除ボタンを設置
  • ボタンを押すと画面は更新されるが対象は削除されず
  • サーバーログを見るとRoutingErrorが発生していた

デバッグ手順

  1. まずログを追う
    docker compose logs -f web
    
    次に、削除ボタンを押すとログが流れるので「Started ...」から確認します。
  2. HTTPメソッドとパスを確認
    正常なら以下のように出るはずです。
    Started DELETE "/dogs/2" for 127.0.0.1
    Processing by DogsController#destroy as HTML
    Parameters: {"id"=>"2"}
    
    しかし今回のログはこうでした👇
    Started DELETE "/dogs.2?_method=delete" ...
    ActionController::RoutingError (No route matches [DELETE] "/dogs.2")
    
    本来 /dogs/2 になるはずが /dogs.2 になってしまっている!
  3. ビューのリンク記述を確認
    実際のコード:
    = link_to "削除", dogs_path(@dog),
    data: { turbo_method: :delete, turbo_confirm: "本当に削除しますか?" }
    
    DELETE機能で「dogs」としているのが原因でした。対象は一つのハズです!
  4. 修正
    正しくは単数系の dog_path(@dog) を使います。
    = link_to "削除", dog_path(@dog),
    data: { turbo_method: :delete, turbo_confirm: "本当に削除しますか?" },
    class: "inline-flex items-center bg-red-500 hover:bg-red-600 text-white font-semibold py-2 px-4 rounded-lg transition-all duration-300"
    
    
  5. 修正後のログ
    再度削除を実行すると無事に削除成功しました!
    Started DELETE "/dogs/2"
    

Processing by DogsController#destroy as HTML
Parameters: {"id"=>"2"}
Dog Load (0.5ms) SELECT "dogs".* FROM "dogs" WHERE "dogs"."id" = $1 LIMIT $2
TRANSACTION (0.2ms) BEGIN
Dog Destroy (1.0ms) DELETE FROM "dogs" WHERE "dogs"."id" = $1
TRANSACTION (0.3ms) COMMIT
Redirected to http://localhost:3000/dogs

```

ハマったこと・解決策

  • Routingerrorだったためrouts.rbファイルに問題があると思いきやビューの記述ミスでした💦
  • こういう小さい積み重ねからエンジニアとしての技量が高まるんだと実感します。
    AIも素晴らしいですが、軽微な修正ならどこに問題があるか感覚としてわかったほうがいいなと思います。

おわりに

壁にぶちあたった時は焦らず、

  1. ログを見る
  2. リクエストパスとHTTPメソッドを確認
  3. MVCのどこに問題があるか切り分ける
    この順序で進めれば原因究明の一歩です!

番外編

binding.pry を使ったデバッグではdocker attachコマンドを使用するが、docker compose logs -fとの違いは?

  • docker attach
    基本的には「中に入って操作したい」とき用(docker exec の代替みたいな感じ)

    • 直接入力できる
    • Ctrl+C を押すとコンテナごと終了する危険性がある
  • docker compose logs -f web
    コンテナが出力しているログを「安全に横から覗く」仕組み

    • 読み取り専用
    • 安全に出入りができる
0
0
0

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?