×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
リリース後21年目になる レガシーサービスに Laravelを導入した話 2022/01/26 #PHPTechCafe 株式会社ラクス 吉元和仁
Slide 2
Slide 2 text
自己紹介 所属・氏名 株式会社ラクス 第四開発部 吉元和仁(よしもとかずひと) 仕事 自社サービス「メールディーラー」の開発を担当
Slide 3
Slide 3 text
対象プロダクトについて
Slide 4
Slide 4 text
対象プロダクトについて
Slide 5
Slide 5 text
対象プロダクトについて ・2001年4月にサービス開始 ・およそ3ヶ月サイクルで新機能リリース
Slide 6
Slide 6 text
対象プロダクトについて ・機能が豊富な点がストロングポイント
Slide 7
Slide 7 text
プロダクトの課題
Slide 8
Slide 8 text
プロダクトの課題 ・グローバル変数を多用 ・ビジネスロジック と ビューロジックが密結合 ・HTML/CSS設計が破綻しており、変更容易性が極めて低い ・リリースを重ねるにつれて結合テスト稼働が増加している
Slide 9
Slide 9 text
レガシーコード改善戦略
Slide 10
Slide 10 text
レガシーコード改善戦略 ・レガシーコードに自動テストを導入し、変更容易性を向上する。 ・ビジネスロジックとビューロジックを分離し、保守性を向上する。 ・フロントエンド・バックエンドを並行開発できる状態にして、フロー効率を向 上する。
Slide 11
Slide 11 text
戦術
Slide 12
Slide 12 text
戦術① やること・やらないことを明文化 プロジェクトのスコープへの期待をマネジメントするにあたっては、何をやるの かと同じくらい、何をやらないかが重要だ。...開発チームが本当に重要なことだ けに集中できるようになるんだ。 (書籍「アジャイサムライ」より)
Slide 13
Slide 13 text
戦術① やること・やらないことを明文化 やること ・レガシーコードにユニットテストを導入する ・ビジネスロジック・ビューロジックの分離する ・ビューロジックのリライト、リアーキテクトする やらないこと ・ビジネスロジックはリライト・リアーキテクトしない (DDD、DAO、DTO,Valueオブジェクトの導入なども対象外)
Slide 14
Slide 14 text
戦術② レガシーコードに自動テストを導入 ■手順 (1) 自動テスト対象にする重要ロジックを選定 (2) PhpStorm のリファクタリング機能を使ってクラスメソッドに抽出 (3) コードレビュー (4) 抽出したクラスメソッドの自動テストを作成 (5) 自動テストのコードレビュー
Slide 15
Slide 15 text
戦略③ Laravelの導入 Laravelを導入することで、フロントエンド・バックエンド分離に必要な ライブラリ選定、設計コストを削減する。
Slide 16
Slide 16 text
戦略④ ADRパターンの導入 ADR(Action Domain Responder)パターンを採用する。
Slide 17
Slide 17 text
戦略④ ADRパターンの導入 Action 画面操作(URI)単位でActionクラスを実装する。 ドメインとレスポンダーを接続する。 Domain アクションに紐づくビジネスロジックを実装する。 抽出したクラスメソッドをDomainに実装する。 Responder Action,Domainから受け取ったデータを使ってHTTPレスポンスを構築する。
Slide 18
Slide 18 text
戦略④ ADRパターンの導入 ・詳しくは下記参照 ・Web「Paul M. Jones' original proposal of ADDR」 https://github.com/pmjones/adr ・書籍「PHPフレームワーク Laravel Webアプリケーション」
Slide 19
Slide 19 text
戦略⑤ フロントエンド・バックエンドの分業 フロントエンドチーム - テンプレート(Blade)、JS、CSSの実装を担当。 - 必要なデータは、Responderにダミーデータを実装してBladeに引き渡す。 バックエンドチーム - テンプレート(Blade)、JS、CSS以外の実装を担当。 - Responderに実装されたダミーデータを正式なデータに差し替えて行く。
Slide 20
Slide 20 text
結果
Slide 21
Slide 21 text
結果 ※リリース前なので中間報告となります。 ・IDEの機能でメソッド切り出しすることで、安全に自動テストを追加できた。 ・自動テストを追加できたことで、安全にビジネスロジックとビューロジックの 分離を行えた。 ・Laravel+ADRを導入したことで、設計に迷うことなくビジネスロジックとビュ ーロジックの分離に集中することができた。 ・フロントエンドチーム・バックエンドチームが協業して開発をすすめることが できた。
Slide 22
Slide 22 text
最後に ・レガシーサービスにフレームワーク導入する際は、Laravel+ADRおすすめ。
Slide 23
Slide 23 text
ご清聴ありがとうございました。