Upgrade to Pro — share decks privately, control downloads, hide ads and more …

assets:precompileを眺める w/ Propshaft

assets:precompileを眺める w/ Propshaft

VRChat.rb #7 登壇資料

Avatar for 北亜 - Hokua

北亜 - Hokua

July 21, 2026

More Decks by 北亜 - Hokua

Other Decks in Programming

Transcript

  1. 自己紹介 • 北亜 - ほくあ ◦ @Hokua_82 • Ruby歴 9年

    ◦ (まともに書いてるのは) 約2年 • 本業 ◦ Rails / React / erb など…… • VRChat ◦ チュートリアル2周目終 ◦ アバター:しなの/真冬
  2. とりあえず緊急対応 • 構成 ◦ Rails + React ◦ HTML からビルドした

    JS を読み込む • 近辺の変更をすぐ revert ◦ 暫定対応は完了 • 真の原因究明にレッツゴー
  3. 登場人物の紹介 - Propshaftについて • Railsのアセットパイプライン gem (ライブラリ) ◦ CSSやJSをよしなに配置してくれる •

    今回のアプリは assets:precompileという、本番環境デ プロイ前に自動で↑をやってくれるのを手動で呼んでいた(諸 悪の根源)
  4. 状況 • ちょっと構成が複雑なためアプリは独自 Rakeタスクを持って いる ◦ assets:precompile にフックして、特定ファイル内の パスをreplaceで強引に書き換える ◦

    ただこれまでは動いていたし…… • Rakeタスク実行後、ファイル内容が書き換わったので Propshaftにダイジェストの更新 + コピーをしてほしい • でもログをいくらみても↑を行われてた形跡がない、なんで?
  5. コードの読み解き • • 実際にダイジェストを作成しているコード @はインスタンス変数 ◦ ||= は ▪ 左辺がfalsyなとき代入する

    ▪ truthyなときはなにもしない というよくあるテクニック ◦ つまりキャッシュをしている
  6. 何が起こったか 1 2 3 最初の assets:precompile がダイジェストをキャッ シュする RakeがJSを 書き換える

    JSを置き換えても キャッシュされているた めダイジェストが 変わらない 4 2回目の assets:precompileが 同一ダイジェストでファイル 変更なし と判断し処理をスキップ 書き換え前の JSファイルが残り 404 = 真っ白に