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
730
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
FrontendUp_新規事業で_Remixを採用した理由と対策.pdf
rymizuki
0
190
税理士ドットコムの 技術的挑戦 #tapioca_lt
rymizuki
0
270
モダンとレガシー #gotandaem
rymizuki
0
550
Vuexに型を付けるパターンを調べた #gotandajs
rymizuki
0
120
DockerでNodeの開発は厳しいのか? #gotandajs
rymizuki
3
390
マネージャー!きみは何者だ! #gotandaem
rymizuki
0
1.7k
物語を楽しむための物語論
rymizuki
0
520
失敗と向き合う
rymizuki
0
1.4k
社内勉強会と組織の成長を考える
rymizuki
1
2.7k
Other Decks in Technology
See All in Technology
スプリントレトロスペクティブはチーム観察の宝庫? 〜チームの衝突レベルに合わせたアプローチ仮説!〜
electricsatie
1
150
MCPで変わる Amebaデザインシステム「Spindle」の開発
spindle
PRO
3
2.3k
退屈なことはDevinにやらせよう〜〜Devin APIを使ったVisual Regression Testの自動追加〜
kawamataryo
4
1.1k
ヘブンバーンズレッドにおける、世界観を活かしたミニゲーム企画の作り方
gree_tech
PRO
0
440
カミナシ社の『ID管理基盤』製品内製 - その意思決定背景と2年間の進化 #AWSUnicornDay / Kaminashi ID - The Big Whys
kaminashi
3
730
Function Body Macros で、SwiftUI の View に Accessibility Identifier を自動付与する/Function Body Macros: Autogenerate accessibility identifiers for SwiftUI Views
miichan
2
150
バッチ処理で悩むバックエンドエンジニアに捧げるAWS Glue入門
diggymo
3
100
制約理論(ToC)入門
recruitengineers
PRO
9
3.7k
実践データベース設計 ①データベース設計概論
recruitengineers
PRO
4
2k
「魔法少女まどか☆マギカ Magia Exedra」のグローバル展開を支える、開発チームと翻訳チームの「意識しない協創」を実現するローカライズシステム
gree_tech
PRO
0
440
クラウドセキュリティを支える技術と運用の最前線 / Cutting-edge Technologies and Operations Supporting Cloud Security
yuj1osm
2
260
kubellが考える戦略と実行を繋ぐ活用ファーストのデータ分析基盤
kubell_hr
0
130
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
70
11k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
Docker and Python
trallard
45
3.5k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Gamification - CAS2011
davidbonilla
81
5.4k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
11
1.1k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
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とかより抽象化しやすい
• 地道にやっていきの気持ち
まとめ • レガシーシステムに対する取り組みをご紹 介しました • 地道にやってくしかない
ご清聴ありがとうございました