Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
アプリケーションをリプレイスしたら チームとサービス運用に向き合えた
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
zosokh
June 21, 2024
Programming
1k
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
900
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
2.5k
開発生産性を取り入れたばかりの組織が、スキルと生産性向上を紐づける
kazatohiei
1
400
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
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
110
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
340
typoなんかねぇよ
raspython3
0
670
新卒PdEのリアル
ryu1013
1
440
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
120
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
0
250
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
130
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
4
630
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
180
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
140
Featured
See All Featured
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
410
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Making the Leap to Tech Lead
cromwellryan
135
10k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
970
Un-Boring Meetings
codingconduct
0
410
Between Models and Reality
mayunak
4
450
Tell your own story through comics
letsgokoyo
1
1.1k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
380
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
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
現れているリプレイスの恩恵 テストコード整備により、工数をかけないバージョンアップ対応が 可能 処理の最適化により、実装やレビュー時間の短縮傾向がある
アウトプット インプット 現れているリプレイスの恩恵 テストコード整備により、工数をかけないバージョンアップ対応が 可能 処理の最適化により、実装やレビュー時間の短縮傾向がある ←開発によって生み出された価値 ←開発に投入したリソース 生産性 成果物
投入した資源
現れているリプレイスの恩恵 テストコード整備により、工数をかけないバージョンアップ対応が 可能 処理の最適化により、実装やレビュー時間の短縮傾向がある 立派なコスト削減! アウトプット インプット 生産性 成果物 投入した資源
←開発に投入したリソース
まとめ
• リプレイスと効果含めた提案。開発思想は普段からアウトプット • 設計時の、やる決断・やらない決断 • 運用コスト面の恩恵 まとめ リプレイスの提案 新基盤の設計 リプレイス後の収穫
ご清聴ありがとうございました