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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kurochan
March 10, 2017
Technology
0
480
Scalaプロダクトのビルド高速化
CircleCI Meetup Tokyo #2で話したものです
Kurochan
March 10, 2017
Tweet
Share
More Decks by Kurochan
See All by Kurochan
2026年の個人的テーマ: 「計算機を燃やせ🔥」
kurochan
1
100
つなぐ、届ける、変える- コンテンツ配信の最前線ト——ク
kurochan
0
120
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
4
3.1k
AWS Elemental MediaPackageと格闘🤼
kurochan
2
91
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
210
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
360
入門 電気通信事業者
kurochan
13
5.8k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
6.1k
GoでTCP Proxyを実装してみよう
kurochan
1
1.3k
Other Decks in Technology
See All in Technology
モブプログラミング再入門 ー 基本から見直す、AI時代のチーム開発の選択肢 ー / A Re-introduction of Mob Programming
takaking22
5
710
越境する組織づくり ─ 多様性を前提にしたチームビルディングとリードの実践知
kido_engineer
2
140
Yahoo!ショッピングのレコメンデーション・システムにおけるML実践の一例
lycorptech_jp
PRO
1
140
バクラクのSREにおけるAgentic AIへの挑戦/Our Journey with Agentic AI
taddy_919
2
1.1k
開発組織の課題解決を加速するための権限委譲 -する側、される側としての向き合い方-
daitasu
5
310
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
AIエージェント時代に備える AWS Organizations とアカウント設計
kossykinto
2
350
作りっぱなしで終わらせない! 価値を出し続ける AI エージェントのための「信頼性」設計 / Designing Reliability for AI Agents that Deliver Continuous Value
aoto
PRO
1
220
LINE Messengerの次世代ストレージ選定
lycorptech_jp
PRO
19
7.6k
クラウド × シリコンの Mashup - AWS チップ開発で広がる AI 基盤の選択肢
htokoyo
2
100
Claude Codeが爆速進化してプラグイン追従がつらいので半自動化した話 ver.2
rfdnxbro
0
430
DX Improvement at Scale
ntk1000
3
380
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
190
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
310
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Navigating Team Friction
lara
192
16k
How to train your dragon (web standard)
notwaldorf
97
6.5k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
110
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
310
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
210
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
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内にストレージあったほうがコスト/速度的に よさそう ◦ コンテナごとにキャッシュを保存してくれると 嬉しいな(要望)