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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
北亜 - Hokua
July 21, 2026
Programming
26
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
25
Redmineのデータ構造が "素晴らしい" 話
hokua_82
0
54
Other Decks in Programming
See All in Programming
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
210
dotNET_vulnclicker_intro.pdf
deka_morita
0
160
Materialが消えた日 〜真っ白なFlutterキャンバスにRenderObjectで絵を描く〜
umigishiaoi
0
120
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
260
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
2k
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2k
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
4.9k
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
280
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
220
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
1.1k
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
310
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
0
200
Featured
See All Featured
We Are The Robots
honzajavorek
0
410
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
600
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
360
Utilizing Notion as your number one productivity tool
mfonobong
4
630
Typedesign – Prime Four
hannesfritz
42
3.2k
Designing for humans not robots
tammielis
254
26k
Being A Developer After 40
akosma
PRO
92
590k
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 = 真っ白に
まとめ • ライブラリの中身は結構読みやすい。怖がらずに戦おう • 「動いてるからヨシ!」←よくない • ライブラリの独自処理を入れるときは、ライフサイクルの意識 をちゃんとしましょう