Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
assets:precompileを眺める w/ Propshaft
Search
北亜 - Hokua
July 21, 2026
Programming
32
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
assets:precompileを眺める w/ Propshaft
VRChat.rb #7 登壇資料
北亜 - Hokua
July 21, 2026
More Decks by 北亜 - Hokua
See All by 北亜 - Hokua
技術書同人誌を出す - for Those Who Output-
hokua_82
1
26
Redmineのデータ構造が "素晴らしい" 話
hokua_82
0
56
Other Decks in Programming
See All in Programming
ChromeでローカルLLM
ryu1013
0
200
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
220
オーケストレーション記述言語 Katari
yukikurage
0
240
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
130
社内AIエージェント「Askワンバン」における コストチューニングの取り組み
t0yohei
0
160
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
210
ActionController meets Protocol Buffers
sorah
1
790
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.2k
Kawaiicon: Kubernetes, it's no longer cool, but let's secure it anyway!
barnbarn
0
110
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
220
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.7k
AIが実装を担う時代の「技術設計」と「チームマネジメント」
kamina_zzz
2
220
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
1
650
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
470
Agile that works and the tools we love
rasmusluckow
331
22k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Mobile First: as difficult as doing things right
swwweet
225
10k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.2k
The Language of Interfaces
destraynor
162
27k
BBQ
matthewcrist
90
10k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
A designer walks into a library…
pauljervisheath
211
25k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Transcript
VRChat.rb #7 assets:precompileを眺める w/ Propshaft - 本番アプリが真っ白になった話 北亜
自己紹介 • 北亜 - ほくあ ◦ @Hokua_82 • Ruby歴 9年
◦ (まともに書いてるのは) 約2年 • 本業 ◦ Rails / React / erb など…… • VRChat ◦ チュートリアル2周目終 ◦ アバター:しなの/真冬
ある日の事でございます。 • 定期リリースの翌日特定の画面が真っ白になっているという 緊急トラブルが発生しました(白目)
とりあえず緊急対応 • 構成 ◦ Rails + React ◦ HTML からビルドした
JS を読み込む • 近辺の変更をすぐ revert ◦ 暫定対応は完了 • 真の原因究明にレッツゴー
登場人物の紹介 - Propshaftについて • Railsのアセットパイプライン gem (ライブラリ) ◦ CSSやJSをよしなに配置してくれる •
今回のアプリは assets:precompileという、本番環境デ プロイ前に自動で↑をやってくれるのを手動で呼んでいた(諸 悪の根源)
状況 • ちょっと構成が複雑なためアプリは独自 Rakeタスクを持って いる ◦ assets:precompile にフックして、特定ファイル内の パスをreplaceで強引に書き換える ◦
ただこれまでは動いていたし…… • Rakeタスク実行後、ファイル内容が書き換わったので Propshaftにダイジェストの更新 + コピーをしてほしい • でもログをいくらみても↑を行われてた形跡がない、なんで?
状況 • 本番アプリは手動だけでなく、自動で assets:precompile を呼び出すらしい ◦ きな臭くなってきましたね • アプリ側の確認も限界 •
Propshaftのコードを見る
コードの読み解き - rails/propshaft • この assets.processor.process の次に Propshaft::Processor.write_manifest を……
コードの読み解き - rails/propshaft • • この assets.processor.process の次に Propshaft::Processor.write_manifest を……
みたいなことをしたかったのですが、時間がないのでスキップ!
コードの読み解き • • 実際にダイジェストを作成しているコード @はインスタンス変数 ◦ ||= は ▪ 左辺がfalsyなとき代入する
▪ truthyなときはなにもしない というよくあるテクニック ◦ つまりキャッシュをしている
キャッシュしてる ~~~~~~!! (リアルでこの声が出た)
何が起こったか 1 2 3 最初の assets:precompile がダイジェストをキャッ シュする RakeがJSを 書き換える
JSを置き換えても キャッシュされているた めダイジェストが 変わらない 4 2回目の assets:precompileが 同一ダイジェストでファイル 変更なし と判断し処理をスキップ 書き換え前の JSファイルが残り 404 = 真っ白に
まとめ • ライブラリの中身は結構読みやすい。怖がらずに戦おう • 「動いてるからヨシ!」←よくない • ライブラリの独自処理を入れるときは、ライフサイクルの意識 をちゃんとしましょう