PHPを始めて1年、レガシーシステムにどう向き合っているか #phpstudy
by
mizuki_r
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
PHPを始めて1年、 レガシーシステムにどう向き合っているか 2019/08/28 PHP勉強会 #141 @mizuki_r
Slide 2
Slide 2 text
@mizuki_r 弁護士ドットコム株式会社 税理士ドットコム事業部/開発チーム チームマネージャー 2 なにもの PHP, Vue, Nuxt, Management, Recruitment, etc…
Slide 3
Slide 3 text
今日話すこと
Slide 4
Slide 4 text
転職してそろそろ1年、 レガシーシステムにどう向き 合ってきたか
Slide 5
Slide 5 text
これまでの経歴
Slide 6
Slide 6 text
経歴 サーバサイドエンジニア(Perl) ↓ フロントエンドエンジニア(AngularJS, Vue) ↓ テックリード兼フロントエンド兼サーバ兼インフラ ↓ (転職)開発マネージャー(PHP)
Slide 7
Slide 7 text
経歴 • これまで触ったWeb App Frameworks • Perl: Amon2, Mojo • Node: express, koa • DBとか • Perl: Teng, Aniki, DBIx • Node: Sequelize, TypeORM, mysql
Slide 8
Slide 8 text
個性 • ライトウェイトフレームワーク + 様々な モジュールの構成が得意 • パズルを組むのが好き • フルスタックフレームワークが苦手←
Slide 9
Slide 9 text
レガシーシステムとは?
Slide 10
Slide 10 text
レガシーシステムとは • 古いフレームワーク • 古いパラダイム • 積み重ねられた歴史的経緯 • 断絶した知識 • 現在のビジネスモデルとシステムの乖離 • モダンとレガシー https://speakerdeck.com/rymizuki/modantoregasi-number-gotandaem
Slide 11
Slide 11 text
運用しているサービス
Slide 12
Slide 12 text
税理士ドットコム • 日本最大級の税理士/税務ポータルサイト • 税理士紹介、Q&A、ニュースなど • サービス開始: 2006年 • エンジニア: 社員x1, 業務委託x5
Slide 13
Slide 13 text
システム • PHP 7.3 • Yii 1.1.20 • jQuery(一部Vue, 一部TypeScript) • MySQL 5.6
Slide 14
Slide 14 text
ビジネス • 税理士紹介サービス • 税理士検索サービス • 税務相談サービス(Q&A) • メディア、広告など • 税理士が監修するものもある • etc
Slide 15
Slide 15 text
人がすくない\(^o^)/
Slide 16
Slide 16 text
課題
Slide 17
Slide 17 text
課題 • 使ってるかどうかもわからないルーティング • DBの知識があらゆるところに漏洩 • カラム50を超える重要なテーブル • 同じ目的で存在する複数のロジック • 違う目的が共存する巨大なロジック
Slide 18
Slide 18 text
れがしー!\(^o^)/
Slide 19
Slide 19 text
取り組み
Slide 20
Slide 20 text
課題 • フレームワークがEOL • フレームワークに依存したシステム • ミドルウェアに依存したシステム • ビジネスニーズとシステムの乖離
Slide 21
Slide 21 text
フレームワークがEOL End Of Life なんだよ\(^o^)/
Slide 22
Slide 22 text
フレームワークに依存したシステム • Routing, Request, Response, Session • あらゆるファイルに存在する Yii::app() • システム的な境界は存在せず、あえて言う ならWAFの制約のみ • アップデートが辛い
Slide 23
Slide 23 text
ミドルウェアに依存したシステム • 特定のミドルウェアのバージョンとコード が密結合、分散しており、バージョンアッ プが困難 • DB構造がActiveRecordを通してViewに漏 洩している • SQLがあちこちでベタ書き
Slide 24
Slide 24 text
ビジネスニーズとシステムの乖離 • みんなが頭の中で思い描くシステムが違う • ビジネス側が想像してるシステム • 開発側が認識しているシステム • 実際に動いているシステム • 「こうしたい」という要望に対して、温度感やスケジュールが噛み 合わない • ビジネス側としては素早く判断して素早く動きたい要望でも、シス テム的に困難な場合がある
Slide 25
Slide 25 text
どうすんのこれ \(^o^)/
Slide 26
Slide 26 text
対策 • ビジネス領域の整理 • Diの導入 • ロガーの抽象化 • DBレイヤの抽象化 • Web各レイヤの抽象化 • Routerの抽象化
Slide 27
Slide 27 text
ビジネス領域の整理 • 言葉の認識違いを地道に埋めていく • よくやる変更・ワークフローを認知し、分析の範囲の 目処をつけていく • 将来的にやりたいことから大きめの改善の予定を切っ ていく • 改修によって、ビジネス的な価値が最大化できるよう に計画にコミットする
Slide 28
Slide 28 text
Diの導入 • Ray.Di • DiはFWから独立したものを使いたい • Interfaceを定義して、FWのシステムを隠 蔽する
Slide 29
Slide 29 text
ロガーの抽象化 • `Yii::app()->log()` • 本当に至る所で使われている • Diを使ってLoggerのInterface経由でイン スタンスを注入する
Slide 30
Slide 30 text
DB層の抽象化 • ActiveRecord or Yii::app()->db • ActiveRecordを使うまでもないようなSQLか、 ActiveRecordでは賄いきれない規模のSQL • SQLを直接書く or 外部のSQL Builderを使う • 自作した: https://github.com/rymizuki/ coral-sql
Slide 31
Slide 31 text
DB層の抽象化 2 (予定) • Repository層からのDBアクセスの隠蔽 • Specifiction Patternによる条件の抽象化 • Data Access層を作り、SQL関連の処理を隠蔽 • unitテストを回してスキーマ変更を検知でき るようにする
Slide 32
Slide 32 text
各Web層の抽象化 • Controller層ではYiiを使う • Controllerからビジネスロジックを呼び出し、ビジ ネスロジックはYiiを使わない • UseCase/Interaction/Repository • Response(Renderer)は現状PHPだが、他のライブ ラリに差し替えられるようにInterfaceで抽象してお く
Slide 33
Slide 33 text
Routerの抽象化 • ルーティングライブラリを差し替える(予 定) • 謎不要なルールなども残っており整理を始 める
Slide 34
Slide 34 text
なんとかできそう \(^o^)/
Slide 35
Slide 35 text
1年やってみて • PHP 7系は型が示せてハッピー • ドキュメントは公式を見ろ、PSRを把握しておけ • リクエスト単位でスコープが切られている • expressとかより抽象化しやすい • 地道にやっていきの気持ち
Slide 36
Slide 36 text
まとめ • レガシーシステムに対する取り組みをご紹 介しました • 地道にやってくしかない
Slide 37
Slide 37 text
ご清聴ありがとうございました