1. 起きていた事象(トラブルの内容)
Rails 8.1.2 / Ruby 4.0.1 移行に伴って、
Docker環境でアプリを起動しブラウザでアクセスすると、
赤い画面で「PG::UndefinedTable」というエラーが発生しました。
データベースにテーブルが一つも存在しない状態でした。
2. なぜこの問題が起きていたのか(原因)
本プロジェクトは、標準の db/schema.rb ではなく Ridgepole でデータベース構成を管理しています。
通常のRailsの手順(db:schema:load など)でずっと作業しようとしており、何度リセットしてもテーブルが作成されないという「的外れな対応」が続いていました。
3. どうやって原因を特定したのか(分析プロセス)
以下のステップで、目に見えない矛盾を一つずつ潰していきました。
- 実態調査: データベースの中にどんなテーブルがあるか直接コマンド(psql)で確認。→ 管理用の2つしかなく、アプリ用のテーブルがゼロであることを発見。
- Railsの認識確認: Railsがどこのデータベースを見ているか設定値を書き出し。→ 設定(db:app_development)は正しいことを確認。
- 設計図の検査:
db/schema.rbの中身を直接表示。→ 内容が「version: 0」で中身が空っぽであることを発見。 - 構造の再定義: ローカルのファイル構成を画像で確認。→
db/schema/primary/内に大量の.schemaファイルがあるのを見つけ、Ridgepole管理であることを特定。
4. どうやって修正したのか(解決策)
このプロジェクト専用の「設計図の統合・反映コマンド」を実行することで解決しました。
- コンテナの完全リセット:
docker-compose down --volumesで、一度矛盾が生じたネットワークとデータのゴミを完全に掃除しました。 - 特殊コマンドによるテーブル構築:
bin/rails ridgepole:applyを実行。これにより、分割されていた数十個の設計図が統合され、データベースに全てのテーブル(player_public_profiles等)が正しく作成されました。 - テストデータの投入:
bin/rails db:seedを実行し、空っぽのテーブルにテスト用のユーザーデータなどを流し込みました。
5. 教訓
「Rails=schema.rb」という固定観念を捨てる
Railsアプリだからといって、必ずしも標準の db/schema.rb でデータベースを管理しているとは限らない。
ファイル構成を先に疑う
「コマンドが成功しているのに反映されない」という矛盾が起きたときは、自分の操作を疑う前に、まず db/ フォルダの中身(ファイル構成)を目視で確認する。.schema ファイルが大量にある時点で、標準の db:schema:load は「使ってはいけないコマンド」だった。
AI(Gemini)の「標準的な回答」を過信しない
AIは一般的なケース(標準的なRails構成)を前提に回答しがち。プロジェクト固有の特殊なツール(Ridgepoleなど)が導入されている場合、AIの指示通りにリセット(docker-compose down --volumes等)を繰り返すと、解決から遠ざかるだけでなく、無駄な作業を増やすことになる。
エラー画面の「指示」が罠になることもある
Railsのエラー画面は親切に bin/rails db:migrate や db:schema:load を提案してくるが、Ridgepole導入環境ではそのアドバイス自体が「間違い」である。画面の指示を鵜呑みにせず、プロジェクトの「流儀」を確認することが最優先。