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
大規模FlutterプロジェクトのCI実行時間を約8割削減した話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
teamLab
PRO
August 01, 2025
Programming
0
940
大規模FlutterプロジェクトのCI実行時間を約8割削減した話
teamLab
PRO
August 01, 2025
Tweet
Share
More Decks by teamLab
See All by teamLab
TSKaigi Hokuriku - TypeScriptによる静的データガバナンス
teamlab
PRO
0
87
Reactの<ViewTransition>で作るUIアニメーション
teamlab
PRO
0
77
「めんどくさい」から考える クレジットカード入力フォームのUX
teamlab
PRO
1
200
複雑なUI設計への銀の弾丸 「オブジェクト指向UIデザイン」
teamlab
PRO
3
310
「人」から考える「アクセシビリティ」
teamlab
PRO
0
97
TSKaigi Hokuriku - TC39 Signals で描くJS/TS/フレームワークの未来の姿
teamlab
PRO
1
82
TSKaigi Hokuriku - oxc-transformとisolatedDeclarationsで 手に入れるtscなし型定義ファイル生成
teamlab
PRO
0
67
TSKaigi Hokuriku - tsc --init の設計思想の変化とその背景を追う
teamlab
PRO
0
77
ユーザーのアクションを伴うWidgetのGoldenTest
teamlab
PRO
0
230
Other Decks in Programming
See All in Programming
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
2
350
エラーログのマスキングの仕組みづくりに役立ったASTの話
kumoichi
0
220
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜
kuro_kurorrr
3
1.9k
encoding/json/v2のUnmarshalはこう変わった:内部実装で見る設計改善
kurakura0916
0
410
DSPy入門 Pythonで実現する自動プロンプト最適化 〜人手によるプロンプト調整からの卒業〜
seaturt1e
1
730
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
500
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
150
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
2.3k
受け入れテスト駆動開発(ATDD)×AI駆動開発 AI時代のATDDの取り組み方を考える
kztakasaki
2
580
猫の手も借りたい!ので AIエージェント猫を作って社内に放した話 Claude Code × Container Lambda の Slack Bot "DevNeko"
naramomi7
0
260
Go 1.26でのsliceのメモリアロケーション最適化 / Go 1.26 リリースパーティ #go126party
mazrean
1
390
grapheme_strrev関数が採択されました(あと雑感)
youkidearitai
PRO
1
220
Featured
See All Featured
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
320
Git: the NoSQL Database
bkeepers
PRO
432
66k
The Pragmatic Product Professional
lauravandoore
37
7.2k
Navigating Team Friction
lara
192
16k
New Earth Scene 8
popppiees
1
1.7k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
340
Tell your own story through comics
letsgokoyo
1
840
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
Ethics towards AI in product and experience design
skipperchong
2
220
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
260
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
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の開発を一緒に行ってくれる 仲間を募集しています! 会社説明会 エントリー