Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PHPを始めて1年、レガシーシステムにどう向き合っているか #phpstudy
Search
mizuki_r
August 28, 2019
Technology
860
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHPを始めて1年、レガシーシステムにどう向き合っているか #phpstudy
2019-08-28 PHP勉強会 #140
mizuki_r
August 28, 2019
More Decks by mizuki_r
See All by mizuki_r
FrontendUp_新規事業で_Remixを採用した理由と対策.pdf
rymizuki
0
270
税理士ドットコムの 技術的挑戦 #tapioca_lt
rymizuki
0
320
モダンとレガシー #gotandaem
rymizuki
0
600
Vuexに型を付けるパターンを調べた #gotandajs
rymizuki
0
160
DockerでNodeの開発は厳しいのか? #gotandajs
rymizuki
3
430
マネージャー!きみは何者だ! #gotandaem
rymizuki
0
1.9k
物語を楽しむための物語論
rymizuki
0
570
失敗と向き合う
rymizuki
0
1.6k
社内勉強会と組織の成長を考える
rymizuki
1
2.8k
Other Decks in Technology
See All in Technology
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
sanghyuk
0
260
20260930_Gemma4_Hands-on
tsho
0
210
セルフサービスのオブザーバビリティ基盤をOpenTelemetryで作る / Building a Self-Service Observability Platform with OpenTelemetry
ymotongpoo
3
520
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
2
180
[2026 Oracle Technical Deep Dive] エンタープライズAIエージェントを支えるOCIソリューション。ラインナップと特徴を理解しよう! (2026年9月17日開催)
oracle4engineer
PRO
0
260
Claude Designがめちゃくちゃ便利なので使ってほしい
diggymo
0
200
行動するAIのためのオントロジー | DevRev — Encraft #26.pdf
dvrv_tknrszk
2
670
[2026-09-30]ロックンロールは鳴り止まないっ - 信頼性かまってちゃん - 「データ駆動を投げ捨ててまで。」追いかける信頼性改善に向けた取り組みの話
tosite
0
180
TiDBファミリーにDWHが新登場!! TiDB最新情報 / TiDB update 202609
yoshiakiyamasaki
0
190
営業オントロジーの作り方と、エージェントからの辿り方 ── ナレッジワークの現場から
kworkdev
PRO
1
230
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
leveragestech
PRO
0
140
OSC2026on_the-world-is-waiting-for-your-voice.pdf
naruoga
0
250
Featured
See All Featured
Music & Morning Musume
bryan
48
7.4k
Chasing Engaging Ingredients in Design
codingconduct
0
340
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
850
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
300
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
36k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
270
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
550
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
750
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
530
Claude Code のすすめ
schroneko
67
230k
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とかより抽象化しやすい
• 地道にやっていきの気持ち
まとめ • レガシーシステムに対する取り組みをご紹 介しました • 地道にやってくしかない
ご清聴ありがとうございました