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
アプリケーションをリプレイスしたら チームとサービス運用に向き合えた
Search
zosokh
June 21, 2024
Programming
980
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
アプリケーションをリプレイスしたら チームとサービス運用に向き合えた
2024 PHPカンファレンス福岡
zosokh
June 21, 2024
More Decks by zosokh
See All by zosokh
Team operations that are not burdened by SRE
kazatohiei
1
860
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
2.5k
開発生産性を取り入れたばかりの組織が、スキルと生産性向上を紐づける
kazatohiei
1
390
PhinxによるDBマイグレーションとサービス運用
kazatohiei
0
1.8k
エラー監視とテスト体制への改善作戦 / PHPerKaigi2022
kazatohiei
7
5.4k
サービス運用エンジニアによるPHP8バージョンアップ奮闘記 / PHPカンファレンス2021
kazatohiei
0
1.3k
Other Decks in Programming
See All in Programming
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.4k
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
230
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
440
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
850
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
230
スマートグラスで並列バイブコーディング
hyshu
0
290
Vite+ Unified Toolchain for the Web
naokihaba
0
750
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
4.1k
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
190
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
140
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
160
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
840
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.8k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
460
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
340
HDC tutorial
michielstock
2
740
[SF Ruby Conf 2025] Rails X
palkan
2
1.2k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Speed Design
sergeychernyshev
33
1.9k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
260
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Agile that works and the tools we love
rasmusluckow
331
22k
Transcript
アプリケーションをリプレイスした ら チームとサービス運用に向き合えた 2024/06/22 PHPConference FUKUOKA 2024 @zosokh
チャン(ヒエイカザト) 株式会社ウエディングパーク Photorait・TECH戦略室 サーバーサイドエンジニア チーフエンジニア @zosokh #野球観戦 #ちなヤク #二児の父 交流戦お疲れ様でした!どすこーーーーい!
Photorait フォトレイト フォトウエディング、前撮りな ど結婚写真の撮影スタジオやロ ケ地を検索できる情報サイト www.photorait.net
今日の話 長年運用しているサービスのリプレイスを検討している方へ リプレイス計画と実行成果までの話をします リプレイスの提案 新基盤の設計 リプレイス後の収穫
#phpconfuk #hall_fu
前段| リプレイス方針
リプレイス前まで • 2015年にローンチしたサービス • PHPもフレームワークもバージョンが古い状態 CodeIgniter3 PHP8.0
• Fat Controller • 不十分且つ拡張しにくいテストコード • バージョンアップができていない • 依存性の高いシステム設計 •
jQuery ・・・ 顕在化していた課題
新規でシステムを立ち上げ、稼働サービスを移行していく対応を始 める 新しく立ち上げた環境(以降:新基盤)今までの基盤を旧基盤と説明していきます CodeIgniter3 👉 Laravel11(2024年6月現在) PHP8.0 👉 PHP8.3(2024年6月現在) EC2
👉 ECS Fargate リプレイスの決断
こんなようなイメージ 新基盤 旧基盤 サービス 立ち上げた新基盤に、旧基盤からサービスをどんどん移行していく
こんなようなイメージ www.photorait.net 新基盤 旧基盤
大型プロジェクト(以降A-PJ)の開発計画が元々あった 新基盤へは主に以下のサービスを稼働(移行)させる方針を取った • A-PJでの開発サービス • A-PJ以外の案件でも、新規サービスを求められる案件 上記ケース以外のサービスは案件の合間に移行を進めていく 新基盤への移行方針
新基盤への移行方針 return switch ($pj){ case 'A-PJ': case '新規サービス開発が求められる PJ': case
'工数に余裕のあるPJ': '新基盤'; break; default: '旧基盤'; };
リプレイスの提案 事業責任者へ打診 リプレイスの提案 新基盤の設計 リプレイスした成果
事業責任者と、ディレクターに提案を行った 新基盤の提案時
登場人物 私 事業責任者 偉大な先輩
提案内容:システムリプレイスをしたい 初回の提案内容 • システム課題とリプレイス恩恵の共 有 • A-PJはリプレイスした後にやる方が 効率的です 👉工数いだきたい 👉A-PJのスケジュールを後ろ倒しさせて
もらいたい
初回の提案内容
提案内容:システムリプレイスをしたい 初回の提案内容 • システム課題とリプレイス恩恵の共 有 • A-PJはリプレイスした後にやる方が 効率的です 👉工数いだきたい 👉A-PJのスケジュールを後ろ倒しさせて
もらいたい
提案内容:A-PJ開発をシステムリプレイスしながらやりたい 提案内容を変える • 新基盤を立ち上げながらA-PJ開発を 行いたい 👉新基盤構築も兼ねるので工数を追加で 確保させてください
提案内容を変える
• 新基盤を立ち上げながらA-PJ開発を 行いたい 👉新基盤構築も兼ねるので工数を追加で 確保させてください 提案内容:A-PJ開発をシステムリプレイスしながらやりたい 提案内容を変える
提案内容:A-PJ開発をシステムリプレイスしながらやりたい 提案内容を変える 2 • 新基盤を立ち上げながらA-PJ開発を 行いたい • 旧基盤と新基盤開発での工数の差を 共有 👉結果的に新基盤開発の方が効率化され
るので工数恩恵もあります
提案内容を変える 2 案件1 案件2 案件3 案件4 案件5 案件6 案件7 案件8
案件1 案件2 案件3 案件4 案件5 案件6 案件7 案件8 提案内容を変える 2
何となく了承は得られた雰囲気になったので、新基盤構築を兼ねた A-PJ開発準備を開始する • 具体的設計の開始 • 新基盤構築と案件開発のスケジュール落とし込み開始 ◦ 数パターンのスケジュールとアサイン案を作成 新基盤で実行する準備をする
何となく了承は得られた雰囲気になったので、新基盤構築を兼ねた A-PJ開発準備を開始する • 具体的設計の開始 • 新基盤構築と案件開発のスケジュール落とし込み開始 ◦ 数パターンのスケジュールとアサイン案を作成 👉新基盤とA-PJ開発、へ開発構想のベースにしていく 新基盤で実行する準備をする
何となく了承は得られた雰囲気になったので、新基盤構築を兼ねた A-PJ開発準備を開始する • 具体的設計の開始 • 新基盤構築と案件開発のスケジュール落とし込み開始 ◦ 数パターンのスケジュールとアサイン案を作成 しかしここまでで、反省点がある 新基盤で実行する準備をする
【反省点】急な技術提案
システム改善の提案やその効果の裏付けは大事だが、急な提案自体を無 くしていきたい • 急な提案は良くも悪くも驚かれる • そもそも「課題」や「改善したい」という意見が、自分だけに留 まっていた事が問題 👉 普段の会話でシステムの話を日常的に出していく 👉
これらの意見を良く聞いていたアレねに近づける根回しが大事 【反省点】急な技術提案 \偉大な先輩のアドバイス/
新基盤の設計 いよいよ開発だ リプレイスの提案 新基盤の設計 リプレイス後の収穫
• ECSコンテナ化 • PHP・Laravelの最新を追える設計 • 全面テストコード • Laravelアプリケーション ◦ モジュラーモノリスアーキテクチャ
新基盤の方針
モジュラーモノリス
モジュラーモノリス 検証もしてみた
モジュラーモノリスを導入したかった理由 • チーム事情でマイクロサービス運用は困難なので、あくまでモ ノリスアプリケーションを用意したかった • 今後マイクロサービス化を検討できるように、モジュール (サービス)単位で疎結合なモノリスアプリケーションを構築 したかった • Laravel-Modulesを利用することでモジュラーモノリスを比較
的簡単に構築できる点
【決断】モジュラーモノリス導入をやめる
モジュラーモノリス導入をやめる • 旧アプリケーション構造もそこまで複雑ではなかった • モジュール化によるルール認識やスムーズな拡張、設計の複雑 化がチームの運用スタイルに現在の段階では合わない・困難が 予想 • 導入しなくてもLaravelアプリケーションで且つバージョンアッ プしやすい基盤であること、テストが整備された環境を用意し
たいなどの、リプレイスへの目的は達成できると考えた 👉モジュラーモノリスの採用をしない事を決断
設計方針ざっくりまとめ • 全面リファクタリング • Dockerによるローカル開発環境 • ECS稼働 • 全面テストコード設置 •
PHPUnit・Larastan・PHP-CS-Fixer・ESlint・Stylelint・Vitestを利用したテ スト・静的解析を導入 • Github Actionsによる上記テスト・静的解析、及びデプロイ機構作成 • 依存サードパーティの置き換え • 定期的なcomposer update機構 • Feature Toggle導入 • APIモックを簡潔化 • ライブラリを共通パッケージで外部管理 • octocovs使ったカバレッジ値表示 • セッションを旧CodeIgniterアプリと共有できるようにする • Laravel Auditingを使ったログ排出 • VRTを使った差分チェック
リプレイス後の収穫 成果について リプレイスの提案 新基盤の設計 リプレイス後の収穫
新基盤で運用コストの削減 • テストコードの整備 • 定期的なcomposer updateによるパッケージ更新 • 全面リファクタリング ・・・ 上記から運用恩恵が得られている
バージョンアップのコスト削減 案件 回数 開発工数(人日) 実際のテスト工数(人日) テストコードが無かった場 合の開発・テスト工数 (人日) composer update
毎日 0 0 ??? PHPバージョンアッ プ PHP8.2 👉 8.3 1 1 0 40〜50 Framework バージョ ンアップ Laravel10 👉 11 1 1 1 40〜50
バージョンアップのコスト削減 案件 回数 開発工数(人日) 実際のテスト工数(人日) テストコードが無かった場 合の開発・テスト工数 (人日) composer update
毎日 0 0 ??? PHPバージョンアッ プ PHP8.2 👉 8.3 1 1 0 40〜50 Framework バージョ ンアップ Laravel10 👉 11 1 1 1 40〜50 計り知れない。テストコードが無 かったら定期的なupdateは出来な いかも 旧基盤や他チームでバージョン アップ時の工数
リードタイムの減少 案件 リードタイム平均h(初回コミッ トからマージまで) PR作成数 新基盤 4 32.5 旧基盤 8.1
27
リードタイムの減少 大幅なリードタイムの差が現れる 成功!!! 案件 リードタイム平均h(初回コミッ トからマージまで) PR作成数 新基盤 4 32.5
旧基盤 8.1 27
現れているリプレイスの恩恵 テストコード整備により、工数をかけないバージョンアップ対応が 可能 処理の最適化により、実装やレビュー時間の短縮傾向がある
アウトプット インプット 現れているリプレイスの恩恵 テストコード整備により、工数をかけないバージョンアップ対応が 可能 処理の最適化により、実装やレビュー時間の短縮傾向がある ←開発によって生み出された価値 ←開発に投入したリソース 生産性 成果物
投入した資源
現れているリプレイスの恩恵 テストコード整備により、工数をかけないバージョンアップ対応が 可能 処理の最適化により、実装やレビュー時間の短縮傾向がある 立派なコスト削減! アウトプット インプット 生産性 成果物 投入した資源
←開発に投入したリソース
まとめ
• リプレイスと効果含めた提案。開発思想は普段からアウトプット • 設計時の、やる決断・やらない決断 • 運用コスト面の恩恵 まとめ リプレイスの提案 新基盤の設計 リプレイス後の収穫
ご清聴ありがとうございました