$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CircleCIの実行時間を3分の2くらいにした / CircleCI meetup LT 2...
Search
mstssk
August 23, 2019
Technology
2
1.4k
CircleCIの実行時間を3分の2くらいにした / CircleCI meetup LT 2019-08-23
https://circleci.connpass.com/event/140666/
mstssk
August 23, 2019
Tweet
Share
More Decks by mstssk
See All by mstssk
2017/05/29 CA.apk I/O報告会 LT
mstssk
0
320
2016年Android酒部忘年会LT / TechBooster C91 advertising
mstssk
0
250
2015年Android酒部忘年会LT / TechBooster C89 advertising
mstssk
0
260
アプリの通知をLollipop対応しよう / shibuya.apk 2015-05-22 LT
mstssk
2
2.7k
絵文字にまつわるエトセトラ / ABC2014w LT Emojis in Android
mstssk
1
490
Other Decks in Technology
See All in Technology
Digitization部 紹介資料
sansan33
PRO
1
6.1k
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
37k
Active Directory 勉強会 第 6 回目 Active Directory セキュリティについて学ぶ回
eurekaberry
16
5.9k
32のキーワードで学ぶ はじめての耐量子暗号(PQC) / Getting Started with Post-Quantum Cryptography in 32 keywords
quiver
0
200
“決まらない”NSM設計への処方箋 〜ビットキーにおける現実的な指標デザイン事例〜 / A Prescription for "Stuck" NSM Design: Bitkey’s Practical Case Study
bitkey
PRO
1
340
Data Hubグループ 紹介資料
sansan33
PRO
0
2.3k
なぜ使われないのか?──定量×定性で見極める本当のボトルネック
kakehashi
PRO
1
760
Claude Code Getting Started Guide(en)
oikon48
0
140
useEffectってなんで非推奨みたいなこと言われてるの?
maguroalternative
9
6.2k
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
0
640
freeeにおけるファンクションを超えた一気通貫でのAI活用
jaxx2104
3
600
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Writing Fast Ruby
sferik
630
62k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
700
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Side Projects
sachag
455
43k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Facilitating Awesome Meetings
lara
57
6.7k
Designing Experiences People Love
moore
142
24k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
380
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
Transcript
CircleCIの実行時間を 3分の2くらいにした mstssk
自己紹介 • りんご @mstssk • 株式会社Viibar所属 • フロントエンドエンジニア • CIとか細かい環境改善とか大好き
今日は半分くらいはCircleCIと直接は関係ない話です
CircleCIの実行時間が遅かった!! • システム構成:Rails+Webpack(TypeScript+Vue) ◦ Sprocketsの画面もかなりある • コミット毎のWorkflowの実行時間が15〜20分強 • 積極的にはメンテされておらず、流石に遅かった
• およそ半年の間に、機能追加などもしつつ色々メンテしていき 現在は 10分程度 まで高速化!
Performanceプランにしよう(ダイレクトマーケティング • 旧プラン: $350/month ◦ 1 Free + 7 Paid
Containers ◦ 4並列ジョブ×2を動かせるように • Performance プラン: $180/month ◦ $120(8 Users) + $60 Credit ◦ (実質)無限コンテナ。コストを気にせず並列化できる
Amazon ECRのリージョンを気をつけよう • CIで使うDockerイメージを自前でビルドしてECRに置いてる • Spin up Environment だけで1分半くらいかかってた ◦
というかECRの転送コストが妙にかかってる ◦ 東京リージョン(ap-northeast-1)に置いていたので CircleCIが海を越えてイメージを取りに来ていた • リージョンを us-east-1 にしたら30秒に高速化&省コスト化
TypeScriptのビルド高速化 • ECR早くなったが、別途やってた機能追加で画面数が増えて Webpackビルドだけで5分くらいかかるようになってた • speed-measure-webpack-plugin でボトルネックを計測 ◦ ほとんどが ts-loader
+ vue-loader の実行時間 • fork-ts-checker-webpack-plugin でTSビルドを並列化 ◦ node_modulesディレクトリのexcludeも忘れてた ◦ 5分強が → 30秒に
Railsのassetsをキャッシュしよう • コントローラのテスト毎にassetsビルドが走って遅い&高負荷 • ビルド済みassetsフォルダをキャッシュしよう • public/assets と tmp/cache/assets をキャッシュ
- save_cache: key: public-assets-{{ .Environment.CACHE_KEY }}-{{ .Branch }}-{{ .BuildNum }} paths: - public/assets - tmp/cache/assets - ~/.webdrivers # ついでにChromeDriverもキャッシュ
テストの並列実行の速度に一喜一憂しない • circleci tests split でRSpecを4分割し並列実行している ◦ タイミングデータに基づいた分割をしている ◦ テストを変えるとタイミングデータも変わってしまうので
実行時間も2〜3分くらい変わったりする⏰ ◦ 頑張ってチューニングべきところではなさそう • 他の恒常的に改善できる場所に目を向けよう
その他に気を使ったところ • Chromeは最新に。v71あたりはテストが不安定だった • サーバとフロントのビルド・テストは別ジョブにして並列化 • キャッシュをたまにクリアする/キャッシュ対象自体の整理 ◦ 地味に少しずつキャッシュにゴミが溜まっていったりする ◦
数百MBくらいになってくるとレストアが遅い • 依存関係を時々整理しよう ◦ 機能を落とした時に不要になったものを消し忘れてたり
CIはメンテナンスするもの • 最近は実行時間の最頻値が10分20秒くらいに落ち着いている • しかし、プロダクトの成長と共にコードベースも変わっていくので CIの実行時間は劣化していく •
コードをメンテするように、 CIもメンテナンスしましょう