$30 off During Our Annual Pro Sale. View Details »

PHPを始めて1年、レガシーシステムにどう向き合っているか #phpstudy

mizuki_r
August 28, 2019

PHPを始めて1年、レガシーシステムにどう向き合っているか #phpstudy

2019-08-28 PHP勉強会 #140

mizuki_r

August 28, 2019
Tweet

More Decks by mizuki_r

Other Decks in Technology

Transcript

  1. PHPを始めて1年、
    レガシーシステムにどう向き合っているか
    2019/08/28 PHP勉強会 #141
    @mizuki_r

    View Slide

  2. @mizuki_r
    弁護士ドットコム株式会社
    税理士ドットコム事業部/開発チーム
    チームマネージャー
    2
    なにもの
    PHP, Vue, Nuxt, Management,
    Recruitment, etc…

    View Slide

  3. 今日話すこと

    View Slide

  4. 転職してそろそろ1年、
    レガシーシステムにどう向き
    合ってきたか

    View Slide

  5. これまでの経歴

    View Slide

  6. 経歴
    サーバサイドエンジニア(Perl)

    フロントエンドエンジニア(AngularJS, Vue)

    テックリード兼フロントエンド兼サーバ兼インフラ

    (転職)開発マネージャー(PHP)

    View Slide

  7. 経歴
    • これまで触ったWeb App Frameworks
    • Perl: Amon2, Mojo
    • Node: express, koa
    • DBとか
    • Perl: Teng, Aniki, DBIx
    • Node: Sequelize, TypeORM, mysql

    View Slide

  8. 個性
    • ライトウェイトフレームワーク + 様々な
    モジュールの構成が得意
    • パズルを組むのが好き
    • フルスタックフレームワークが苦手←

    View Slide

  9. レガシーシステムとは?

    View Slide

  10. レガシーシステムとは
    • 古いフレームワーク
    • 古いパラダイム
    • 積み重ねられた歴史的経緯
    • 断絶した知識
    • 現在のビジネスモデルとシステムの乖離
    • モダンとレガシー

    https://speakerdeck.com/rymizuki/modantoregasi-number-gotandaem

    View Slide

  11. 運用しているサービス

    View Slide

  12. 税理士ドットコム
    • 日本最大級の税理士/税務ポータルサイト
    • 税理士紹介、Q&A、ニュースなど
    • サービス開始: 2006年
    • エンジニア: 社員x1, 業務委託x5

    View Slide

  13. システム
    • PHP 7.3
    • Yii 1.1.20
    • jQuery(一部Vue, 一部TypeScript)
    • MySQL 5.6

    View Slide

  14. ビジネス
    • 税理士紹介サービス
    • 税理士検索サービス
    • 税務相談サービス(Q&A)
    • メディア、広告など
    • 税理士が監修するものもある
    • etc

    View Slide

  15. 人がすくない\(^o^)/

    View Slide

  16. 課題

    View Slide

  17. 課題
    • 使ってるかどうかもわからないルーティング
    • DBの知識があらゆるところに漏洩
    • カラム50を超える重要なテーブル
    • 同じ目的で存在する複数のロジック
    • 違う目的が共存する巨大なロジック

    View Slide

  18. れがしー!\(^o^)/

    View Slide

  19. 取り組み

    View Slide

  20. 課題
    • フレームワークがEOL
    • フレームワークに依存したシステム
    • ミドルウェアに依存したシステム
    • ビジネスニーズとシステムの乖離

    View Slide

  21. フレームワークがEOL
    End Of Life
    なんだよ\(^o^)/

    View Slide

  22. フレームワークに依存したシステム
    • Routing, Request, Response, Session
    • あらゆるファイルに存在する Yii::app()
    • システム的な境界は存在せず、あえて言う
    ならWAFの制約のみ
    • アップデートが辛い

    View Slide

  23. ミドルウェアに依存したシステム
    • 特定のミドルウェアのバージョンとコード
    が密結合、分散しており、バージョンアッ
    プが困難
    • DB構造がActiveRecordを通してViewに漏
    洩している
    • SQLがあちこちでベタ書き

    View Slide

  24. ビジネスニーズとシステムの乖離
    • みんなが頭の中で思い描くシステムが違う
    • ビジネス側が想像してるシステム
    • 開発側が認識しているシステム
    • 実際に動いているシステム
    • 「こうしたい」という要望に対して、温度感やスケジュールが噛み
    合わない
    • ビジネス側としては素早く判断して素早く動きたい要望でも、シス
    テム的に困難な場合がある

    View Slide

  25. どうすんのこれ
    \(^o^)/

    View Slide

  26. 対策
    • ビジネス領域の整理
    • Diの導入
    • ロガーの抽象化
    • DBレイヤの抽象化
    • Web各レイヤの抽象化
    • Routerの抽象化

    View Slide

  27. ビジネス領域の整理
    • 言葉の認識違いを地道に埋めていく
    • よくやる変更・ワークフローを認知し、分析の範囲の
    目処をつけていく
    • 将来的にやりたいことから大きめの改善の予定を切っ
    ていく
    • 改修によって、ビジネス的な価値が最大化できるよう
    に計画にコミットする

    View Slide

  28. Diの導入
    • Ray.Di
    • DiはFWから独立したものを使いたい
    • Interfaceを定義して、FWのシステムを隠
    蔽する

    View Slide

  29. ロガーの抽象化
    • `Yii::app()->log()`
    • 本当に至る所で使われている
    • Diを使ってLoggerのInterface経由でイン
    スタンスを注入する

    View Slide

  30. DB層の抽象化
    • ActiveRecord or Yii::app()->db
    • ActiveRecordを使うまでもないようなSQLか、
    ActiveRecordでは賄いきれない規模のSQL
    • SQLを直接書く or 外部のSQL Builderを使う
    • 自作した: https://github.com/rymizuki/
    coral-sql

    View Slide

  31. DB層の抽象化 2 (予定)
    • Repository層からのDBアクセスの隠蔽
    • Specifiction Patternによる条件の抽象化
    • Data Access層を作り、SQL関連の処理を隠蔽
    • unitテストを回してスキーマ変更を検知でき
    るようにする

    View Slide

  32. 各Web層の抽象化
    • Controller層ではYiiを使う
    • Controllerからビジネスロジックを呼び出し、ビジ
    ネスロジックはYiiを使わない
    • UseCase/Interaction/Repository
    • Response(Renderer)は現状PHPだが、他のライブ
    ラリに差し替えられるようにInterfaceで抽象してお

    View Slide

  33. Routerの抽象化
    • ルーティングライブラリを差し替える(予
    定)
    • 謎不要なルールなども残っており整理を始
    める

    View Slide

  34. なんとかできそう
    \(^o^)/

    View Slide

  35. 1年やってみて
    • PHP 7系は型が示せてハッピー
    • ドキュメントは公式を見ろ、PSRを把握しておけ
    • リクエスト単位でスコープが切られている
    • expressとかより抽象化しやすい
    • 地道にやっていきの気持ち

    View Slide

  36. まとめ
    • レガシーシステムに対する取り組みをご紹
    介しました
    • 地道にやってくしかない

    View Slide

  37. ご清聴ありがとうございました

    View Slide