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
23
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
16
Redmineのデータ構造が "素晴らしい" 話
hokua_82
0
47
Other Decks in Programming
See All in Programming
気持ちぃ〜角丸 Squircle
ryu1013
0
160
SREの越境 / SRE Collaboration
y0hgi
2
300
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
130
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
520
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
140
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
520
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
170
Jetpack Compose Mechanisms
skydoves
2
660
wkhtmltopdfの次どうするか問題2026
willnet
2
1.9k
速習iPhone Duo対応
yuukiw00w
2
970
Featured
See All Featured
ラッコキーワード サービス紹介資料
rakko
1
5.2M
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
420
Facilitating Awesome Meetings
lara
57
7.2k
Git: the NoSQL Database
bkeepers
PRO
433
67k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
450
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
520
Ruling the World: When Life Gets Gamed
codingconduct
0
390
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
400
Music & Morning Musume
bryan
48
7.4k
Designing Powerful Visuals for Engaging Learning
tmiket
1
600
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 = 真っ白に
まとめ • ライブラリの中身は結構読みやすい。怖がらずに戦おう • 「動いてるからヨシ!」←よくない • ライブラリの独自処理を入れるときは、ライフサイクルの意識 をちゃんとしましょう