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
Scalaプロダクトのビルド高速化
Search
Kurochan
March 10, 2017
Technology
500
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Scalaプロダクトのビルド高速化
CircleCI Meetup Tokyo #2で話したものです
Kurochan
March 10, 2017
More Decks by Kurochan
See All by Kurochan
ABEMAのバグバウンティの取り組み
kurochan
1
1k
2026年の個人的テーマ: 「計算機を燃やせ🔥」
kurochan
1
160
つなぐ、届ける、変える- コンテンツ配信の最前線ト——ク
kurochan
0
150
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
4
3.3k
AWS Elemental MediaPackageと格闘🤼
kurochan
2
110
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
260
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
380
入門 電気通信事業者
kurochan
13
5.9k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
6.3k
Other Decks in Technology
See All in Technology
ソニー銀行におけるビジネスアジリティ向上のためのクラウドシフト戦略
srenext
0
590
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
180
実践!既存 Project への AI-Driven Development 適用〜 一ヶ月で Project 唯一のフロントエンドエンジニアを作り出せ〜
lycorptech_jp
PRO
0
130
Compose 新機能総まとめ / What's New in Jetpack Compose
yanzm
0
300
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
1
220
発表と総括 / Presentations and Summary
ks91
PRO
0
130
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
170
SoccerMaster: A Vision Foundation Model for Soccer Understanding
kzykmyzw
0
120
CDKで書くECSのベストプラクティス、 改めて考え直す2026 #cdkconf2026
makies
2
700
Network Firewallやっていき!
news_it_enj
0
160
SRE本の知られざる名シーン / The Hidden Gems of Google SRE Book
nari_ex
1
420
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
210
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
290
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
WENDY [Excerpt]
tessaabrams
11
38k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
Designing Experiences People Love
moore
143
24k
The SEO identity crisis: Don't let AI make you average
varn
0
510
What's in a price? How to price your products and services
michaelherold
247
13k
My Coaching Mixtape
mlcsv
0
170
How to Think Like a Performance Engineer
csswizardry
28
2.7k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
220
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
340
Designing for Performance
lara
611
70k
Transcript
CyberAgent, Inc. All Rights Reserved Scalaプロダクトのビルド高速化 黒崎 優太 @kuro_m88
黒崎 優太 @kuro_m88 • 株式会社サイバーエージェント ◦ AdTech Studio / Dynalyst
エンジニア • 新卒2年目 • Scala, AWS, LXD 査読に参加しました 今書いています
Scalaのコンパイルと言えば
Scalaのコンパイルと言えば • 大規模プロジェクトだと遅い ◦ Dynalystの例: ▪ 100+ sub projects ▪
400K+ lines (Scala) ◦ dotty(次世代コンパイラ)に期待 • 先人の知見
金の弾丸 出典: Scalaのコンパイル速度の話が聞きたいだろうし、するつもりだ https://www.slideshare.net/kiris60/scala-benchmarks
AdTech StudioでのCircleCI • CircleCI Enterpriseを利用 ◦ 物理 ◦ 30+ Node
◦ 100+ Build Container ◦ Amebaのと合わせると国内最大規模
Dynalystでのビルド方法
None
Dynalystのビルド方法(高速化前) • キャッシュを使ってビルド時間を短く ◦ (sbtの機能により)差分コンパイルされる ◦ ※ すべてのコンテナで全部のプロジェクトをビルド • コンテナをたくさん使ってテストは並列に
◦ コンテナごとにテストするプロジェクトを変えて分散 ◦ DBを使うテストは同一ホスト内で並列に走れない ◦ 実際には12コンテナ使ってます • それでも待たされる(20分くらい)ので改善したい
①: CircleCI→CircleCI Enterprise • まぁまぁ速くなった ◦ Enterprise採用ありがとうございます ◦ CPU ,
Memory , Storage , Network • 結果: 成功
• コンテナたくさんあるんだし、 コンパイルするプロジェクトも コンテナごとに分けたら速くなるのでは ②: コンパイルを並列にする
None
②: コンパイルを並列にする • 余計遅くなった… • Container #0しかキャッシュが保存されて いない模様 • 差分コンパイルが効かないのが原因
• 結果: 失敗
• ビルド成果物を先頭コンテナにrsync すればキャッシュを保存してくれそう ③: 成果物をrsyncで先頭のコンテナに
None
③: 成果物をrsyncで先頭のコンテナに • connection timed out
③: 成果物をrsyncで先頭のコンテナに • 頻繁にコケてしまう… ◦ 帯域制限してみたり、色々やったけどうまくい かず… • 結果: 失敗
困ったので調べた 出典: Cache save/restore algorithm - Build Environment - CircleCI
Community Discussion https://discuss.circleci.com/t/cache-save-restore-algorithm/759
困ったので調べた 出典: Cache save/restore algorithm - Build Environment - CircleCI
Community Discussion https://discuss.circleci.com/t/cache-save-restore-algorithm/759
④: 自前でビルドキャッシュを保存 • ビルドキャッシュをS3に自前でアップロード • ビルド時にキャッシュをダウンロードしてきて展開 • circle.ymlにこれを行うシェルスクリプトを書いた ◦ 代わりにCircleCIのビルドキャッシュ機能は
使わない
None
④: 自前でビルドキャッシュを保存 • 結果:
結果 • PR Buildが20分→8分に ◦ ※差分の量によって時間は変わります
改善点
改善点 • 並列ビルドをシェルスクリプトで書いてる ◦ sbtでいい感じにしたい • コンテナごとにビルド時間が偏るときがある ◦ 現状たまに手で再配置 •
S3以外の場所にキャッシュを保存する ◦ DC内にストレージあったほうがコスト/速度的に よさそう ◦ コンテナごとにキャッシュを保存してくれると 嬉しいな(要望)