【Rails × Leaflet × Turbo】マイグレーション迷子からの大逆転劇!

プログラミング技術ブログ
Screenshot

こんにちは、もみあげ稲荷です。
最近、「サイクリングロード共有アプリ」を Rails で作り始めたんですが、まさに冒険の連続。
今回は、その中でも Turbo と Leaflet のハマりポイントをズバッと共有していきます。

今日のゴール:地図を表示してTurboで快適ページ遷移!

  • フレームワーク: Rails 7.2.2.1
  • 主な機能: Devise でユーザー管理、Route モデルでルートCRUD、Leaflet.js で地図表示
  • やりたいこと:
    1. ユーザーが投稿したルートを地図上に表示
    2. いいね機能などを Ajax 的に実装したい → じゃあ Turbo 使ってみよう!

「Leaflet で地図を表示するなんて楽勝っしょ!」と思った数日前の私を、今すぐ呼び戻したい…。
実際は、白紙の地図・エラー地獄 からのリカバリに明け暮れました。


第1の壁: マイグレーションファイル「NO FILE」事件

症状

  • rails db:migrate:status すると、NO FILE のマイグレーションが並ぶ
  • 実際にはファイルが存在しているのに、なぜか Rails が認識してくれない!

原因と解決

  • 別プロジェクトを開いてた というオチ(これはあるある)。
  • VSCode でフォルダを間違えて開いていたため、マイグレーションが中途半端に衝突。
  • 正しいフォルダを開き直して「db:drop → db:create → db:migrate」でサッパリ解決。

教訓: 「フォルダ名はわかりやすく!複数アプリがあるなら、しっかり仕分けしよう」


第2の壁: Leafletが表示されない! どこまでも真っ白

症状

  • <div id="map"> を作って、Leaflet の L.map('map') も書いてるのに、ブラウザは真っ白。
  • Console にはエラーなし、でも Network にはタイルのリクエストすら見当たらない。

原因と解決

  1. #map の高さ指定がない → 400px など必須!
  2. スクリプトがそもそもHTMLに埋まってない → コメントアウトや <!-- が閉じてないケースが多数発生。
  3. Turboイベントが発火してない → document.addEventListener("turbo:load", ...) 以前に、Turbo が未インストールだった。

教訓: 「まずは console.log でコードが呼ばれてるか確認せよ。無ければそもそもスクリプトがないのだ。」


第3の壁: Turbo はどこ? window.Turbo が undefined に泣く

症状

  • 「よーし、Rails 7 だし turbo:load 使ってイケイケ非同期にするぞ!」と書いたら、コンソールで window.Turbo → undefined
  • bin/rails turbo:install しようとしたら、「importmap か Node.js が必要」と怒られる。

原因と解決

1.importmap-rails が入っていない

  • Gemfile に gem "importmap-rails" を追加 & bundle install
  • bin/rails importmap:install で config/importmap.rb を生成

2.Turbo を pin していない

3.レイアウトで読み込んでいない

    こうして、やっと window.Turbo が オブジェクト を返すように!
    そして document.addEventListener("turbo:load", ...) が動いて、Leaflet 初期化コードがちゃんと実行されるようになりました。

    教訓: 「Rails 7 だからといって Turbo が自動で入るわけじゃない。importmap or Node.js どちらかのセットアップ必須!」


    最終的にどうなった?

    1. 地図表示が成功
      • <div id="map" style="height: 400px;"></div>
      • L.map('map') + L.tileLayer(...)
      • ちゃんと東京駅にマーカーが立って「おお、地図だ…!」という感動
    2. turbo:load で画面遷移もサクサク
      • リンクをクリックしてもフルリロードしない、快適なUX。
      • 次は「いいね機能」を Ajax っぽく実装して、画面リロード無しで数値が変わるようにしたい。
    3. 今後のやりたいこと
      • Polyline でルート線を引く
      • 住所を入力したら自動で座標を取得(ジオコーディング)
      • さらに CSS で地図デザインをカスタマイズ

    まとめ:ハマるほどに、理解は深まる

    というわけで、地図表示 × Rails 7 × Turbo の三重奏は、ちょっとした設定ミス でなかなか歯ごたえがあるものの、解決したときの達成感は絶大。
    この「ハマった記録」をこそ、ブログで共有していきたいなと思います。

    • ポイント1: マイグレーションが壊れたら、まず「正しいプロジェクトか」をチェック
    • ポイント2: Leaflet で地図が真っ白なら、高さ指定&スクリプトが実行されてるかを確認
    • ポイント3: Turbo を使うなら importmap や Node.js 環境を整えよう。window.Turbo で確認!

    これで「サイクリングロード共有アプリ」も、だんだん形になってきました。次回は ルート線(Polyline) の描画や いいね機能 に挑戦する予定です。

    「エラーでハマる=挫折」じゃなくて、「実装力を高めるチャンス」だと信じて、コツコツ一歩ずつ進めるのみ!


    本記事を読んだあなたへ

    最後までお読みいただきありがとうございます!
    もし同じように「地図が表示されない…」「Turbo が動かない…」と悩んでいる方がいれば、ぜひコメントやSNSでシェアしてください。

    ではまた、もみあげ稲荷でお会いしましょう!
    あなたのRailsライフが、もっと楽しくなりますように。

    コメント

    タイトルとURLをコピーしました