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

既存の開発資産を活かしながら、 《新規開発コスト抑制》と《開発体験向上》 を両立する拡張アーキ...

既存の開発資産を活かしながら、 《新規開発コスト抑制》と《開発体験向上》 を両立する拡張アーキテクチャ事例

2025年5月8日(木)に開催された「技術的負債への向き合い PHP編|10年越えプロダクトを提供する3社が語ります!」イベントでの発表資料です。
イベントページ:https://codmon.connpass.com/event/347561/
登壇者:株式会社kubell 山下 祐

Avatar for kubell

kubell

May 11, 2025
Tweet

More Decks by kubell

Other Decks in Technology

Transcript

  1. 自己紹介 3 • 名前: 山下 祐 (Yamashita Tasuku) • 所属:

    株式会社kubell(旧Chatwork株式会社) ◦ 2019年12月〜 PHP部(入社) ◦ 2022年10月〜 モバイル管理画面チーム ◦ 2023年06月〜 認証チーム ◦ 2025年04月〜 SREグループ(現職) • SNS: ◦ GitHub: tasuku43 ◦ X: task2021
  2. 目次 CONTENTS 01 | 既存システムの構造と課題 02 | 技術的制約と解決アプローチ 03 |

    リファクタリングを後回しにするための戦略 04 | まとめ
  3. 目次 CONTENTS 01 | 既存システムの構造と課題 02 | 技術的制約と解決アプローチ 03 |

    リファクタリングを後回しにするための戦略 04 | まとめ
  4. • 独自Webフレームワーク: ECF ◦ Chatworkを10年以上支える基幹フレームワーク ◦ Smartyテンプレートエンジンを利用したHTML生成が主体 • 特徴 ◦

    フロントコントローラではなくページコントローラを前提にしたフレー ムワーク 既存システムの構造と課題 6
  5. 既存システムの構造と課題 13 ミドルウェアの仕 組みがない ため、Actionに到 達するまで の各エンドポイントの共 通 処 理が追加しにくい

    エンドポイントがフレーム ワークのルールに 縛 られてし まう ECFに 依 存 しているクラスが 存 在 するライブラリがいくつ か存在する
  6. • 簡単な背景 ◦ UIを刷新するため、FrontendではNext.jsを採用 ◦ フロントエンドから叩かれる新規のWeb APIが必要 • 実現したいこと ◦

    既存の実装を流用しつつ、フロントエンドの要件に沿ったWeb APIを提供したい ◦ Web APIの中身は既存ロジックの流用になるため、大きなリファ クタリングはスコープ外としたい ◦ チームの多くが既存システムに不慣れだったため、モダンフレー ムワークに近い開発体験を提供したい 既存システムの構造と課題 - バックエンド刷新の技術的要件 14
  7. 目次 CONTENTS 01 | 既存システムの構造と課題 02 | 技術的制約と解決アプローチ 03 |

    リファクタリングを後回しにするための戦略 04 | まとめ
  8. 技術的制約と解決アプローチ - 解決の方向性 23 フロントコントローラーパターンを 採 用 し、ECFの 伝 統

    的 なページコントロー ラーから脱却 フロントエンドが求めるURL設 計が可 能 に エンドポイントがフレームワークのルー ルに縛られてしまう
  9. 技術的制約と解決アプローチ - 解決の方向性 24 • 認証・認可処理 • DBコネクションの確率 • etc…

    • 認証認可処理は、ActionIndexでオーバーライド して「何もしない」ように • 認証認可処理は、後続のミドルウェアで実施する
  10. 技術的制約と解決アプローチ - 解決の方向性 25 • $_SERVER などの入力を PSR-7 ServerRequest に変換

    • Router・DI コンテナの初期化 • ActionIndex.php の責務は「Routerのセットアッ プ」と「非PSR → PSR変換」のみに • コントローラー的な責務
  11. 技術的制約と解決アプローチ - 解決の方向性 26 • ルートに一致した PSR-7 準拠の Controller を

    呼び出し • PSR-15 ミドルウェアチェーンの実 行 • コントローラー的な責務
  12. 目次 CONTENTS 01 | 既存システムの構造と課題 02 | 技術的制約と解決アプローチ 03 |

    リファクタリングを後回しにするための戦略 04 | まとめ
  13. HTTPリクエストをエミュレートするテスト基盤の整備 38 • Router・DI コンテナの初期化 • テストコードでの入力を PSR-7 ServerRequest に変換

    • Router・DI コンテナの初期化 • $_SERVER などの入力を PSR-7 ServerRequest に変換 • Routerに処理を委譲
  14. 目次 CONTENTS 01 | 既存システムの構造と課題 02 | 技術的制約と解決アプローチ 03 |

    リファクタリングを後回しにするための戦略 04 | まとめ