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
420
リリース後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
420
13年続くレガシーサービスを安全にリリースし続けるためのテスト戦略 / rakus-meetup-osaka-vol8-2020-08-05
kyoshimoto
4
1.9k
「始めるのをやめて、終わらせることを始める」ことを始めた開発チームの話 / Rakus Meetup Osaka 2020-02-05
kyoshimoto
17
9.1k
Chatdealerの高速開発を支えるLaravel
kyoshimoto
0
2.1k
Other Decks in Technology
See All in Technology
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
大幅アップデートされたRagas v0.2をキャッチアップ
os1ma
2
540
2024年にチャレンジしたことを振り返るぞ
mitchan
0
140
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
600
PHPからGoへのマイグレーション for DMMアフィリエイト
yabakokobayashi
1
170
Storage Browser for Amazon S3
miu_crescent
1
220
多領域インシデントマネジメントへの挑戦:ハードウェアとソフトウェアの融合が生む課題/Challenge to multidisciplinary incident management: Issues created by the fusion of hardware and software
bitkey
PRO
2
110
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
1
290
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
170
Oracle Cloudの生成AIサービスって実際どこまで使えるの? エンジニア目線で試してみた
minorun365
PRO
4
290
普通のエンジニアがLaravelコアチームメンバーになるまで
avosalmon
0
110
DevFest 2024 Incheon / Songdo - Compose UI 조합 심화
wisemuji
0
110
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
88
5.7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Speed Design
sergeychernyshev
25
670
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Building Better People: How to give real-time feedback that sticks.
wjessup
365
19k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Automating Front-end Workflow
addyosmani
1366
200k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
The Invisible Side of Design
smashingmag
298
50k
Why Our Code Smells
bkeepers
PRO
335
57k
Scaling GitHub
holman
458
140k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
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おすすめ。
ご清聴ありがとうございました。