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
メンテが命: PHPフレームワークのコンテナ化とアップグレード戦略
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
shunta ichikawa
February 21, 2025
Programming
770
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
メンテが命: PHPフレームワークのコンテナ化とアップグレード戦略
shunta ichikawa
February 21, 2025
More Decks by shunta ichikawa
See All by shunta ichikawa
見せてもらおうか、 OpenSearchの性能とやらを!
shunta27
1
330
20240711_RAGを用いたシンプルな 社内情報検索システムを導入した話とつらみ
shunta27
2
5.6k
Other Decks in Programming
See All in Programming
Android CLI
fornewid
0
110
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
150
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
210
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
130
フィードバックで育てるAI開発
kotaminato
1
120
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
6.7k
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
190
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
240
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
150
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
120
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Making the Leap to Tech Lead
cromwellryan
135
10k
Chasing Engaging Ingredients in Design
codingconduct
0
240
How to Think Like a Performance Engineer
csswizardry
28
2.7k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Speed Design
sergeychernyshev
33
1.9k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
ラッコキーワード サービス紹介資料
rakko
1
4M
The Spectacular Lies of Maps
axbom
PRO
1
870
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Visualization
eitanlees
152
17k
Transcript
メンテが命: PHPフレームワークのコンテナ化とアッ プグレード戦略 PHPカンファレンス名古屋2025
自己紹介 市川 俊太 いちかわ しゅんた (38歳) 株式会社助太刀 開発部 開発部長 •
猫が好き • 趣味はサッカー観戦 • Ruby/PHPなどのLL言語が好き • 三重県四日市出身、愛知県内の大学通ってました!
会社紹介 事業者間マッチング 協力会社探し 正社員採用 工事会社の人手不足を マッチングと 正社員採用で解決
アジェンダ 1. サービスは生き物だ 2. レガシー環境が生まれる理由 3. 解決するための3つのアプローチ
アジェンダ 1. サービスは生き物だ 2. レガシー環境が生まれる理由 3. 解決するための3つのアプローチ
サービスは生き物だ サービスは生き物(or 水物?)。放置すると...? ?
サービスは生き物だ 腐ります。(鮮度が落ちます )
ソフトウェアに例えると • PHP / アプリケーション(Laravelなど)/ データベース(MySQLなど)のバージョンが古い(EOL) • メンテされてないコード • AWSのインスタンスのスペックが古い
• インデックス管理がされていない 放置すると...?
ソフトウェアに例えると • PHP / アプリケーション(Laravelなど)/ データベース(MySQLなど)のバージョンが古い(EOL) => セキュリティリスク • メンテされてないコード
=> デプロイ(リリース)するのが怖い • AWSのインスタンスのスペックが古い => パフォーマンス低下 • インデックス管理がされていない => クエリが遅くなる
これが続くと... • リリースするのが怖くなる • (開発しにくいから)エンジニアが離職 • ユーザ体験が悪化(バグ・遅い・クラッシュなど)
アジェンダ 1. 自己紹介 2. サービスは生き物だ 3. レガシー環境が生まれる理由 4. 解決するための3つのアプローチ
レガシー環境が生まれる理由 • 動いているから放置 • 新機能開発が優先され、アップデートなどは後回し
動いているから放置 「壊れるリスクを負ってまで触りたくない」 「アップデートしなくても動いてるから大丈夫でしょ?」
動いているから放置 「壊れるリスクを負ってまで触りたくない」 「アップデートしなくても動いてるから大丈夫でしょ?」 動いてるから「このままで問題ない」という心理が働き放置
動いているから放置 「壊れるリスクを負ってまで触りたくない」 「アップデートしなくても動いてるから大丈夫でしょ?」 動いてるから「このままで問題ない」という心理が働き放置 突如、AWSからメールがやってきます...
動いているから放置 放置すると最悪データベースが止まります...
レガシー環境が生まれる理由 • 動いているから放置 • 新機能開発が優先され、アップデートなどは後回し
新機能開発が優先され、アップデートなどは後回し 「✅新機能開発」 「✅新機能開発」 「🚀 リリース」 「🚀 リリース」 「🛑アップデート後回し(忙しいから後で …)」
新機能開発が優先され、アップデートなどは後回し 「✅新機能開発」 「✅新機能開発」 「🚀 リリース」 「🚀 リリース」 「🛑アップデート後回し(忙しいから後で …)」 「AWSからメールも来てるし、アップグレードするか
…」
新機能開発が優先され、アップデートなどは後回し 「✅新機能開発」 「✅新機能開発」 「🚀 リリース」 「🚀 リリース」 「🛑アップデート後回し(忙しいから後で …)」 「❌いざ変更変更しようにも、影響範囲がわからない…」
「😨当時を知る人間もいない...」 変更が怖くなり、そのまま放置
アジェンダ 1. 自己紹介 2. サービスは生き物だ 3. レガシー環境が生まれる理由 4. 解決するための3つのアプローチ
解決するための3つのアプローチ 1. テストの導入(ユニット、機能テストなど) 2. コンテナ化 3. 継続的なアップグレード
1. テストの導入(ユニット、機能テストなど) テストが存在しないと... • コードを変更したら、別の場所でエラーが発生 • リファクタリング、バージョンアップの度に確認が大変 • 変更の度に手動テストを頑張ることになる
1. テストの導入(ユニット、機能テストなど) どうやって導入していくのか • テストがない環境で、いきなり理想的なテストを導入するのは難しい • 簡単なところから始める
1. テストの導入(ユニット、機能テストなど) どうやって導入していくのか • テストがない環境で、いきなり理想的なテストを導入するのは難しい • 簡単なところから始める 「小さくはじめる」のが大事
1. テストの導入(ユニット、機能テストなど) 例えば「ログインAPI」のレスポンスの機能テスト
1. テストの導入(ユニット、機能テストなど) 例えば「ログインAPI」のレスポンスの機能テスト • 最初は大味なテストでも良い ◦ 最初から全てのケースを網羅しよう としなくていい ◦ APIのレスポンスが期待通りかどう
かを確認するだけでいい • テストが習慣化されていることが大事 ◦ 最初は「最低限の動作確認」を意識
1. テストの導入(ユニット、機能テストなど) CI/CD に組み込んでテストを継続的に実行する • テストは書くだけでは意味がない => 継続的に実行することが重要 • CI/CDに組み込むことで
◦ コード変更時に自動テストが実行される ◦ テストの陳腐化を防ぐ
1. テストの導入(ユニット、機能テストなど) テストが存在すれば... • コードを変更したら、別の場所でエラーが発生 => 影響範囲が明確になり、エラーがすぐ検知できる • リファクタリング、バージョンアップの度に確認が大変 =>
テストがパスしていれば、既存の機能に大きな影響を与えずに変更できることが 確認できる • 変更の度に手動テストを頑張ることになる => 手動で行う必要はなく、テスト実行に関する負担を軽減
解決するための3つのアプローチ 1. テストの導入(ユニット、機能テストなど) 2. コンテナ化 3. 継続的なアップグレード
2. コンテナ化 • 環境差異によるエラー • デプロイの手間が増えることによるミス • ロールバックによるダウンタイム発生 コンテナ化しないと起こる問題
2. コンテナ化 なぜコンテナ化するのか 1. 環境の一貫性 2. スケーラビリティの向上、リソースの最適化 3. CI/CDパイプラインとの統合が容易
2. コンテナ化 • 環境差異によるエラー => コード管理されたイメージファイルを利用するだけ • デプロイの手間が増えることによるミス => GithubActionsなどのCI/CDパイプラインに統合することで
ビルド 🏭 => テスト✅ => デプロイ🚀 まで自動化(属人化なども排除) • ロールバックによるダウンタイム発生 => 過去のイメージをデプロイするだけ コンテナ化しないと起こる問題
解決するための3つのアプローチ 1. テストの導入(ユニット、機能テストなど) 2. コンテナ化 3. 継続的なアップグレード
3. 継続的なアップグレード 時間とともに通常開発とアップグレード作業の差が開いていく
3. 継続的なアップグレード 時間とともに通常開発とアップグレード作業の差が開いていく
• テスト・検証サイクルの高速化 ◦ CI/CDパイプラインにて自動実行 • ローカル環境での検証が容易 3. 継続的なアップグレード テストの導入とコンテナ化による開発・検証の効率化 通常開発と並行して、バージョンアップ作業もスムーズに実施可能
3. 継続的なアップグレード • データベースをバージョンアップ予定のコンテナイメージを利用する • PHPなども同様、バージョンアップ予定のコンテナイメージを利用する データベースやPHPのバージョンアップがしたい バージョンアップ予定のコンテナイメージを利用しテスト実行する
• PHP7.1 => PHP8.3 • Laravel5.8 => Laravel11 • 同時にMySQL5系
=> 8系 3. 継続的なアップグレード このアプローチを通して、通常の開発と並行しながら、 約3年間かけて… (無事故で)バージョンアップすることに成功🥳
サービスは生き物だ 鮮度を保つことができます
None
あなたはこの3つのアプローチなしで、バージョンアップを無 事故で行える自信がありますか?
とはいえ、やっていることは特別なことではなく...
テストとか、コンテナ化とかって
「やらなきゃならないことをやるだけさ、だからうまくいくんだ よ」 映画「アイデン&ティティ」(みうらじゅん原作)
皆様、ご清聴ありがとうございました!