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
18
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
3
Redmineのデータ構造が "素晴らしい" 話
hokua_82
0
43
Other Decks in Programming
See All in Programming
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
350
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
420
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
2.1k
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
380
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.1k
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
1
150
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
490
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
310
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
200
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
180
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
250
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
710
Featured
See All Featured
Embracing the Ebb and Flow
colly
88
5.2k
Mind Mapping
helmedeiros
1
360
Crafting Experiences
bethany
1
350
Building an army of robots
kneath
307
46k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
New Earth Scene 8
popppiees
4
2.6k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
500
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
530
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
570
Ethics towards AI in product and experience design
skipperchong
2
380
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 = 真っ白に
まとめ • ライブラリの中身は結構読みやすい。怖がらずに戦おう • 「動いてるからヨシ!」←よくない • ライブラリの独自処理を入れるときは、ライフサイクルの意識 をちゃんとしましょう