Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2年かけました!大規模サービスをJava製CMSからPHP+Laravelの構成にリプレイ...

2年かけました!大規模サービスをJava製CMSからPHP+Laravelの構成にリプレイスし、運用している話 / Replaced service from Java CMS to PHP and Laravel architecture

2022/09/24 PHPカンファレンス2022の1日目で発表した資料になります。
(サブタイトル分ですが、SpeakerDeckのURLが非常に長くなってしまうので付与しています。公式に提出させていただいているタイトルとは異なります)

yumechi(Motoki Hirao)

September 24, 2022
Tweet

More Decks by yumechi(Motoki Hirao)

Other Decks in Programming

Transcript

  1. https://www.dip-net.co.jp/ 言語はJava、 有償ライセンスのCMSを利用 13 • 有償ライセンスなのでローカル環境の構築が困難 • 開発サーバーでやらざるを得ない • コンフリクトを気にする必要があり、開発効率が低下

    • CMSにある独自のDBでもバージョン管理されている • gitリポジトリにないビジネスロジックが存在する • 見るべきコードが増え運用保守がしずらい
  2. https://www.dip-net.co.jp/ 「言語はJava、有償ライセンスの CMSを利用」問題について 20 • OSSで公開されているフレームワークを活用する • 社内でも採用例のあったPHP + Laravel

    の構成にする • メンバー的にもJavaよりPHPの方が馴染みがあった • DBに依存しない形でコードを管理し、ビジネスロジック に関わるものは全てgit管理する
  3. https://www.dip-net.co.jp/ 「EC2上で動作している」 問題について 21 • Dockerを活用してコンテナ化する • 社内で PHP +

    Laravel の構成でコンテナ化されている事例あり • ローカルでの開発も可能になった • ECS + Fargate を用いてスケーリングに対応する • コンテナ化されているので、マシンの構成がシンプルになった
  4. https://www.dip-net.co.jp/ 各種ログ・モニタリングツール について 24 • DataDog • ログの調査、アラートの発行 • NewRelic

    • 各種画面のメトリクスの計測、生産性の可視化 • Kibana • マーケティングチームでの分析
  5. https://www.dip-net.co.jp/ ついでに 25 • Linterの導入と自動実行 • PHP Insights を選定 https://phpinsights.com/

    • チームの中でチェックされるルールを明示的にしたいというニーズ • Laravelとの相性を考えつつ、既存ビジネスロジックに影響しないような ゆるいルールで導入 • CodeBuildの中で実行される
  6. https://www.dip-net.co.jp/ ついでに② 26 • テストの自動実行 • Feature Test を導入した •

    画面ごとの表示(結合テストレベル)を簡易的にテスト • 代表的なケースのみ表示ができるかどうかを判定している • 全網羅ではない • CodeBuildの中で実行される
  7. https://www.dip-net.co.jp/ 移植したものの規模など 30 • 数百画面単位(PC、スマホそれぞれあるので全画面×2のイメージ) • PHPのファイル数 • 数千単位 •

    元々動いていたコードをベースに移植しつつ、共通処理を整理した • テスト数 • 手動で数万件単位 • デザイン崩れや通信系のトラッキングなど項目的に人手でなければ難しい問題が あり、手動で見る必要があった
  8. https://www.dip-net.co.jp/ DataDogでアラート、エラーログ監視 38 • エラー数が多いものを優先的に対応 • 調査への影響が大きい • 出力数が多すぎてノイズになる •

    DataDogは検索結果が5000件までしか出力できない https://docs.datadoghq.com/ja/logs/explorer/list/ • すぐ直せるものは直し、Warningに落としても問題ないものはWarningに • その後、プロダクトとして問題があるアラートを優先して対応
  9. https://www.dip-net.co.jp/ 3チーム制に変更する 43 • 役割別に分割 • 中大規模プロジェクトの担当チーム • SEO、小規模プロジェクトの担当チーム •

    リファクタリング、アーキテクチャの担当チーム • どのチームも社員、パートナー混成チームで4〜8名 • 内部的にはそれぞれのチームに愛称をつけている
  10. https://www.dip-net.co.jp/ 大規模スクラム開発フレームワークは 採用していない 47 • LeSS, SAFeなどが複数チーム体制だと上がると思われるが、 現在は採用していない • LeSS:

    https://less.works/ • SAFe: https://www.scaledagileframework.com/ • まずは各チームで自立してスクラムができるようになる
  11. https://www.dip-net.co.jp/ Unit Testの実装 49 • リリース前はFeature Testで進めていた • 実行時間が長すぎる •

    実行時にメモリ消費が大きく、比較的スペックが低いマシンを 使っているメンバーの手元で実行できなかった • 少しずつUnit Testに置き換えていき、実行時間の短縮や関 数単位での動作保証に切り替えて開発しやすく
  12. https://www.dip-net.co.jp/ 大きくなっていくチーム体制で、 うまく開発する 52 • 開発者はこれからも増えていく見込みなので、今後もチーム 体制を見直していきたい • スクラムを始めたばかり、ノウハウもこれから •

    なんらかのフレームワーク導入も考えてみる • 他システムと合わせてリリースするなど規模が大きくなる対 応と、SEOなどの早めの対応が混ざる問題 • コンフリクトが起きやすく、結合テストでの問題の切り分けが難しい
  13. https://www.dip-net.co.jp/ 継続的な環境のアップデート 53 • 言語周り • PHP、Laravelのアップデートが急務 • PHPはまだ7.4系なので8系にあげたい •

    リリース時、Laravel6系だったがLaravel8系にあげた。9系にあげたい • アーキテクチャ • パフォーマンスの可視化促進 • プロダクトを構成する他システムのコンテナ化
  14. https://www.dip-net.co.jp/ • プロダクト知識定着 • 自立に時間がかかっている • 属人性も排除したい • 他システムとの関係の整理 •

    テストコード、カバレッジ、 Linterルールの厳格化 などなど… その他 引用: いらすとや https://www.irasutoya.com/2015/03/blog-post_528.html
  15. https://www.dip-net.co.jp/ ロゴの使用情報 57 • drawio https://app.diagrams.net/ • Kibana https://www.elastic.co/jp/kibana/ •

    Jenkins https://jenkins.io/ • New Relic https://newrelic.com • AWS https://aws.amazon.com/jp/architecture/icons/