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

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