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
470
リリース後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
480
13年続くレガシーサービスを安全にリリースし続けるためのテスト戦略 / rakus-meetup-osaka-vol8-2020-08-05
kyoshimoto
4
2.1k
「始めるのをやめて、終わらせることを始める」ことを始めた開発チームの話 / Rakus Meetup Osaka 2020-02-05
kyoshimoto
17
9.5k
Chatdealerの高速開発を支えるLaravel
kyoshimoto
0
2.2k
Other Decks in Technology
See All in Technology
In Praise of "Normal" Engineers (LDX3)
charity
2
1.2k
kubellが挑むBPaaSにおける、人とAIエージェントによるサービス開発の最前線と技術展望
kubell_hr
1
390
AI技術トレンド勉強会 #1MCPの基礎と実務での応用
nisei_k
1
240
ハノーバーメッセ2025座談会.pdf
iotcomjpadmin
0
150
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
53
32k
実践! AIエージェント導入記
1mono2prod
0
140
ObsidianをMCP連携させてみる
ttnyt8701
2
140
Microsoft Build 2025 技術/製品動向 for Microsoft Startup Tech Community
torumakabe
1
200
Definition of Done
kawaguti
PRO
6
460
キャディでのApache Iceberg, Trino採用事例 -Apache Iceberg and Trino Usecase in CADDi--
caddi_eng
0
170
AWS CDK 実践的アプローチ N選 / aws-cdk-practical-approaches
gotok365
4
480
エンジニア向け技術スタック情報
kauche
0
110
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
4
200
Designing Experiences People Love
moore
142
24k
A Tale of Four Properties
chriscoyier
159
23k
Making the Leap to Tech Lead
cromwellryan
134
9.3k
How to Ace a Technical Interview
jacobian
277
23k
Git: the NoSQL Database
bkeepers
PRO
430
65k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Unsuck your backbone
ammeep
671
58k
Designing for humans not robots
tammielis
253
25k
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おすすめ。
ご清聴ありがとうございました。