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
PHPを始めて1年、レガシーシステムにどう向き合っているか #phpstudy
Search
mizuki_r
August 28, 2019
Technology
1
590
PHPを始めて1年、レガシーシステムにどう向き合っているか #phpstudy
2019-08-28 PHP勉強会 #140
mizuki_r
August 28, 2019
Tweet
Share
More Decks by mizuki_r
See All by mizuki_r
税理士ドットコムの 技術的挑戦 #tapioca_lt
rymizuki
0
240
モダンとレガシー #gotandaem
rymizuki
0
480
Vuexに型を付けるパターンを調べた #gotandajs
rymizuki
0
110
DockerでNodeの開発は厳しいのか? #gotandajs
rymizuki
3
340
マネージャー!きみは何者だ! #gotandaem
rymizuki
0
1.6k
物語を楽しむための物語論
rymizuki
0
470
失敗と向き合う
rymizuki
0
1.2k
社内勉強会と組織の成長を考える
rymizuki
1
2.4k
Webpackのビルド時間を1/3にした話 #gotandajs
rymizuki
9
4k
Other Decks in Technology
See All in Technology
20240717_イケコパ代表Copilot_in_Teams会社でこう使ってます
ponponmikankan
2
430
運用改善、不都合な真実 / 20240722-ssmjp-kaizen
opelab
17
8.4k
How to Think Like a Performance Engineer
csswizardry
4
590
Android研修【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
100
スレットハンティングについて知っておきたいこと
hacket
0
130
ペパボのオブザーバビリティ研修2024 説明資料
kesompochy
0
1.1k
Datadog Cloud SIEMを使ってAWS環境の脅威を可視化した話/lifeistech-datadog-cloud-siem
gidajun
0
480
地理情報とAPIのトレンド
nagix
0
160
セキュリティ研修 Day1【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
160
dxd2024-生成AIに振り回された3か月間の成功と失敗/dxd2024-link-and-motivation
lmi
2
260
CEL(Common Expression Language)で書いた条件にマッチしたIAM Policyを見つける / iam-policy-finder
fujiwara3
0
720
成長期に歩みを止めないための創業期の開発文化形成
mayah
6
420
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
13
430
Bash Introduction
62gerente
607
210k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
121
18k
In The Pink: A Labor of Love
frogandcode
139
22k
RailsConf 2023
tenderlove
16
720
Imperfection Machines: The Place of Print at Facebook
scottboms
262
13k
Pencils Down: Stop Designing & Start Developing
hursman
118
11k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
105
6.8k
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
26
2.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
28
2.2k
Producing Creativity
orderedlist
PRO
340
39k
Transcript
PHPを始めて1年、 レガシーシステムにどう向き合っているか 2019/08/28 PHP勉強会 #141 @mizuki_r
@mizuki_r 弁護士ドットコム株式会社 税理士ドットコム事業部/開発チーム チームマネージャー 2 なにもの PHP, Vue, Nuxt, Management,
Recruitment, etc…
今日話すこと
転職してそろそろ1年、 レガシーシステムにどう向き 合ってきたか
これまでの経歴
経歴 サーバサイドエンジニア(Perl) ↓ フロントエンドエンジニア(AngularJS, Vue) ↓ テックリード兼フロントエンド兼サーバ兼インフラ ↓ (転職)開発マネージャー(PHP)
経歴 • これまで触ったWeb App Frameworks • Perl: Amon2, Mojo •
Node: express, koa • DBとか • Perl: Teng, Aniki, DBIx • Node: Sequelize, TypeORM, mysql
個性 • ライトウェイトフレームワーク + 様々な モジュールの構成が得意 • パズルを組むのが好き • フルスタックフレームワークが苦手←
レガシーシステムとは?
レガシーシステムとは • 古いフレームワーク • 古いパラダイム • 積み重ねられた歴史的経緯 • 断絶した知識 •
現在のビジネスモデルとシステムの乖離 • モダンとレガシー https://speakerdeck.com/rymizuki/modantoregasi-number-gotandaem
運用しているサービス
税理士ドットコム • 日本最大級の税理士/税務ポータルサイト • 税理士紹介、Q&A、ニュースなど • サービス開始: 2006年 • エンジニア:
社員x1, 業務委託x5
システム • PHP 7.3 • Yii 1.1.20 • jQuery(一部Vue, 一部TypeScript)
• MySQL 5.6
ビジネス • 税理士紹介サービス • 税理士検索サービス • 税務相談サービス(Q&A) • メディア、広告など •
税理士が監修するものもある • etc
人がすくない\(^o^)/
課題
課題 • 使ってるかどうかもわからないルーティング • DBの知識があらゆるところに漏洩 • カラム50を超える重要なテーブル • 同じ目的で存在する複数のロジック •
違う目的が共存する巨大なロジック
れがしー!\(^o^)/
取り組み
課題 • フレームワークがEOL • フレームワークに依存したシステム • ミドルウェアに依存したシステム • ビジネスニーズとシステムの乖離
フレームワークがEOL End Of Life なんだよ\(^o^)/
フレームワークに依存したシステム • Routing, Request, Response, Session • あらゆるファイルに存在する Yii::app() •
システム的な境界は存在せず、あえて言う ならWAFの制約のみ • アップデートが辛い
ミドルウェアに依存したシステム • 特定のミドルウェアのバージョンとコード が密結合、分散しており、バージョンアッ プが困難 • DB構造がActiveRecordを通してViewに漏 洩している • SQLがあちこちでベタ書き
ビジネスニーズとシステムの乖離 • みんなが頭の中で思い描くシステムが違う • ビジネス側が想像してるシステム • 開発側が認識しているシステム • 実際に動いているシステム •
「こうしたい」という要望に対して、温度感やスケジュールが噛み 合わない • ビジネス側としては素早く判断して素早く動きたい要望でも、シス テム的に困難な場合がある
どうすんのこれ \(^o^)/
対策 • ビジネス領域の整理 • Diの導入 • ロガーの抽象化 • DBレイヤの抽象化 •
Web各レイヤの抽象化 • Routerの抽象化
ビジネス領域の整理 • 言葉の認識違いを地道に埋めていく • よくやる変更・ワークフローを認知し、分析の範囲の 目処をつけていく • 将来的にやりたいことから大きめの改善の予定を切っ ていく •
改修によって、ビジネス的な価値が最大化できるよう に計画にコミットする
Diの導入 • Ray.Di • DiはFWから独立したものを使いたい • Interfaceを定義して、FWのシステムを隠 蔽する
ロガーの抽象化 • `Yii::app()->log()` • 本当に至る所で使われている • Diを使ってLoggerのInterface経由でイン スタンスを注入する
DB層の抽象化 • ActiveRecord or Yii::app()->db • ActiveRecordを使うまでもないようなSQLか、 ActiveRecordでは賄いきれない規模のSQL • SQLを直接書く
or 外部のSQL Builderを使う • 自作した: https://github.com/rymizuki/ coral-sql
DB層の抽象化 2 (予定) • Repository層からのDBアクセスの隠蔽 • Specifiction Patternによる条件の抽象化 • Data
Access層を作り、SQL関連の処理を隠蔽 • unitテストを回してスキーマ変更を検知でき るようにする
各Web層の抽象化 • Controller層ではYiiを使う • Controllerからビジネスロジックを呼び出し、ビジ ネスロジックはYiiを使わない • UseCase/Interaction/Repository • Response(Renderer)は現状PHPだが、他のライブ
ラリに差し替えられるようにInterfaceで抽象してお く
Routerの抽象化 • ルーティングライブラリを差し替える(予 定) • 謎不要なルールなども残っており整理を始 める
なんとかできそう \(^o^)/
1年やってみて • PHP 7系は型が示せてハッピー • ドキュメントは公式を見ろ、PSRを把握しておけ • リクエスト単位でスコープが切られている • expressとかより抽象化しやすい
• 地道にやっていきの気持ち
まとめ • レガシーシステムに対する取り組みをご紹 介しました • 地道にやってくしかない
ご清聴ありがとうございました