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
0
450
Scalaプロダクトのビルド高速化
CircleCI Meetup Tokyo #2で話したものです
Kurochan
March 10, 2017
Tweet
Share
More Decks by Kurochan
See All by Kurochan
AWS Elemental MediaPackageと格闘🤼
kurochan
2
44
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
49
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
260
入門 電気通信事業者
kurochan
13
5.6k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
5.8k
GoでTCP Proxyを実装してみよう
kurochan
1
1.2k
サイバーエージェントの広告配信におけるIPoEトラフィックの概況
kurochan
0
500
スケールするというのはどういうことなのか
kurochan
14
5k
サイバーエージェントのGitHub Copilot導入と 開発生産性
kurochan
52
47k
Other Decks in Technology
See All in Technology
Android Audio: Beyond Winning On It
atsushieno
0
2.4k
DroidKaigi 2025 Androidエンジニアとしてのキャリア
mhidaka
2
380
Codeful Serverless / 一人運用でもやり抜く力
_kensh
7
450
slog.Handlerのよくある実装ミス
sakiengineer
4
420
5年目から始める Vue3 サイト改善 #frontendo
tacck
PRO
3
230
JTCにおける内製×スクラム開発への挑戦〜内製化率95%達成の舞台裏/JTC's challenge of in-house development with Scrum
aeonpeople
0
250
20250910_障害注入から効率的復旧へ_カオスエンジニアリング_生成AIで考えるAWS障害対応.pdf
sh_fk2
3
260
共有と分離 - Compose Multiplatform "本番導入" の設計指針
error96num
2
1k
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
420
なぜスクラムはこうなったのか?歴史が教えてくれたこと/Shall we explore the roots of Scrum
sanogemaru
5
1.6k
Practical Agentic AI in Software Engineering
uzyn
0
110
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
20
10k
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
What's in a price? How to price your products and services
michaelherold
246
12k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
A better future with KSS
kneath
239
17k
Large-scale JavaScript Application Architecture
addyosmani
513
110k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
GraphQLとの向き合い方2022年版
quramy
49
14k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
How to train your dragon (web standard)
notwaldorf
96
6.2k
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内にストレージあったほうがコスト/速度的に よさそう ◦ コンテナごとにキャッシュを保存してくれると 嬉しいな(要望)