Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「全部書き直す」をしない選択 ー 巨大SPAと同居しながら小さく始めるフレームワーク移行 ー ...

「全部書き直す」をしない選択 ー 巨大SPAと同居しながら小さく始めるフレームワーク移行 ー / We Chose Incremental Refactoring Over a Complete Rewrite

Avatar for コドモン開発チーム

コドモン開発チーム

February 12, 2026
Tweet

More Decks by コドモン開発チーム

Transcript

  1. 15年ほどSIerで情報通信・Web関連のエンジニアしてました。 中2娘と4歳息子の父。 好きな 牛乳で固まるデザート はフルーチェ。 吉田 芳明 (よしよし) 2022.09 コドモンに入社

    ストリームアラインドチームに所属 2024.05 イネイブリング/機能横断系のチームへ 負荷対策、基盤改善、チーム伴走 etc. @yoshi4c4c CoDMON 自己紹介
  2. 近年のWeb/フレームワークの進化 CoDMON リロードで反映 UIテストはE2E グローバルなCSS コピペ量産 宣言的UI HMR (Hot Module

    Replacement) Componentテスト, Playwright Scoped CSS など コンポーネント指向 手続き型
  3. • 初期コスト・二重管理コスト大 ◦ 最初につくるものが多い → ヘッダ/ナビゲーション、グローバルステート etc. ◦ 全機能の移行完了まで二重にメンテし続ける必要がある •

    SPAの体験への影響 ◦ 比較的ロードが ”重厚” なSPAなため、段階移行の ページの行き来でロードが頻発して体験が損なわれる 選ばなかった選択肢: 外につくり段階移行 CoDMON 現行ページ 新フレームワークで つくったページ /feature_new /feature
  4. 「同居」 - マルチフレームワーク アプローチ - CoDMON • 開発初期コストが小さい ◦ 共通部品/インフラ/デプロイフローすべて変更なし

    • ユーザ体験がほぼ変わらない // ルータのページ遷移時の hook const app = createApp(component, { params }); app.mount(container); // divにマウント // ページ離脱時に app.unmount() を呼び出す SPAルータのページ遷移hookでマウント処理を差し込むだけ
  5. やりとりは 仲介業者 をはさむ CoDMON 新環境 レガシー レガシーな モデル レガシーな 仕組み

    大家さんとの直接取引で大丈夫? 新環境側に「レガシー対策コード」が そのつど増えて共通化につながらない 改善するとき、新環境も影響を受ける
  6. 中間層 やりとりは 仲介業者 をはさむ CoDMON 新環境 レガシー レガシーな モデル レガシーな

    仕組み 中間層 を用意し、“腐敗防止層”とする 中間層1 レガシー構造の変換 中間層1の内容を Vueに仲介 (provide() etc.) 中間層2 主要部分はフレームワーク非依存 →Pure TS で書く 新環境はレガシー側の変更に影響をうけず、 IFが明確になることでテストもしやすくなる
  7. プライベート空間 を確保する CoDMON .alert_content { margin: 0; // bootstrap 打ち消し

    } h1 { font-size: 30px; } h2 { font-size: 24px; } h3 { font-size: 16px; } ... タグ指定 同居人でも、過度に 干渉しない ことは大事 グローバルCSSの「打ち消し」が横行 同居する側も既存スタイルを 考慮したCSSを書くの? 部品単位でスタイル確認しづらい
  8. プライベート空間 を確保する CoDMON Shadow DOM により新旧の CSSを隔離 社内デザインシステムも CSS汚染によるデザイン崩れを 気にせず安心して導入

    const MyCustomElement = defineCustomElement(vueComponent, { configureApp }); customElements.define('my-custom-element', MyCustomElement); VueでWeb Components化はとても簡単↓
  9. 同居のデメリット CoDMON • 依存のバンドルサイズが増える ◦ もともとページ単位のLazyloadであり、サイト全体は影響軽微 • 新旧で依存ライブラリの複数バージョン混在 ◦ そもそも新旧で重複するライブラリが少なく影響軽微

    ◦ 今後、グローバル/DOM関連でバッティングする場合は要対処 • 認知負荷増 〜 どっちのフレームワークで動いてるの? 〜 ◦ あえて「ページ」単位の移行のみに限定 ◦ SPAルータを見ればどちらかわかる
  10. CoDMON 影響範囲 が読みづらく 不安 がつきまとう 開発結果の フィードバック が 遅い リロードで反映

    UIテストはE2E グローバルなCSS コピペ量産 手続き型 この環境で得たもの
  11. CoDMON 影響範囲 が読みづらく 不安 がつきまとう 開発結果の フィードバック が 遅い リロードで反映

    UIテストはE2E グローバルなCSS コピペ量産 手続き型 この環境で得たもの 宣言的UI HMR (Hot Module Replacement) Componentテスト, Playwright Scoped CSS コンポーネント指向 影響範囲が限定されたことによる 開発者の 安心 + AIとの 親和性 開発結果の 迅速 な フィードバック
  12. まとめ CoDMON • 巨大SPAのリプレイス ◦ ”完了する頃にはもう時代遅れ” 問題 ◦ 「同居」は小さく始める 現実解

    になりうる • 入居時のポイント ◦ 中間層の設置とCSS分離でレガシーの影響を最小化 ◦ ↑をフレームワーク非依存で実現すると将来の「引越し」の 備えにもなる • レガシーだから...と進化をあきらめなくてもいい!