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
サーバーサイドのビルド時間87倍高速化
Search
PLAID Tech
PRO
August 25, 2025
Programming
0
160
サーバーサイドのビルド時間87倍高速化
本スライドはRollupからRolldownに移行することによってビルド時間を劇的に改善し、UX、DXを改善した話です。
PLAID Tech
PRO
August 25, 2025
Tweet
Share
More Decks by PLAID Tech
See All by PLAID Tech
大量配信システムにおけるSLOの実践:「見えない」信頼性をSLOで可視化
plaidtech
PRO
0
700
AI時代の開発生産性を加速させるアーキテクチャ設計
plaidtech
PRO
3
560
積み上げられた技術資産と向き合いながら、プロダクトの信頼性をどう守るか
plaidtech
PRO
0
2.2k
Rollupのビルド時間高速化によるプレビュー表示速度改善とバンドラとASTを駆使したプロダクト開発の難しさ
plaidtech
PRO
1
260
早くて強い「リアルタイム解析基盤」から広げるマルチドメイン&プロダクト開発
plaidtech
PRO
1
420
月間180PBのストリーム処理されたイベントデータを使用した, KARTEのリアルタイムインタラクションマネジメント
plaidtech
PRO
0
730
固有技術の掛け算で事業推進に繋げるプロダクト開発
plaidtech
PRO
0
140
マルチプロダクトSaaSにおけるフェーズの違いや個人の強みを活かした組織づくり
plaidtech
PRO
0
900
6年の歴史×ペタバイト級のデータ基盤のチームを一体化する開発スタイル
plaidtech
PRO
4
250
Other Decks in Programming
See All in Programming
オホーツクでコミュニティを立ち上げた理由―地方出身プログラマの挑戦 / TechRAMEN 2025 Conference
lemonade_37
2
480
バイブコーディング × 設計思考
nogu66
0
120
実践 Dev Containers × Claude Code
touyu
1
220
AI時代のドメイン駆動設計-DDD実践におけるAI活用のあり方 / ddd-in-ai-era
minodriven
21
8.6k
The state patternの実践 個人開発で培ったpractice集
miyanokomiya
0
130
State of CSS 2025
benjaminkott
1
110
GUI操作LLMの最新動向: UI-TARSと関連論文紹介
kfujikawa
0
990
DockerからECSへ 〜 AWSの海に出る前に知っておきたいこと 〜
ota1022
5
1.7k
CEDEC2025 長期運営ゲームをあと10年続けるための0から始める自動テスト ~4000項目を50%自動化し、月1→毎日実行にした3年間~
akatsukigames_tech
0
140
TanStack DB ~状態管理の新しい考え方~
bmthd
2
180
MLH State of the League: 2026 Season
theycallmeswift
0
100
物語を動かす行動"量" #エンジニアニメ
konifar
14
5.3k
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
70
11k
Done Done
chrislema
185
16k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Why Our Code Smells
bkeepers
PRO
338
57k
How to train your dragon (web standard)
notwaldorf
96
6.2k
The Invisible Side of Design
smashingmag
301
51k
Side Projects
sachag
455
43k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Writing Fast Ruby
sferik
628
62k
Docker and Python
trallard
45
3.5k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
Transcript
© PLAID, Inc. サーバーサイドのビルド時間 87倍 高 速化 © PLAID, Inc.
株式会社プレイド 川 口 和也 2025-08-25 フロントエンドカンファレンス東京 x Vue Fes Japan コラボイベント
© PLAID, Inc. 自己 紹介 川 口 和也 (kazupon) Kazuya
Kawaguchi GitHub : @kazupon X : @kazu_pon BlueSky: @kazupon • 株式会社プレイド • Engineer • Developer Experimence チーム © PLAID, Inc. 2
© PLAID, Inc. KARTEについて © PLAID, Inc. 3 CX(顧客体験)プラットフォーム 一人
ひとりに合わせた 顧客体験を提供 WebやAppの訪問者の 行 動を 顧客ごとにリアルタイムに解析
© PLAID, Inc. プレイドの全体戦略 “マルチチャネル × 1st Party Customer Data
× リアルタイム” をワンストップで提供 するプラットフォーム © PLAID, Inc. 4 1st Party Customer Data 戦略策定/ 事業 ・ 組織開発 広告 市場調査/ 顧客調査 カスタマーサポート マーケティングオートメーション オフライン/OMO オンサイト マーケティング EmotionTech CX/ EX KARTE Signals Databeat KARTE RightSupport STUDIO ZERO KARTE Message KARTE TALK KARTE Web/App KARTE Blocks
© PLAID, Inc. 本 日 のアジェンダ 1 . はじめに 2
. フレックスエディタについて 3 . UXへ悪影響を与える 長 いビルド時間 4 . RollupからRolldownへの移 行 5 . ビルドパフォーマンスの改善 © PLAID, Inc. 5
© PLAID, Inc. 本 日 のアジェンダ 1 . はじめに 2
. フレックスエディタについて 3 . UXへ悪影響を与える 長 いビルド時間 4 . RollupからRolldownへの移 行 5 . ビルドパフォーマンスの改善 © PLAID, Inc. 6
© PLAID, Inc. © PLAID, Inc. 7 https://voidzero.dev/posts/customers-plaid
© PLAID, Inc. はじめに • プロダクトで使っているRollupを Rolldownへの移 行 によって ビルドパフォーマンスを改善した話
本 日 話すこと © PLAID, Inc. 8
© PLAID, Inc. 本 日 のアジェンダ 1 . はじめに 2
. フレックスエディタについて 3 . UXへ悪影響を与える 長 いビルド時間 4 . RollupからRolldownへの移 行 5 . ビルドパフォーマンスの改善 © PLAID, Inc. 9
© PLAID, Inc. フレックスエディタ コーディングスキル不要でア クション(施策)のフルカスタ マイズが可能なエディタ。 エディタUI と豊富なエレメ ント(コンポーネント)で、ア
クションを編集できる ノーコードで アクションを 編集できるエディタ © PLAID, Inc. 10
© PLAID, Inc. 本 日 のアジェンダ 1 . はじめに 2
. フレックスエディタについて 3 . UXへ悪影響を与える 長 いビルド時間 4 . RollupからRolldownへの移 行 5 . ビルドパフォーマンスの改善 © PLAID, Inc. 11
© PLAID, Inc. 異なる環境でのパフォーマンス要件 © PLAID, Inc. 12 • クライアントサイド(ブラウザ)側
エディタの編集したアクションをプレビュー(iframe)として表 示 させるケース 要件: プレビュー表 示 速度パフォーマンスを優先 • サーバーサイド側 エディタによるアクション編集内容をサーバー側で保存するケース 要件: Webサイトに配信させるJSのロードパフォーマンスを優先 フレックスエディタは裏側(コア)ではRollupを使ったプロダクト。 2つの異なる環境の要件にRollupを最適化させてビルドしている
© PLAID, Inc. クライアントサイドの最適化 © PLAID, Inc. 13 • 最適化
• tree-shaking 無効 • minify (コード圧縮) の無効化 • 事前バンドルテクニック • … など • ビルド平均時間: 460ms 詳細は公開されているスライドで 参考にしてください クライアントサイドでは Rollupに対する最適化を施してプレビュー表 示 速度 を Core Web Vitals の指標数値200msに近づけ、ストレスのない UX を維持 https://speakerdeck.com/plaidtech/rollup-perf-and-bundler-ast
© PLAID, Inc. サーバーサイドの最適化 © PLAID, Inc. 14 • minify
によるコード圧縮 • tree-shakingによる使っていないコードの削減 (DCE) サーバーサイドではJSのロードパフォーマンスを 高 めるためにRollup に対して以下の最適化を施す
© PLAID, Inc. サーバーサイドのビルドパフォーマンス状況 © PLAID, Inc. 15 しかしながら、ビルド時間 平均5〜10秒、時には20秒超えていた
ASTキャッシュを試みたが10%程度の改善であまり効果なし グラフ: プロダクション環境のDatadogによるビルド時間
© PLAID, Inc. 悪影響を与えるサーバーサイドのビルドパフォーマンス Core Web Vitals の インタラク ション
UI遅延指標 INP 2 0 0 ms 以下になっていない... 明らかに UX を損なう サーバー側もrequestが詰まる... サーバーサイドのビル ド時間が遅いと必然 とresponseが遅い... © PLAID, Inc. 16 ビルドが完了するまで 待たなくてはいけない...
© PLAID, Inc. シングルスレッド & イベント駆動なJavaScriptには CPU ヘビーな処理は苦 手 RollupのようなバンドラはCPU
コストが 高 い処理をする © PLAID, Inc. 17 Rollupバンドルプロセス: 公式ドキュメントの図より https://rollupjs.org/plugin-development/ • バンドラがする処理内容 • JavaScript / TypeScript コードの parse 処理 • Transform 処理 • Parse 処理されたコードの AST 変換 • Module Graph (tree) の構築 • Tree-shaking • Code spliting • Module Graph からのコード 生 成 • minify (特にCPUヘビー) Module graph
© PLAID, Inc. 本 日 のアジェンダ 1 . はじめに 2
. フレックスエディタについて 3 . UXへ悪影響を与える 長 いビルド時間 4 . RollupからRolldownへの移 行 5 . ビルドパフォーマンスの改善 © PLAID, Inc. 18
© PLAID, Inc. サーバーサイドのビルド時間が遅い問題の解決策 Rolldownに移 行 することで、 サーバーサイドのビルド時間 問題を解決することにした ©
PLAID, Inc. 19
© PLAID, Inc. Rolldownとは • Vue & Vite の作者Evan You
氏 がプロジェクトリーダーとして進める VoidZero社のOSSプロジェクト • 基盤はVoidZero社のOSSで進めている次世代JavaScriptツールチェイン Oxcを使って構築 • 2025/8/25 現在 v 1 . 0 . 0 -beta. 3 4 • 開発ロードマップ進捗 ( 5 / 6 milestone) • Rolldown のコア実装 自 体はほとんど完了しており、エッジケースなど が残っているのみ • 現在 Vite が Rolldown をインテグレーションしているフェーズ Rollupと互換APIを持った Rustで再実装された 高 速なバンドラ © PLAID, Inc. 20
© PLAID, Inc. Rolldown を選定した理由 © PLAID, Inc. 21 •
フレックスエディタのプロジェクトでは、内部 ライブラリパッケージのビルドにもRollupを 使っており、Rolldownに置き換えてパッケージ ビルド速度を10秒〜1分から100ms〜 7 秒まで 大 幅に短縮した • 筆者 OSS プロジェクトで Rollup から Rolldown に移 行 することでビルド速度を291倍の 高 速化 検証した結果、Rollupと互換APIを持ち、ビルド時間がRollupより 非 常 に 高 速で、ビルドされたモジュールが正しく動作することを確認 https://github.com/intlify/vue-i 1 8 n/actions/runs/ 1 2 6 4 4 5 1 9 4 5 0
© PLAID, Inc. サーバーサイドのRollupからRolldownへの移 行 方 法 © PLAID, Inc.
22 RollupとのAPI互換性という特性を活かして、import 構 文 の変換ロ ジック(Rolldownプラグイン)だけで済むようにした Before After プラグイン
© PLAID, Inc. サーバーサイドのRollupからRolldownへの移 行 方 法 © PLAID, Inc.
23 フレックエディタはRollupを使った専 用 コンパイラによって実現されて おり、バンドルしている (RollupをRollupでバンドルする!?) 愚直に Rolldown 向け固有ロジックでコンパイラ実装すると、そのメンテナンスが発 生 するためそれを避けたかった
© PLAID, Inc. サーバーサイドのRollupからRolldownへの移 行 方 法 © PLAID, Inc.
24 • ケース: minify oxc-minify が Rolldownに組み込みれて いるため@rollup/plugin-terserプラグイ ンではなく、config でoutput.minifyで設 定する RolldownはRollupにはない固有の設定やオプションがある場合は、条 件分岐させずそのまま設定するようにしている
© PLAID, Inc. 本 日 のアジェンダ 1 . はじめに 2
. フレックスエディタについて 3 . UXへ悪影響を与える 長 いビルド時間 4 . RollupからRolldownへの移 行 5 . ビルドパフォーマンスの改善 © PLAID, Inc. 25
© PLAID, Inc. サーバーサイドのビルドパフォーマンスの測定パターン © PLAID, Inc. 26 1 .
Rollup (minify なし) 2 . Rolldown (minify なし) 3 . Rollup + Terser (@rollup/plugin-terser) 4 . Rolldown + SWC (rollup-plugin-swc 3 ) 5 . Rolldown + 組み込みminify (oxc-minify) パフォーマンス改善具合を確認するため、Rollup/Rolldownとの 比 較だ けでなく、minifyの有無、minifyプラグインの種別による 比 較も 行 う https://github.com/intlify/vue-i 1 8 n/actions/runs/ 1 2 6 4 4 5 1 9 4 5 0
© PLAID, Inc. サーバーサイドのビルドパフォーマンスの測定環境 マシンスペック © PLAID, Inc. 27 •
index.tsx • App.svelte • gen.ts • customScript.ts • karte-template.json • props.json • variablesQuery.json • localVariablesQuery.json 施策(アクション)コード構成 • モデル: MacBook Pro 1 4 -inch, 2 0 2 1 • チップセット: Apple M 1 Max • メモリ: 64GB
© PLAID, Inc. サーバーサイドのビルド速度パフォーマンス測定結果 © PLAID, Inc. 28 測定内容 ビルド最遅時間
ビルド最速時間 ビルド平均時間 Rollup (minifyなし) 5 6 1 ms 2 0 5 ms 2 3 6 ms Rolldown (minifyなし) 1 1 3 ms 2 3 ms 3 3 ms Rollup + Terser 2 4 2 4 ms 9 5 9 ms 1 1 5 0 ms Rolldown + SWC 2 3 5 ms 1 0 7 ms 1 2 5 ms Rolldown + 組み込み minify 1 4 4 ms 2 8 ms 4 0 ms • Rolldownの最速時間とRollupの最遅時間との 比 較: 約24倍、平均約9倍 • Rolldown+組み込みminifyの最速時間とRollup+Terserの最遅時間との 比 較: 約87倍、平均約29倍
© PLAID, Inc. サーバーサイドのバンドルファイルサイズの測定 © PLAID, Inc. 29 測定内容 Minifyファイルサイズ
Gzipファイルサイズ Rollup + Terser 9 2 . 1 5 KB 3 1 . 3 8 KB Rolldown + SWC 1 1 4 . 7 3 KB 3 9 . 1 1 KB Rolldown + 組み込みminify 1 2 2 . 0 9 KB 4 0 . 3 5 KB • Rolldown+組み込みminifyは、Rollup+Terserと 比 較して約20 ~ 25%バンドルサイ ズが 大 きくなった • 大 きくなってしまっている原因は、Rolldown組み込みminifyであるoxc-minifyの最 適化が現時点で完全に対応していないため (Terserすごい!) https://github.com/vitejs/rolldown-vite/issues/ 1 5 5 #issuecomment- 2 8 5 6 9 9 8 5 6 4
© PLAID, Inc. 最終的にサーバサイドのビルドにRolldown採 用 した理由 © PLAID, Inc. 30
サーバサイドでのRolldownにすると現 行 のRollupベースのビルドより 20~25%ファイルサイズが 大 きくなってしまうが今回はトレードオフとして採 用 • フレックエディタのアーキテクチャの初期設計の段階で、すでにアクションは 1/10 に削減 済み • Rolldownによるビルド 高 速化に伴うファイルサイズ増加による影響よりも、UX / DX の改 善することによるビジネス価値できるインパクトが 大 きい
© PLAID, Inc. プロダクションビルドパフォーマンス © PLAID, Inc. 31 5〜10秒かかっていたビルド時間を数百ms単位のビルド時間に改善。 エディタのUXを改善し、
見 積していたサーバーコストの削減 グラフ: Rolldown移 行 後のプロダクション環境のDatadogによるビルド時間
© PLAID, Inc. この発表の詳細はブログ記事で! 今回のセッションでは詳細 説明しきれないので、 ブログを参考にしてくださ い! © PLAID,
Inc. 32 https://tech.plaid.co.jp/perf-server-build
© PLAID, Inc. まとめ © PLAID, Inc. 33
© PLAID, Inc. まとめ 今 日 のセッションでは 以下について話した © PLAID,
Inc. 34 • 課題: フレックエディタのサーバサイドのビルド時間 が 長 いためエディタのUXを損なっていた • 解決策: Rolldownに移 行 することでビルドパフォー マンスの改善 • 結果: Rolldownに移 行 することによって、プロダク ション環境でのビルド時間を 大 幅に改善 • 施策をフレックエディタで保存すると、Rollupの最 適化そしてJavaScriptのアーキテクチャの限界によ り、5-10秒(最 大 20秒超)待たされていた。 • パフォーマンス測定結果、最 大 87倍、平均29倍とい うビルド 高 速化を実現。minify最適化がまだ完全で はないが、トレードオフとしてUX/DXを優先。 • 実際プロダクション環境に投 入 した結果、数百msま でビルドを 高 速化することができた。
© PLAID, Inc. まとめ 今 日 のセッションでは 以下について話した © PLAID,
Inc. 35 • 課題: フレックエディタのサーバサイドのビルド時間 が 長 いためエディタのUXを損なっていた • 解決策: Rolldownに移 行 することでビルドパフォー マンスの改善 • 結果: Rolldownに移 行 することによって、プロダク ション環境でのビルド時間を 大 幅に改善 • 施策をフレックエディタで保存すると、Rollupの最 適化そしてJavaScriptのアーキテクチャの限界によ り、5-10秒(最 大 20秒超)待たされていた • パフォーマンス測定結果、最 大 87倍、平均29倍とい うビルド 高 速化を実現。minify最適化がまだ完全で はないが、トレードオフとしてUX/DXを優先 • 実際プロダクション環境に投 入 した結果、数百msま でビルド 高 速化できた
© PLAID, Inc. ご清聴ありがとうございました! © PLAID, Inc. 36
None