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
「全部書き直す」をしない選択 ー 巨大SPAと同居しながら小さく始めるフレームワーク移行 ー ...
Search
コドモン開発チーム
February 12, 2026
0
8
「全部書き直す」をしない選択 ー 巨大SPAと同居しながら小さく始めるフレームワーク移行 ー / We Chose Incremental Refactoring Over a Complete Rewrite
コドモン開発チーム
February 12, 2026
Tweet
Share
More Decks by コドモン開発チーム
See All by コドモン開発チーム
「Reactを使って良かったこと」 を考えていく中で気づいたこと / insights-from-reflecting-on-react
codmoninc
0
5
レガシー共有バッチ基盤への挑戦 SREドリブンなリアーキテクチャリングの取り組み / Tackling the Legacy Shared Batch Infrastructure: An SRE-Driven Re-architecting Initiative
codmoninc
0
570
テスト自動化を進める上でのマインドセットとしてのXP(エクストリーム・プログラミング) / xp-mindset-for-test-automation
codmoninc
0
1.5k
語られた戦略を 語れる戦略へー共通言語を作るPdMの試み / making-strategy-shareable
codmoninc
7
6.1k
コンテナイメージ脆弱性検知の実践事例 ~ 基礎から応用まで ~ / practical-case-studies-in-container-image-vulnerability-detection
codmoninc
1
130
長期運用プロダクトこそ効くコンテキスト管理の妙 / The Art of Context Management for Long-Running Products
codmoninc
0
460
ECSとEFSを組み合わせた Batchサーバー デプロイ方法の模索 / Exploring deployment methods for a Batch server using ECS and EFS
codmoninc
3
120
(ほぼ)ウォーターフォール開発かつ (ほぼ)手動テストの環境で仕事してきたQAエンジニアが コドモンに入って驚いたこと / A QA Engineer's Culture Shock at Codmon
codmoninc
1
1.2k
PHPロゴの正しい使い方〜意外と知らない公式仕様〜 / how to properly use the php logo
codmoninc
0
420
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
320
Building Adaptive Systems
keathley
44
2.9k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
440
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
First, design no harm
axbom
PRO
2
1.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
So, you think you're a good person
axbom
PRO
2
1.9k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
100
A Tale of Four Properties
chriscoyier
162
24k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
200
Transcript
「全部書き直す」をしない選択 2026年2月12日 株式会社コドモン 吉田 芳明 ー 巨大SPAと同居しながら小さく始めるフレームワーク移行 ー
15年ほどSIerで情報通信・Web関連のエンジニアしてました。 中2娘と4歳息子の父。 好きな 牛乳で固まるデザート はフルーチェ。 吉田 芳明 (よしよし) 2022.09 コドモンに入社
ストリームアラインドチームに所属 2024.05 イネイブリング/機能横断系のチームへ 負荷対策、基盤改善、チーム伴走 etc. @yoshi4c4c CoDMON 自己紹介
コドモンのフロントエンド事情
コドモンのフロントエンド事情 CoDMON • メインプロダクト ◦ 10年前の技術で構成されたSPA ◦ モバイルアプリ: Vue +
Capacitor • マイクロサービス・新規事業 ◦ React
コドモンのフロントエンド事情 CoDMON • メインプロダクト ◦ 10年前の技術で構成されたSPA ◦ モバイルアプリ: Vue +
Capacitor • マイクロサービス・新規事業 ◦ React 本日の内容
10年前の技術で構成されたSPA 概ね
10年前の技術で構成されたSPA CoDMON 複雑なフラグの条件分岐/イベント/非同期の嵐 変更→フルリロード5秒待って動作確認 書くのも動かすのも時間かかる割に壊れやすい スタイルを変えると別画面が壊れる 少しずつ違う似たコード リロードで反映 UIテストはE2E グローバルなCSS
コピペ量産 手続き型 概ね
10年前の技術で構成されたSPA CoDMON リロードで反映 UIテストはE2E グローバルなCSS コピペ量産 手続き型 複雑なフラグの条件分岐/イベント/非同期の嵐 変更→フルリロード5秒待って動作確認 書くのも動かすのも時間かかる割に壊れやすい
スタイルを変えると別画面が壊れる 少しずつ違う似たコード 影響範囲 が読みづらく 不安 がつきまとう 開発結果の フィードバック が 遅い 概ね
近年のWeb/フレームワークの進化 CoDMON リロードで反映 UIテストはE2E グローバルなCSS コピペ量産 宣言的UI HMR (Hot Module
Replacement) Componentテスト, Playwright Scoped CSS など コンポーネント指向 手続き型
よし、これらの技術で 全部書き直そう!
よし、これらの技術で 全部書き直そう! とはならない
「全部書き直す」をしない選択 CoDMON • 巨大ゆえ、フルリプレイスは年単位 ⇨ 完了日ではなく 届け始められる日 を最短に • 市場/組織/技術動向は常に変化する
⇨ ”方針固めてやりぬく覚悟”より 変化の柔軟性 “完了する頃にはもう時代遅れ” 問題
"小さく" 始め、一歩ずつ進みたい
選ばなかった選択肢: 外につくり段階移行 CoDMON 現行ページ 新しい フレームワークで つくったページ /feature_new /feature 別URLで新サイトをつくり、
URL単位で切り替える
• 初期コスト・二重管理コスト大 ◦ 最初につくるものが多い → ヘッダ/ナビゲーション、グローバルステート etc. ◦ 全機能の移行完了まで二重にメンテし続ける必要がある •
SPAの体験への影響 ◦ 比較的ロードが ”重厚” なSPAなため、段階移行の ページの行き来でロードが頻発して体験が損なわれる 選ばなかった選択肢: 外につくり段階移行 CoDMON 現行ページ 新フレームワークで つくったページ /feature_new /feature
"小さく" 始め、一歩ずつ進みたい 再掲
そこで...
「同居」 ー マルチフレームワーク アプローチ ー
「同居」 - マルチフレームワーク アプローチ - CoDMON Webアプリケーション SPA ルーティング (動的な表示切り替え)
通常はひとつのフレームワークで 作ることが多い
Webアプリケーション 「同居」 - マルチフレームワーク アプローチ - CoDMON SPA ルーティング (動的な表示切り替え)
一部を別フレームワークで開発する
「同居」 - マルチフレームワーク アプローチ - CoDMON • 開発初期コストが小さい ◦ 共通部品/インフラ/デプロイフローすべて変更なし
• ユーザ体験がほぼ変わらない // ルータのページ遷移時の hook const app = createApp(component, { params }); app.mount(container); // divにマウント // ページ離脱時に app.unmount() を呼び出す SPAルータのページ遷移hookでマウント処理を差し込むだけ
入居 にはトラブルがつきもの
トラブルを避ける よりよい 入居 のポイント やりとりは仲介業者をはさむ / プライベート空間を確保する レガシーとの
やりとりは 仲介業者 をはさむ CoDMON 新環境 レガシー レガシーな モデル レガシーな 仕組み
大家さんとの直接取引で大丈夫? 新環境側に「レガシー対策コード」が そのつど増えて共通化につながらない 改善するとき、新環境も影響を受ける
中間層 やりとりは 仲介業者 をはさむ CoDMON 新環境 レガシー レガシーな モデル レガシーな
仕組み 中間層 を用意し、“腐敗防止層”とする 中間層1 レガシー構造の変換 中間層1の内容を Vueに仲介 (provide() etc.) 中間層2 主要部分はフレームワーク非依存 →Pure TS で書く 新環境はレガシー側の変更に影響をうけず、 IFが明確になることでテストもしやすくなる
プライベート空間 を確保する CoDMON .alert_content { margin: 0; // bootstrap 打ち消し
} h1 { font-size: 30px; } h2 { font-size: 24px; } h3 { font-size: 16px; } ... タグ指定 同居人でも、過度に 干渉しない ことは大事 グローバルCSSの「打ち消し」が横行 同居する側も既存スタイルを 考慮したCSSを書くの? 部品単位でスタイル確認しづらい
プライベート空間 を確保する CoDMON Shadow DOM により新旧の CSSを隔離 社内デザインシステムも CSS汚染によるデザイン崩れを 気にせず安心して導入
const MyCustomElement = defineCustomElement(vueComponent, { configureApp }); customElements.define('my-custom-element', MyCustomElement); VueでWeb Components化はとても簡単↓
CoDMON ポイントは「フレームワーク非依存」であること 将来的なフレームワーク変更・メジャーver.UP対応でも おなじ手段による 漸進的「引越し」ができる
「同居」のデメリット
同居のデメリット CoDMON • 依存のバンドルサイズが増える ◦ もともとページ単位のLazyloadであり、サイト全体は影響軽微 • 新旧で依存ライブラリの複数バージョン混在 ◦ そもそも新旧で重複するライブラリが少なく影響軽微
◦ 今後、グローバル/DOM関連でバッティングする場合は要対処 • 認知負荷増 〜 どっちのフレームワークで動いてるの? 〜 ◦ あえて「ページ」単位の移行のみに限定 ◦ SPAルータを見ればどちらかわかる
この環境で得たもの
CoDMON 影響範囲 が読みづらく 不安 がつきまとう 開発結果の フィードバック が 遅い リロードで反映
UIテストはE2E グローバルなCSS コピペ量産 手続き型 この環境で得たもの
CoDMON 影響範囲 が読みづらく 不安 がつきまとう 開発結果の フィードバック が 遅い リロードで反映
UIテストはE2E グローバルなCSS コピペ量産 手続き型 この環境で得たもの 宣言的UI HMR (Hot Module Replacement) Componentテスト, Playwright Scoped CSS コンポーネント指向 影響範囲が限定されたことによる 開発者の 安心 + AIとの 親和性 開発結果の 迅速 な フィードバック
まとめ
まとめ CoDMON • 巨大SPAのリプレイス ◦ ”完了する頃にはもう時代遅れ” 問題 ◦ 「同居」は小さく始める 現実解
になりうる • 入居時のポイント ◦ 中間層の設置とCSS分離でレガシーの影響を最小化 ◦ ↑をフレームワーク非依存で実現すると将来の「引越し」の 備えにもなる • レガシーだから...と進化をあきらめなくてもいい!
CoDMON コドモン採用ページ コドモンでは、ともに課題を紐解き、一歩一歩前に進んでいく 仲間を募集しています! 開発チームX
None