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
480
0
Share
Scalaプロダクトのビルド高速化
CircleCI Meetup Tokyo #2で話したものです
Kurochan
March 10, 2017
More Decks by Kurochan
See All by Kurochan
ABEMAのバグバウンティの取り組み
kurochan
1
790
2026年の個人的テーマ: 「計算機を燃やせ🔥」
kurochan
1
110
つなぐ、届ける、変える- コンテンツ配信の最前線ト——ク
kurochan
0
130
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
4
3.1k
AWS Elemental MediaPackageと格闘🤼
kurochan
2
97
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
220
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
360
入門 電気通信事業者
kurochan
13
5.8k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
6.2k
Other Decks in Technology
See All in Technology
ストライクウィッチーズ2期6話のエイラの行動が許せないのでPjMの観点から何をすべきだったのかを考える
ichimichi
1
260
"まず試す"ためのDatabricks Apps活用法 / Databricks Apps for Early Experiments and Validation
nttcom
1
200
マルチモーダル非構造データとの闘い
shibuiwilliam
1
250
AWS DevOps Agent or Kiro の使いどころを考える_20260402
masakiokuda
0
190
ふりかえりを 「あそび」にしたら、 学習が勝手に進んだ / Playful Retros Drive Learning
katoaz
0
360
プロダクトを育てるように生成AIによる開発プロセスを育てよう
kakehashi
PRO
1
830
Databricksを用いたセキュアなデータ基盤構築とAIプロダクトへの応用.pdf
pkshadeck
PRO
0
200
最大のアウトプット術は問題を作ること
ryoaccount
0
310
Podcast配信で広がったアウトプットの輪~70人と音声発信してきた7年間~/outputconf_01
fortegp05
0
240
2026年度新卒技術研修 サイバーエージェントのデータベース 活用事例とパフォーマンス調査入門
cyberagentdevelopers
PRO
3
2.7k
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.3k
40代からのアウトプット ― 経験は価値ある学びに変わる / 20260404 Naoki Takahashi
shift_evolve
PRO
5
900
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
860
Code Reviewing Like a Champion
maltzj
528
40k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
120
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.1k
Docker and Python
trallard
47
3.8k
Claude Code のすすめ
schroneko
67
220k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
450
Paper Plane (Part 1)
katiecoart
PRO
0
6.4k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.2k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
95
Skip the Path - Find Your Career Trail
mkilby
1
100
Bash Introduction
62gerente
615
210k
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内にストレージあったほうがコスト/速度的に よさそう ◦ コンテナごとにキャッシュを保存してくれると 嬉しいな(要望)