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
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
310
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.6k
絵文字にまつわるエトセトラ / ABC2014w LT Emojis in Android
mstssk
1
480
Other Decks in Technology
See All in Technology
5分でカオスエンジニアリングを分かった気になろう
pandayumi
0
260
Generative AI Japan 第一回生成AI実践研究会「AI駆動開発の現在地──ブレイクスルーの鍵を握るのはデータ領域」
shisyu_gaku
0
330
新規プロダクトでプロトタイプから正式リリースまでNext.jsで開発したリアル
kawanoriku0
1
190
まずはマネコンでちゃちゃっと作ってから、それをCDKにしてみよか。
yamada_r
2
120
20250912_RPALT_データを集める→とっ散らかる問題_Obsidian紹介
ratsbane666
0
100
AI時代を生き抜くエンジニアキャリアの築き方 (AI-Native 時代、エンジニアという道は 「最大の挑戦の場」となる) / Building an Engineering Career to Thrive in the Age of AI (In the AI-Native Era, the Path of Engineering Becomes the Ultimate Arena of Challenge)
jeongjaesoon
0
240
Platform開発が先行する Platform Engineeringの違和感
kintotechdev
4
580
5年目から始める Vue3 サイト改善 #frontendo
tacck
PRO
3
230
MagicPod導入から半年、オープンロジQAチームで実際にやったこと
tjoko
0
110
なぜテストマネージャの視点が 必要なのか? 〜 一歩先へ進むために 〜
moritamasami
0
240
CDK CLIで使ってたあの機能、CDK Toolkit Libraryではどうやるの?
smt7174
4
190
これでもう迷わない!Jetpack Composeの書き方実践ガイド
zozotech
PRO
0
1.1k
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.6k
Writing Fast Ruby
sferik
628
62k
Navigating Team Friction
lara
189
15k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Building an army of robots
kneath
306
46k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Fireside Chat
paigeccino
39
3.6k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
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もメンテナンスしましょう