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
840
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
250
税理士ドットコムの 技術的挑戦 #tapioca_lt
rymizuki
0
310
モダンとレガシー #gotandaem
rymizuki
0
600
Vuexに型を付けるパターンを調べた #gotandajs
rymizuki
0
150
DockerでNodeの開発は厳しいのか? #gotandajs
rymizuki
3
430
マネージャー!きみは何者だ! #gotandaem
rymizuki
0
1.8k
物語を楽しむための物語論
rymizuki
0
560
失敗と向き合う
rymizuki
0
1.6k
社内勉強会と組織の成長を考える
rymizuki
1
2.8k
Other Decks in Technology
See All in Technology
Road to SRE NEXTの今までとこれから
hiroyaonoe
0
310
インフラ寄りSREでも 開発に踏み出せる〜境界を越えてユーザー体験に向き合いたい〜
sansantech
PRO
2
3.8k
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
0
120
実装だけじゃない! CCA-F取得エンジニアが教えるClaude Code開発プロセス活用術
diggymo
2
690
「早く出す」より「事業に効く」 ── 顧客の業務サイクルから逆算するAI時代の二重ループ開発と「変化の設計者」 / devsumi2026
rakus_dev
1
240
CIで使うClaude
iwatatomoya
0
250
AI時代の EM への処方箋
staka121
PRO
0
140
Claude Code 珍プレー好プレー
shinyasaita
0
330
環境凍結という Toil を倒す -セルフサービス型 Ephemeral テスト環境の 設計と実践
shirouz
1
2.3k
知らん間に、回ってる
ming_ayami
0
560
【Claude Code】鹿野さんに聞く 私の推しの並行開発環境 大公開 / claude-code-parallel-2026-07-15
tonkotsuboy_com
11
7.1k
SRE依存からの脱却 運用を開 発チームへ移す、 フルサイ クル開 発体制の実践
joooee0000
0
2.7k
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
WCS-LA-2024
lcolladotor
0
680
Crafting Experiences
bethany
1
210
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
GraphQLとの向き合い方2022年版
quramy
50
15k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
230
KATA
mclloyd
PRO
35
15k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.6k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
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とかより抽象化しやすい
• 地道にやっていきの気持ち
まとめ • レガシーシステムに対する取り組みをご紹 介しました • 地道にやってくしかない
ご清聴ありがとうございました