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
Go のビルドキャッシュと GOCACHEPROG
Search
Yuki Hirasawa
September 16, 2025
540
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go のビルドキャッシュと GOCACHEPROG
Yuki Hirasawa
September 16, 2025
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Docker and Python
trallard
47
4.2k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
580
Ruling the World: When Life Gets Gamed
codingconduct
0
400
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
410
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
330
Product Roadmaps are Hard
iamctodd
55
13k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
220
The SEO identity crisis: Don't let AI make you average
varn
0
590
Transcript
© LayerX Inc. GoのビルドキャッシュとGOCACHEPROG 2025/09/16 layerx.go#2 @hira
© LayerX Inc. 2 2024 年 4 ⽉ ~ 株式会社
LayerX バクラク事業部 共通管理開発チーム Software Engineer 平澤 雄基 (hira) ⾃⼰紹介 Go 歴は 4 年くらい 普段は、⻑野県からリモートで働いています Github: @hirasawayuki
⽬次 Agenda • Go のビルドキャッシュについて • GOCACHEPROG の仕組み • リモートキャッシュ実装時の注意点
© LayerX Inc. 4 go env CACHE で出⼒されるディレクトリに保存されている - 00
~ ff まで 256 個のディレクトリがある - 各ディレクトリにはアクションエントリファイル(メタデータ)とキャッシュデータが 保存されている - アクションエントリファイル => -a がついたファイル - キャッシュデータ => -d がついたファイル Go のビルドキャッシュについて Go のビルドキャッシュについて
© LayerX Inc. 5 ActionID をもとにキャッシュが存在するか チェックする ActionID - メタデータの識別⼦(-a
より前の部分) - SHA256 でハッシュ化された⽂字列 - Go のバージョンや環境変数、オプションなどもハッシュの計算 に含まれる https://github.com/golang/go/blob/080882a928c96f997a1cb67cef40d2cc6 126ffcd/src/cmd/go/internal/work/exec.go#L255-L433 ビルドキャッシュの仕組み Go のビルドキャッシュについて ActionID 計算 メタデータが 存在する? OutputID 取得 ビルド処理 キャッシュ利⽤ OutputID 計算 キャッシュ保存 メタデータ保存 No Yes
© LayerX Inc. 6 ビルドキャッシュの仕組み Go のビルドキャッシュについて ActionID 計算 メタデータが
存在する? OutputID 取得 ビルド処理 キャッシュ利⽤ OutputID 計算 キャッシュ保存 メタデータ保存 No Yes メタデータがなかった場合 - ビルド結果をもとにハッシュ値(OutputID)を計算 - キャッシュは OutputID + -d という名前で保存 - メタデータを作成(OutputID を保存する) - ↓メタデータの中⾝ v1 <ActionID> <OutputID> <size> <timestamp>
© LayerX Inc. 7 ビルドキャッシュの仕組み Go のビルドキャッシュについて ActionID 計算 メタデータが
存在する? OutputID 取得 ビルド処理 キャッシュ利⽤ OutputID 計算 キャッシュ保存 メタデータ保存 No Yes メタデータあった場合 - ActionID をもとにメタデータを取得 - メタデータ内部にある OutputID を取得 - 取得した OutputID をもとにキャッシュを利⽤
© LayerX Inc. 8 ビルドキャッシュの仕組み Go のビルドキャッシュについて ActionID 計算 メタデータが
存在する? OutputID 取得 ビルド処理 キャッシュ利⽤ OutputID 計算 キャッシュ保存 メタデータ保存 No Yes メタデータありのケース - ActionID をもとにメタデータを取得 - メタデータ内部にある OutputID を取得 - 取得した OutputID をもとにキャッシュを利⽤ Go のキャッシュの実装は src/cmd/go/internal/cache 配下にあるの で、興味のある⽅はぜひ確認してみてください! https://github.com/golang/go/tree/master/src/cmd/go/internal/cache
© LayerX Inc. 9 ‧Go1.24 で追加 ‧GOCACHEPROG 環境変数に実⾏コマンドを渡すことで go コマンドの⼦プロセ
スとして起動 ‧キャッシュの処理を起動した⼦プロセスに委譲 GOCACHEPROG とは GOCACHEPROG の仕組み
© LayerX Inc. 10 ‧標準⼊出⼒を利⽤した独⾃の JSON プロトコル で通信する - 3
つのコマンドを使ってやり取りする - get: キャッシュ情報を返す - put: キャッシュデータを保存する - close: 終了を知らせる - リクエストやレスポンスは cacheprog.go に定義 GOCACHEPROG とは GOCACHEPROG の仕組み ActionID 計算 メタデータが 存在する? OutputID 取得 ビルド処理 キャッシュ利⽤ OutputID 計算 キャッシュ保存 メタデータ保存 No Yes
© LayerX Inc. 11 ‧標準⼊出⼒を利⽤した独⾃の JSON プロトコル で通信する - 3
つのコマンドを使ってやり取りする - get: キャッシュ情報を返す - put: キャッシュデータを保存する - close: 終了を知らせる - リクエストやレスポンスは cacheprog.go に定義 GOCACHEPROG とは GOCACHEPROG の仕組み ActionID 計算 メタデータが 存在する? OutputID 取得 ビルド処理 キャッシュ利⽤ OutputID 計算 キャッシュ保存 メタデータ保存 No Yes
© LayerX Inc. 12 ‧標準⼊出⼒を利⽤した独⾃の JSON プロトコル で通信する - 3
つのコマンドを使ってやり取りする - get: キャッシュ情報を返す - put: キャッシュデータを保存する - close: 終了を知らせる - リクエストやレスポンスは cacheprog.go に定義 GOCACHEPROG とは GOCACHEPROG の仕組み ActionID 計算 メタデータが 存在する? OutputID 取得 ビルド処理 キャッシュ利⽤ OutputID 計算 キャッシュ保存 メタデータ保存 No Yes
© LayerX Inc. 13 ‧標準⼊出⼒を利⽤した独⾃の JSON プロトコル で通信する - 3
つのコマンドを使ってやり取りする - get: キャッシュ情報を返す - put: キャッシュデータを保存する - close: 終了を知らせる - リクエストやレスポンスは cacheprog.go に定義 GOCACHEPROG とは GOCACHEPROG の仕組み ActionID 計算 メタデータが 存在する? OutputID 取得 ビルド処理 キャッシュ利⽤ OutputID 計算 キャッシュ保存 メタデータ保存 No Yes
© LayerX Inc. 14 GOCACHEPROG の仕組み GOCACHEPROG の仕組み
© LayerX Inc. 15 GOCACHEPROG の仕組み GOCACHEPROG の仕組み ‧⼦プロセスは起動したら KnownCommands
を返す - 利⽤可能なコマンドを go に伝える
© LayerX Inc. 16 GOCACHEPROG の仕組み GOCACHEPROG の仕組み ‧get コマンド
- リクエストで受け取った ActionID をもと にメタデータを取得する - レスポンスで OutputID とキャッシュの パスを返す
© LayerX Inc. 17 GOCACHEPROG の仕組み GOCACHEPROG の仕組み ‧put コマンド
- リクエストで受け取った ActionID OutputID Body をもとにメタデータ、 キャッシュを保存する - Body は Base64 の⽂字列で送信される
© LayerX Inc. 18 GOCACHEPROG の仕組み GOCACHEPROG の仕組み ‧close コマンド
- ビルド処理の終了 - レスポンスを返すことで go コマンドは終 了する
© LayerX Inc. 19 GOCACHEPROG の仕組み GOCACHEPROG の仕組み 標準⼊出⼒を利⽤したシンプルなプロトコル -
KnownCommands と get /put/close の3 つのコマンドを実装すれば OK - それ以外の実装は⾃由にカスタマイズ可 能 - (Go に依存しない設計なので、他の⾔語 で実装することも可能)
© LayerX Inc. 20 リモートキャッシュ実装時の注意点 リモートキャッシュ実装時の注意点 ‧リモートキャッシュのダウンロード‧アップ ロードはまとめる & 圧縮する
- GET は数千、⼤きいプロジェクトであれば 数万 のリクエストになる - キャッシュサイズは 1GB を超えることも - ネットワークの遅延がボトルネックに
© LayerX Inc. 21 リモートキャッシュ実装時の注意点 リモートキャッシュ利⽤時の注意点 ‧GOCACHEPROG を実装すれば CI の実⾏時間
が短縮されるわけではない - actions/cache + 標準キャッシュと仕組みはほぼ ⼀緒 - 圧縮アルゴリズムの選定、ネットワーク遅延の 最⼩化が重要