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

リリース後21年目になる レガシーサービスにLaravelを導入した話 / PHPTechCafe-2022-01-26

Dd672f13e7e17714700544cb355cbaba?s=47 kyoshimoto
January 26, 2022

リリース後21年目になる レガシーサービスにLaravelを導入した話 / PHPTechCafe-2022-01-26

2022/01/26 #PHPTechCafeのLT資料です。
https://rakus.connpass.com/event/232629/

Dd672f13e7e17714700544cb355cbaba?s=128

kyoshimoto

January 26, 2022
Tweet

More Decks by kyoshimoto

Other Decks in Technology

Transcript

  1. リリース後21年目になる レガシーサービスに Laravelを導入した話 2022/01/26 #PHPTechCafe 株式会社ラクス 吉元和仁

  2. 自己紹介 所属・氏名 株式会社ラクス 第四開発部 吉元和仁(よしもとかずひと) 仕事 自社サービス「メールディーラー」の開発を担当

  3. 対象プロダクトについて

  4. 対象プロダクトについて

  5. 対象プロダクトについて ・2001年4月にサービス開始 ・およそ3ヶ月サイクルで新機能リリース

  6. 対象プロダクトについて ・機能が豊富な点がストロングポイント

  7. プロダクトの課題

  8. プロダクトの課題 ・グローバル変数を多用 ・ビジネスロジック と ビューロジックが密結合 ・HTML/CSS設計が破綻しており、変更容易性が極めて低い ・リリースを重ねるにつれて結合テスト稼働が増加している

  9. レガシーコード改善戦略

  10. レガシーコード改善戦略 ・レガシーコードに自動テストを導入し、変更容易性を向上する。 ・ビジネスロジックとビューロジックを分離し、保守性を向上する。 ・フロントエンド・バックエンドを並行開発できる状態にして、フロー効率を向 上する。

  11. 戦術

  12. 戦術① やること・やらないことを明文化 プロジェクトのスコープへの期待をマネジメントするにあたっては、何をやるの かと同じくらい、何をやらないかが重要だ。...開発チームが本当に重要なことだ けに集中できるようになるんだ。 (書籍「アジャイサムライ」より)

  13. 戦術① やること・やらないことを明文化 やること ・レガシーコードにユニットテストを導入する ・ビジネスロジック・ビューロジックの分離する ・ビューロジックのリライト、リアーキテクトする やらないこと ・ビジネスロジックはリライト・リアーキテクトしない (DDD、DAO、DTO,Valueオブジェクトの導入なども対象外)

  14. 戦術② レガシーコードに自動テストを導入 ▪手順 (1) 自動テスト対象にする重要ロジックを選定 (2) PhpStorm のリファクタリング機能を使ってクラスメソッドに抽出 (3) コードレビュー

    (4) 抽出したクラスメソッドの自動テストを作成 (5) 自動テストのコードレビュー
  15. 戦略③ Laravelの導入 Laravelを導入することで、フロントエンド・バックエンド分離に必要な ライブラリ選定、設計コストを削減する。

  16. 戦略④ ADRパターンの導入 ADR(Action Domain Responder)パターンを採用する。

  17. 戦略④ ADRパターンの導入 Action 画面操作(URI)単位でActionクラスを実装する。 ドメインとレスポンダーを接続する。 Domain アクションに紐づくビジネスロジックを実装する。 抽出したクラスメソッドをDomainに実装する。 Responder Action,Domainから受け取ったデータを使ってHTTPレスポンスを構築する。

  18. 戦略④ ADRパターンの導入 ・詳しくは下記参照 ・Web「Paul M. Jones' original proposal of ADDR」

    https://github.com/pmjones/adr ・書籍「PHPフレームワーク Laravel Webアプリケーション」
  19. 戦略⑤ フロントエンド・バックエンドの分業 フロントエンドチーム - テンプレート(Blade)、JS、CSSの実装を担当。 - 必要なデータは、Responderにダミーデータを実装してBladeに引き渡す。 バックエンドチーム - テンプレート(Blade)、JS、CSS以外の実装を担当。

    - Responderに実装されたダミーデータを正式なデータに差し替えて行く。
  20. 結果

  21. 結果 ※リリース前なので中間報告となります。 ・IDEの機能でメソッド切り出しすることで、安全に自動テストを追加できた。 ・自動テストを追加できたことで、安全にビジネスロジックとビューロジックの 分離を行えた。 ・Laravel+ADRを導入したことで、設計に迷うことなくビジネスロジックとビュ ーロジックの分離に集中することができた。 ・フロントエンドチーム・バックエンドチームが協業して開発をすすめることが できた。

  22. 最後に ・レガシーサービスにフレームワーク導入する際は、Laravel+ADRおすすめ。

  23. ご清聴ありがとうございました。