Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
リリース後21年目になる レガシーサービスにLaravelを導入した話 / PHPTechCa...
Search
kyoshimoto
January 26, 2022
Technology
0
410
リリース後21年目になる レガシーサービスにLaravelを導入した話 / PHPTechCafe-2022-01-26
2022/01/26 #PHPTechCafeのLT資料です。
https://rakus.connpass.com/event/232629/
kyoshimoto
January 26, 2022
Tweet
Share
More Decks by kyoshimoto
See All by kyoshimoto
視座とアジャイル / shiza_and_agile
kyoshimoto
0
400
13年続くレガシーサービスを安全にリリースし続けるためのテスト戦略 / rakus-meetup-osaka-vol8-2020-08-05
kyoshimoto
4
1.9k
「始めるのをやめて、終わらせることを始める」ことを始めた開発チームの話 / Rakus Meetup Osaka 2020-02-05
kyoshimoto
17
8.9k
Chatdealerの高速開発を支えるLaravel
kyoshimoto
0
2k
Other Decks in Technology
See All in Technology
Vespaを利用したテクいベクトル検索
szdr
2
200
tenntennはなんでnewmoにnew社したの? - YAPC::Hakodate 2024
tenntenn
PRO
0
330
Unlearn Modularity
lemiorhan
6
200
とある事業会社にとっての Kaggler の魅力
hakubishin3
7
1.2k
組織デバイスのための効率的なアプリケーション更新戦略
kenchan0130
0
360
プロダクト開発の貢献をアピールするための目標設計や認知活動 / Goal design and recognition activities to promote product development contributions.
oomatomo
5
960
Qdrant を用いた検索改善施策の紹介 / Search Engineering Tech Talk 2024 Summer
visional_engineering_and_design
1
230
入門 バックアップ
ryuichi1208
18
7.2k
ゼロから実装まで!機械学習入門
natsuki0726
0
220
Microsoft 365 でデータセキュリティを強化しよう
sophiakunii
2
360
それでもやっぱり ExpressRoute が好き!
skmkzyk
0
410
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
5
48k
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
46
4.9k
Happy Clients
brianwarren
97
6.7k
A Philosophy of Restraint
colly
203
16k
Typedesign – Prime Four
hannesfritz
39
2.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
504
140k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
2
310
Unsuck your backbone
ammeep
668
57k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
110
6.9k
RailsConf 2023
tenderlove
28
850
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
The Invisible Customer
myddelton
119
13k
Transcript
リリース後21年目になる レガシーサービスに Laravelを導入した話 2022/01/26 #PHPTechCafe 株式会社ラクス 吉元和仁
自己紹介 所属・氏名 株式会社ラクス 第四開発部 吉元和仁(よしもとかずひと) 仕事 自社サービス「メールディーラー」の開発を担当
対象プロダクトについて
対象プロダクトについて
対象プロダクトについて ・2001年4月にサービス開始 ・およそ3ヶ月サイクルで新機能リリース
対象プロダクトについて ・機能が豊富な点がストロングポイント
プロダクトの課題
プロダクトの課題 ・グローバル変数を多用 ・ビジネスロジック と ビューロジックが密結合 ・HTML/CSS設計が破綻しており、変更容易性が極めて低い ・リリースを重ねるにつれて結合テスト稼働が増加している
レガシーコード改善戦略
レガシーコード改善戦略 ・レガシーコードに自動テストを導入し、変更容易性を向上する。 ・ビジネスロジックとビューロジックを分離し、保守性を向上する。 ・フロントエンド・バックエンドを並行開発できる状態にして、フロー効率を向 上する。
戦術
戦術① やること・やらないことを明文化 プロジェクトのスコープへの期待をマネジメントするにあたっては、何をやるの かと同じくらい、何をやらないかが重要だ。...開発チームが本当に重要なことだ けに集中できるようになるんだ。 (書籍「アジャイサムライ」より)
戦術① やること・やらないことを明文化 やること ・レガシーコードにユニットテストを導入する ・ビジネスロジック・ビューロジックの分離する ・ビューロジックのリライト、リアーキテクトする やらないこと ・ビジネスロジックはリライト・リアーキテクトしない (DDD、DAO、DTO,Valueオブジェクトの導入なども対象外)
戦術② レガシーコードに自動テストを導入 ▪手順 (1) 自動テスト対象にする重要ロジックを選定 (2) PhpStorm のリファクタリング機能を使ってクラスメソッドに抽出 (3) コードレビュー
(4) 抽出したクラスメソッドの自動テストを作成 (5) 自動テストのコードレビュー
戦略③ Laravelの導入 Laravelを導入することで、フロントエンド・バックエンド分離に必要な ライブラリ選定、設計コストを削減する。
戦略④ ADRパターンの導入 ADR(Action Domain Responder)パターンを採用する。
戦略④ ADRパターンの導入 Action 画面操作(URI)単位でActionクラスを実装する。 ドメインとレスポンダーを接続する。 Domain アクションに紐づくビジネスロジックを実装する。 抽出したクラスメソッドをDomainに実装する。 Responder Action,Domainから受け取ったデータを使ってHTTPレスポンスを構築する。
戦略④ ADRパターンの導入 ・詳しくは下記参照 ・Web「Paul M. Jones' original proposal of ADDR」
https://github.com/pmjones/adr ・書籍「PHPフレームワーク Laravel Webアプリケーション」
戦略⑤ フロントエンド・バックエンドの分業 フロントエンドチーム - テンプレート(Blade)、JS、CSSの実装を担当。 - 必要なデータは、Responderにダミーデータを実装してBladeに引き渡す。 バックエンドチーム - テンプレート(Blade)、JS、CSS以外の実装を担当。
- Responderに実装されたダミーデータを正式なデータに差し替えて行く。
結果
結果 ※リリース前なので中間報告となります。 ・IDEの機能でメソッド切り出しすることで、安全に自動テストを追加できた。 ・自動テストを追加できたことで、安全にビジネスロジックとビューロジックの 分離を行えた。 ・Laravel+ADRを導入したことで、設計に迷うことなくビジネスロジックとビュ ーロジックの分離に集中することができた。 ・フロントエンドチーム・バックエンドチームが協業して開発をすすめることが できた。
最後に ・レガシーサービスにフレームワーク導入する際は、Laravel+ADRおすすめ。
ご清聴ありがとうございました。