Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
assets:precompileを眺める w/ Propshaft
Search
北亜 - Hokua
July 21, 2026
Programming
12
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
Redmineのデータ構造が "素晴らしい" 話
hokua_82
0
27
Other Decks in Programming
See All in Programming
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
450
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
120
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
260
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
230
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
19k
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.6k
Building a Meta Ray-Ban display app
akkeylab
0
160
VibeCodingからAgenticWorkflowへ
starfish719
0
550
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
190
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
230
Foundation Models frameworkで画像分析
ryodeveloper
1
620
React本体のコードリーディング
high_g_engineer
1
150
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
500
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
440
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
420
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
540
GraphQLとの向き合い方2022年版
quramy
50
15k
Are puppies a ranking factor?
jonoalderson
1
3.8k
Product Roadmaps are Hard
iamctodd
55
12k
The Language of Interfaces
destraynor
162
27k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
280
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
700
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
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 = 真っ白に
まとめ • ライブラリの中身は結構読みやすい。怖がらずに戦おう • 「動いてるからヨシ!」←よくない • ライブラリの独自処理を入れるときは、ライフサイクルの意識 をちゃんとしましょう