Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
大規模FlutterプロジェクトのCI実行時間を約8割削減した話
Search
teamLab
PRO
August 01, 2025
Programming
0
840
大規模FlutterプロジェクトのCI実行時間を約8割削減した話
teamLab
PRO
August 01, 2025
Tweet
Share
More Decks by teamLab
See All by teamLab
TSKaigi Hokuriku - TypeScriptによる静的データガバナンス
teamlab
PRO
0
35
Reactの<ViewTransition>で作るUIアニメーション
teamlab
PRO
0
9
「めんどくさい」から考える クレジットカード入力フォームのUX
teamlab
PRO
0
24
複雑なUI設計への銀の弾丸 「オブジェクト指向UIデザイン」
teamlab
PRO
2
61
「人」から考える「アクセシビリティ」
teamlab
PRO
0
22
TSKaigi Hokuriku - TC39 Signals で描くJS/TS/フレームワークの未来の姿
teamlab
PRO
0
43
TSKaigi Hokuriku - oxc-transformとisolatedDeclarationsで 手に入れるtscなし型定義ファイル生成
teamlab
PRO
0
30
TSKaigi Hokuriku - tsc --init の設計思想の変化とその背景を追う
teamlab
PRO
0
40
ユーザーのアクションを伴うWidgetのGoldenTest
teamlab
PRO
0
74
Other Decks in Programming
See All in Programming
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
200
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
5
1.9k
社内オペレーション改善のためのTypeScript / TSKaigi Hokuriku 2025
dachi023
1
560
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
6
990
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
2
650
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
190
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
420
TypeScript 5.9 で使えるようになった import defer でパフォーマンス最適化を実現する
bicstone
1
1.2k
CSC509 Lecture 14
javiergs
PRO
0
220
チームをチームにするEM
hitode909
0
290
Go コードベースの構成と AI コンテキスト定義
andpad
0
120
認証・認可の基本を学ぼう後編
kouyuume
0
180
Featured
See All Featured
Making Projects Easy
brettharned
120
6.5k
Mobile First: as difficult as doing things right
swwweet
225
10k
GraphQLとの向き合い方2022年版
quramy
50
14k
Faster Mobile Websites
deanohume
310
31k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
720
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Balancing Empowerment & Direction
lara
5
790
A designer walks into a library…
pauljervisheath
210
24k
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Cult of Friendly URLs
andyhume
79
6.7k
Six Lessons from altMBA
skipperchong
29
4.1k
Transcript
大規模Flutterプロジェクトの CI実行時間を約 8割削減した話 そた スマートフォンチーム テックスペシャリスト 1
2 自己紹介 そた スマートフォンチーム テックスペシャリスト 業務では主にFlutterとKotlin Multiplatform 社内FlutterTemplateのアーキテクチャ設計 複数の案件での技術領域サポート
3 Solution クライアントの課題や要望を咀嚼して、適切な課題解決を検討し、構想策定・要件定義から 実装まで一気通貫でサービス開発を行います。 Art 各技術のスペシャリスト達がそれらを最大限に活用し、まったく新しい体験ができるデジタル アート作品を制作しています。世界 27カ国以上でアート作品の展示や美術館を運営していま す。 会社紹介
4 スマートフォンチームとは 会社紹介 社員数 58人 累計ダウンロード数 1.6億DL 平均ストア評価 4.3点
5 スマートフォンチームとは 会社紹介
6 本題
7 • 実行時間なんと38分 • macOSで実行していたので コストもかなり... • CI実行待ちでマージが 遅延してしまうことも.... →なんとかして手を加えなければ
前提 大規模案件でCIの実行時間が問題に
8 セットアップ→静的解析→テスト実行→レポートという構成 課題分析 現在のCIを見てみる →テスト実行にほとんどの時間がかかっている!
9 1. 単純にテスト量が多い a. かなりの大規模プロジェクトなのでそれに比例してテストの量も多い 2. テストが全て直列で実行されている a. Flutter自体の並列実行オプションは利用しているが単一のExecutorで順番 に実行している。
3. VRT(Golden Test)の量が多い a. 画面のレンダリングを実際に行うので実行時間がかかってしまう b. 実行するOSによって差分が発生するのでmacOSで実行しなければならない 制限が付き、コスト増に。 課題分析 テスト実行に時間がかかっている分析
10 テスト実行時間、コストを削減するためには テスト実行時間を削減するために テスト実行の並列化 • 複数のExecutorを利用してテスト実行を並列化 • macOSが必要になるのはVRTだけなのでそれ以外をlinuxで実行すればコストも大幅down! • マシンの性能を上げる...?そしたらコストがもっとかかりそう
• ちょっと難しそう テスト実行の高速化 →テストの並列化を試してみる!
11 テスト並列化 プロジェクトのアーキテクチャ構成 モノレポのマルチパッケージ構成を採用
12 テスト並列化 プロジェクトのアーキテクチャ構成 モノレポのマルチパッケージ構成を採用
13 並列化してどれだけ削減できたのか?
14 テスト並列化 最終的な構成 ???
15 テスト並列化 最終的な構成 38分→9分!!!
16 テスト並列化 • 38分 x 13.5円/分(macOS) = 513円 コスト削減効果 従来
• (5分+4分) x 13.5円/分(macOS) = 121円 • (3分+5分+4分+5分+1分) x 1.8円/分(Linux) = 32.4円 • 合計153.4円 並列化後 →コストも約 7割削減!!!
17 テスト高速化もやりたい
18 テスト高速化 テスト高速化できないだろうか.... →調べてみたら記事がある!!!
19 テスト高速化
20 テスト高速化 ローカルで時間を計測してみた flutter testコマンド
21 テスト高速化 ローカルで時間を計測してみた flutter testコマンド テスト実行の高速化 →95%高速化!!!
22 テスト高速化 仕組みを調べてみたら.... https://github.com/flutter/flutter/issues/90225 https://github.com/flutter/flutter/issues/86722 テストを全て同一のmain関数に集め 実行すると高速化するらしい テストファイル毎に個別のIsolateを起動 していたのが1つのIsolateになるため
23 • シングルトンを用いる際に注意が必要 ◦ 普通に実行する際はテストファイル毎にインスタンスが再生成 ◦ very_good_cliでは全てのテストを同一のmain関数から実行されるのでテ ストファイル毎に初期化されない • VRTには効果が薄い
◦ VRTはレンダリングの計算に時間がかかっているので効果が出にくい ◦ --total-shards、--shard-indexのオプションを利用して分割が対策 テスト高速化 very_good_cliの利用で気を付けるポイント
24 まとめ
25 • パッケージ毎に実行するExecutorを並列化し実行を高速化 • 利用するリソースクラスを適切に選定することでコスト削減 • very_good_cliを適切に活用するとテストの実行自体も高速化できます • CIの実行状況は定期的に見直しましょう! ◦
皆さんは実行時間が38分とかになる前に改善しましょう! まとめ まとめ
26 終わりに Flutterの開発を一緒に行ってくれる 仲間を募集しています! 会社説明会 エントリー