Slide 1

Slide 1 text

新米SRE、 4つのプロダクトを同時に PHP7.0から8.1へ!! ことみん @kotomin_m PHPカンファレンス香川2024

Slide 2

Slide 2 text

X @kotomin_m #phpconkagawa みなさんは バージョンアップ してますか?

Slide 3

Slide 3 text

X @kotomin_m #phpconkagawa してる・してない 󰢧(挙手)

Slide 4

Slide 4 text

X @kotomin_m #phpconkagawa 今日は、

Slide 5

Slide 5 text

X @kotomin_m #phpconkagawa 現在進行形で4つのプロダクトの PHPバージョンアップに奮闘中 の私

Slide 6

Slide 6 text

X @kotomin_m #phpconkagawa PHPバージョンアップを 通してPHPと仲良くなれた!

Slide 7

Slide 7 text

X @kotomin_m #phpconkagawa PHP開発が 楽しくなった!

Slide 8

Slide 8 text

#phpconkagawa X @kotomin_m おしながき ● 新米SREになるまで ● バージョンアップで得た学び ● 4プロダクト同時バージョンアップの進め方や方針 ● バージョンアップ前に知りたかった罠と対処法 ● まとめ

Slide 9

Slide 9 text

#phpconkagawa X @kotomin_m おしながき ● 新米SREになるまで ● バージョンアップで得た学び ● 4プロダクト同時バージョンアップの進め方や方針 ● バージョンアップ前に知りたかった罠と対処法 ● まとめ

Slide 10

Slide 10 text

新米SREになるまで X @kotomin_m #phpconkagawa

Slide 11

Slide 11 text

X @kotomin_m #phpconkagawa ● 所属: ウィルゲート SRE ● 技術: PHP, Laravel ● 趣味: LT会とカンファレンスとカン ファレンスのネイル 新米SREのことみんです!

Slide 12

Slide 12 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 新米SREになるまでのキャリア

Slide 13

Slide 13 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 新米SREになるまでのキャリア PHP初めて!がんばります!

Slide 14

Slide 14 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年 PHP 70%・その他 30% 新米SREになるまでのキャリア

Slide 15

Slide 15 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年 PHP 70%・その他 30% 新米SREになるまでのキャリア ちょっと出来るように なってきた〜

Slide 16

Slide 16 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年 PHP 70%・その他 30% 2023年 6月 PHP 85% 新米SREになるまでのキャリア 同じプロダクト を担当

Slide 17

Slide 17 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年 PHP 70%・その他 30% 2023年 6月 PHP 85% 新米SREになるまでのキャリア アプリ開発は出来るようになってきたけど PHPのことよく分かってない…

Slide 18

Slide 18 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年 PHP 70%・その他 30% 2023年 6月 PHP 85% 新米SREになるまでのキャリア アプリ開発は出来るようになってきたけど PHPのことよく分かってない… 担当プロダクトのことは分かるけど 他でもやっていけるのか…?

Slide 19

Slide 19 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年 PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 新米SREになるまでのキャリア

Slide 20

Slide 20 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年 PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 新米SREになるまでのキャリア 担当プロダクトで少しやったことあった パフォーマンス改善をより本格的に

Slide 21

Slide 21 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年 PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 新米SREになるまでのキャリア 同じプロダクト を担当 PHPバージョンアップのプロジェクトが始まるぞ!

Slide 22

Slide 22 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年 PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 2023年12月〜現在 新米SRE!💪 新米SREになるまでのキャリア 同じプロダクト を担当

Slide 23

Slide 23 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年 PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 2023年12月〜現在 新米SRE!💪 新米SREになるまでのキャリア SREに本格的に移動! 初めてのプロジェクト💪

Slide 24

Slide 24 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年 PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 2023年12月〜現在 新米SRE!💪 新米SREになるまでのキャリア SREに本格的に移動! 初めてのプロジェクト💪 一気に4つのプロダクトに 関わっていくことに

Slide 25

Slide 25 text

X @kotomin_m #phpconkagawa 2021年 4月 PHP未経験で入社 PHP 50%・React 50% 2022年 PHP 70%・その他 30% 2023年 6月 PHP 85%・SRE 15% 2023年12月〜現在 新米SRE!💪 新米SREになるまでのキャリア 1つのプロダクトを 担当するWebアプリ エンジニア 様々なプロダクトを 担当するSRE

Slide 26

Slide 26 text

X @kotomin_m #phpconkagawa 新米SRE、やっていき!

Slide 27

Slide 27 text

#phpconkagawa X @kotomin_m おしながき ● 新米SREになるまで ● バージョンアップで得た学び ● 4プロダクト同時バージョンアップの進め方や方針 ● バージョンアップ前に知りたかった罠と対処法 ● まとめ

Slide 28

Slide 28 text

X @kotomin_m #phpconkagawa バージョンアップで得た学び

Slide 29

Slide 29 text

X @kotomin_m #phpconkagawa SREになって初めてのやる ことが4つのプロダクトの バージョンアップ

Slide 30

Slide 30 text

X @kotomin_m #phpconkagawa 不安><

Slide 31

Slide 31 text

X @kotomin_m #phpconkagawa 学んだこと 「わからない」不安 との向き合い方

Slide 32

Slide 32 text

X @kotomin_m #phpconkagawa 「わからない」不安との向き合い方 ①「わかる」ためには「やってみる」 そのために、実際に手を動かしてみる

Slide 33

Slide 33 text

X @kotomin_m #phpconkagawa 「わからない」不安との向き合い方 ①「わかる」ためには「やってみる」 そのために、実際に手を動かしてみる 当たり前だけど、これが大事だとわかったのも実際に 手を動かしたから

Slide 34

Slide 34 text

X @kotomin_m #phpconkagawa 「わからない」不安との向き合い方 具体的なイメージをつけるために手を動かすと、 → 「バージョンアップってこんな感じで出来るんだ」

Slide 35

Slide 35 text

X @kotomin_m #phpconkagawa 「わからない」不安との向き合い方 具体的なイメージをつけるために手を動かすと、 → 「バージョンアップってこんな感じで出来るんだ」 → 安心に繋がる

Slide 36

Slide 36 text

X @kotomin_m #phpconkagawa 「わかる」ためには「やってみる」 私が最初に取り組んだこと ● デプロイフローを図に整理する ● 開発環境のDockerfileをちゃんと理解する

Slide 37

Slide 37 text

X @kotomin_m #phpconkagawa 「わかる」ためには「やってみる」 デプロイフローを図に整理する ● どのようにサーバ環境を切り替えるのか ● ブランチはどうするか など ※分からないことはインフラの人に確認しながら

Slide 38

Slide 38 text

X @kotomin_m #phpconkagawa 「わかる」ためには「やってみる」 こんな感じの図

Slide 39

Slide 39 text

X @kotomin_m #phpconkagawa 「わかる」ためには「やってみる」 開発環境のDockerfileをちゃんと理解する 今までは雰囲気でやってたので、1行ずつ分からない ところを調べてちゃんと理解した(たぶん)

Slide 40

Slide 40 text

X @kotomin_m #phpconkagawa 「わかる」ためには「やってみる」 開発環境のDockerfileをちゃんと理解する 今までは雰囲気でやってたので、1行ずつ分からない ところを調べてちゃんと理解した(たぶん) 実際に、ビルドする・ECRにデプロイするなど、 自分で手を動かして確認した

Slide 41

Slide 41 text

X @kotomin_m #phpconkagawa 「わかる」ためには「やってみる」 徐々にやっていくうちに出来るように

Slide 42

Slide 42 text

X @kotomin_m #phpconkagawa 「わかる」ためには「やってみる」 徐々にやっていくうちに出来るように 出来ることが増える

Slide 43

Slide 43 text

X @kotomin_m #phpconkagawa 「わかる」ためには「やってみる」 徐々にやっていくうちに出来るように 出来ることが増える→自信になる

Slide 44

Slide 44 text

X @kotomin_m #phpconkagawa 「わかる」ためには「やってみる」 徐々にやっていくうちに出来るように 出来ることが増える→自信になる→次も挑戦してみる

Slide 45

Slide 45 text

X @kotomin_m #phpconkagawa 「わかる」ためには「やってみる」 徐々にやっていくうちに出来るように 出来ることが増える→自信になる→次も挑戦してみる →出来ることが増える

Slide 46

Slide 46 text

X @kotomin_m #phpconkagawa 「わかる」ためには「やってみる」 徐々にやっていくうちに出来るように 出来ることが増える→自信になる→次も挑戦してみる →出来ることが増える→自信になる

Slide 47

Slide 47 text

X @kotomin_m #phpconkagawa 「わかる」ためには「やってみる」 徐々にやっていくうちに出来るように 出来ることが増える→自信になる→次も挑戦してみる →出来ることが増える→自信になる→次も挑戦してみ る

Slide 48

Slide 48 text

X @kotomin_m #phpconkagawa 「わかる」ためには「やってみる」 徐々にやっていくうちに出来るように 出来ることが増える→自信になる→次も挑戦してみる →出来ることが増える→自信になる→次も挑戦してみ る→出来ることが増える→自信になる→次も挑戦して みる→出来ることが増える→自信になる→次も挑戦し

Slide 49

Slide 49 text

X @kotomin_m #phpconkagawa とにかく「やってみる」

Slide 50

Slide 50 text

X @kotomin_m #phpconkagawa 「わからない」不安との向き合い方 ②「自分はわからなくても、みんなと協力すればなん とかなる」というマインド

Slide 51

Slide 51 text

X @kotomin_m #phpconkagawa 「わからない」不安との向き合い方 ②「自分はわからなくても、みんなと協力すればなん とかなる」というマインド お互い知ってる領域が異なるので、知らない部分は埋 め合って協力する

Slide 52

Slide 52 text

X @kotomin_m #phpconkagawa 「わからない」不安との向き合い方 ③ 今までを振り返って「やってみて出来なかった仕事 ってあるっけ?」って考える

Slide 53

Slide 53 text

X @kotomin_m #phpconkagawa 「わからない」不安との向き合い方 ③ 今までを振り返って「やってみて出来なかった仕事 ってあるっけ?」って考える → 私は「あんまり無かったな」と感じた

Slide 54

Slide 54 text

X @kotomin_m #phpconkagawa 「わからない」不安との向き合い方 やってみて出来なかった仕事ってあるっけ?

Slide 55

Slide 55 text

X @kotomin_m #phpconkagawa 「わからない」不安との向き合い方 やってみて出来なかった仕事ってあるっけ? あのプロジェクト最初よく分か らなかったけど開発出来たな

Slide 56

Slide 56 text

X @kotomin_m #phpconkagawa 「わからない」不安との向き合い方 やってみて出来なかった仕事ってあるっけ? あのプロジェクト最初よく分か らなかったけど開発出来たな パフォーマンスチューニング 分からなかったけど出来たな

Slide 57

Slide 57 text

X @kotomin_m #phpconkagawa 「わからない」不安との向き合い方 やってみて出来なかった仕事ってあるっけ? → 過去の成功体験を振り返って自信を作り出す! あのプロジェクト最初よく分か らなかったけど開発出来たな パフォーマンスチューニング 分からなかったけど出来たな

Slide 58

Slide 58 text

X @kotomin_m #phpconkagawa 「わからない」不安との向き合い方 ①「わかる」ためには「やってみる」 ② 知らない部分は埋め合って協力するマインド ③ 過去の成功体験を振り返って自信を作り出す

Slide 59

Slide 59 text

X @kotomin_m #phpconkagawa 不安がなくなれば、 あとは作業を進めるだけ! (だけではない)

Slide 60

Slide 60 text

X @kotomin_m #phpconkagawa 学んだこと 「アプリケーションの構成要素 を知っていること」が重要

Slide 61

Slide 61 text

X @kotomin_m #phpconkagawa 構成要素を知っていることが重要 1年目〜アプリ開発だけをしていたとき、 PHPのバージョンについて気にしていなかった

Slide 62

Slide 62 text

X @kotomin_m #phpconkagawa 構成要素を知っていることが重要 1年目〜アプリ開発だけをしていたとき、 PHPのバージョンについて気にしていなかった 「今も動いてるし大丈夫じゃん??」

Slide 63

Slide 63 text

X @kotomin_m #phpconkagawa 構成要素を知っていることが重要 1年目〜アプリ開発だけをしていたとき、 PHPのバージョンについて気にしていなかった 「今も動いてるし大丈夫じゃん??」 → こう思うのは、あんまり知らなかったから

Slide 64

Slide 64 text

X @kotomin_m #phpconkagawa 構成要素を知っていることが重要 バージョンアップをやるために、アプリケーションが 動いている環境(インフラ側)の知識も増えた!

Slide 65

Slide 65 text

X @kotomin_m #phpconkagawa 構成要素を知っていることが重要 バージョンアップをやっていくうちに、 ● 「PHPってこういう感じなんだ!」

Slide 66

Slide 66 text

X @kotomin_m #phpconkagawa 構成要素を知っていることが重要 バージョンアップをやっていくうちに、 ● 「PHPってこういう感じなんだ!」 ● 「新しい機能良さそう」「新しい書き方すごい」

Slide 67

Slide 67 text

X @kotomin_m #phpconkagawa 構成要素を知っていることが重要 バージョンアップをやっていくうちに、 ● 「PHPってこういう感じなんだ!」 ● 「新しい機能良さそう」「新しい書き方すごい」 ● 「ライブラリも新しくなるじゃん」

Slide 68

Slide 68 text

X @kotomin_m #phpconkagawa 構成要素を知っていることが重要 バージョンアップをやっていくうちに、 ● 「PHPってこういう感じなんだ!」 ● 「新しい機能良さそう」「新しい書き方すごい」 ● 「ライブラリも新しくなるじゃん」 とにかく、色んな発見があった!

Slide 69

Slide 69 text

X @kotomin_m #phpconkagawa 構成要素を知っていることが重要 バージョンアップを通して、 アプリ全体への解像度が上がった

Slide 70

Slide 70 text

X @kotomin_m #phpconkagawa 構成要素を知っていることが重要 解像度が上がったら・・ 今の設計や利用しているライブラリ、開発環境などの 良いところや悪いところを考えられるようになった!

Slide 71

Slide 71 text

X @kotomin_m #phpconkagawa 構成要素を知っていることが重要 解像度が上がったら・・ 今の設計や利用しているライブラリ、開発環境などの 良いところや悪いところを考えられるようになった! → 継続的な運用・保守をするために行動出来るように 成長した!

Slide 72

Slide 72 text

X @kotomin_m #phpconkagawa 継続的な運用・保守をするために ● Makefileを、シュッと整備する ● Dockerの開発環境を、シュッと整備する ● GitHub Actionsを、シュッと整備する ● etc… とか、出来るようになった

Slide 73

Slide 73 text

X @kotomin_m #phpconkagawa 学んだこと バージョンアップに関わった エンジニアが成長する

Slide 74

Slide 74 text

X @kotomin_m #phpconkagawa 「今も動いてるし大丈夫じゃん??」だった私、 バージョンアップを通して出来ることが増えて成長! 関わったエンジニアが成長する

Slide 75

Slide 75 text

X @kotomin_m #phpconkagawa 「今も動いてるし大丈夫じゃん??」だった私、 バージョンアップを通して出来ることが増えて成長! バージョンって あげた方がいいの? 関わったエンジニアが成長する

Slide 76

Slide 76 text

X @kotomin_m #phpconkagawa 「今も動いてるし大丈夫じゃん??」だった私、 バージョンアップを通して出来ることが増えて成長! バージョンって あげた方がいいの? バージョンは あげた方がいいよ! 関わったエンジニアが成長する

Slide 77

Slide 77 text

#phpconkagawa X @kotomin_m おしながき ● 新米SREになるまで ● バージョンアップで得た学び ● 4プロダクト同時バージョンアップの進め方や方針 ● バージョンアップ前に知りたかった罠と対処法 ● まとめ

Slide 78

Slide 78 text

X @kotomin_m #phpconkagawa 4プロダクト同時バージョン アップの進め方や方針

Slide 79

Slide 79 text

X @kotomin_m #phpconkagawa 話すこと ● バージョンアップの背景・概要・期間 ● 4つプロダクトの概要 ● チーム構成・連携方法 ● ツール選定・リリースの方針など

Slide 80

Slide 80 text

X @kotomin_m #phpconkagawa 話すこと ● バージョンアップの背景・概要・期間 ● 4つプロダクトの概要 ● チーム構成・連携方法 ● ツール選定・リリースの方針など

Slide 81

Slide 81 text

X @kotomin_m #phpconkagawa PHPのバージョンについて 大体1年に1回、大きめのリリースがある 現在は 8.1、8.2、8.3がサポートされている

Slide 82

Slide 82 text

X @kotomin_m #phpconkagawa 今回のバージョンアップ 背景 ゴールはCentOS 7からの脱却 CentOS 7が 2024年6月30日にEOLを迎える → Amazon Linux 2023への移行

Slide 83

Slide 83 text

X @kotomin_m #phpconkagawa 今回のバージョンアップ 背景 ゴールはCentOS 7からの脱却 CentOS 7が 2024年6月30日にEOLを迎える → Amazon Linux 2023への移行 → そのために(諸々端折るが、)PHP 8.1が必要!

Slide 84

Slide 84 text

X @kotomin_m #phpconkagawa 今回のバージョンアップ 背景 4つのPHPプロダクトをPHP8.1へ!

Slide 85

Slide 85 text

X @kotomin_m #phpconkagawa 今回のバージョンアップ 期間 2023年12月〜2024年6月(現在進行中)

Slide 86

Slide 86 text

X @kotomin_m #phpconkagawa 話すこと ● バージョンアップの背景・概要・期間 ● 4つプロダクトの概要 ● チーム構成・連携方法 ● ツール選定・リリースの方針など

Slide 87

Slide 87 text

X @kotomin_m #phpconkagawa 4つのプロダクト 概要 説明をわかりやすくするために、仮名をつけました

Slide 88

Slide 88 text

X @kotomin_m #phpconkagawa プロダクト   ライオン   おさる   ペンギン   リス 4つのプロダクト 概要

Slide 89

Slide 89 text

X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン   おさる   ペンギン   リス 4つのプロダクト 概要

Slide 90

Slide 90 text

X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年 ある   おさる   ペンギン   リス 4つのプロダクト 概要 一番コード量も多く複雑、大変そう 直近も活発に開発されている

Slide 91

Slide 91 text

X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年 ある   おさる 中 6年 ほぼ無い   ペンギン   リス 4つのプロダクト 概要 1年前ぐらいからPHPStanが導入された 最近テストコードを書こうと奮闘中

Slide 92

Slide 92 text

X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年 ある   おさる 中 6年 ほぼ無い   ペンギン   リス 4つのプロダクト 概要

Slide 93

Slide 93 text

X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年 ある   おさる 中 6年 ほぼ無い   ペンギン 中 5年 ある   リス 4つのプロダクト 概要 元ことみん担当プロダクトなので知識が豊富 テストコードは初期構築の段階から存在/運用

Slide 94

Slide 94 text

X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年 ある   おさる 中 6年 ほぼ無い   ペンギン 中 5年 ある   リス 小 7年 ある 4つのプロダクト 概要 社内プロダクトから使われるツール 機能も多くないのでコード量が少ない

Slide 95

Slide 95 text

X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年 ある   おさる 中 6年 ほぼ無い   ペンギン 中 5年 ある   リス 小 7年 ある 4つのプロダクト 概要

Slide 96

Slide 96 text

X @kotomin_m #phpconkagawa PHP Laravel   ライオン 7.0 5.4   おさる 7.1 5.6   ペンギン 7.1 5.6   リス 7.1→7.2(移行中) 5.7 開始時点のバージョンは?

Slide 97

Slide 97 text

X @kotomin_m #phpconkagawa つまり、開始時点は

Slide 98

Slide 98 text

X @kotomin_m #phpconkagawa こう!

Slide 99

Slide 99 text

X @kotomin_m #phpconkagawa バージョンサポート表にすら載っていない 🥺

Slide 100

Slide 100 text

X @kotomin_m #phpconkagawa 話すこと ● バージョンアップの背景・概要・期間 ● 4つプロダクトの概要 ● チーム構成・連携方法 ● ツール選定・リリースの方針など

Slide 101

Slide 101 text

X @kotomin_m #phpconkagawa チーム編成

Slide 102

Slide 102 text

X @kotomin_m #phpconkagawa バージョンアップの進め方

Slide 103

Slide 103 text

X @kotomin_m #phpconkagawa バージョンアップの進め方

Slide 104

Slide 104 text

X @kotomin_m #phpconkagawa バージョンアップの進め方

Slide 105

Slide 105 text

X @kotomin_m #phpconkagawa バージョンアップの進め方

Slide 106

Slide 106 text

X @kotomin_m #phpconkagawa バージョンアップの進め方

Slide 107

Slide 107 text

X @kotomin_m #phpconkagawa バージョンアップの進め方 チームごとに役割分担して連携してEOL対応を進めた ● SREチーム ● アプリチーム(  チーム/      チーム) ● インフラチーム

Slide 108

Slide 108 text

X @kotomin_m #phpconkagawa 各チームの役割:SRE ● SREチーム ○ バージョンアップ対応完了に責任を持つ ○ 移行ガイドに載っている変更内容の確認し、対応方針を 決める ○ バージョンアップ対応を行ってPRを出す ○ 各チームと連携し、プロジェクトを推進する

Slide 109

Slide 109 text

X @kotomin_m #phpconkagawa 各チームの役割:SRE バージョンアップのリリース順のイメージ図を作成

Slide 110

Slide 110 text

X @kotomin_m #phpconkagawa 各チームの役割:アプリ ● アプリチーム(  チーム/      チーム) ○ アプリの検証を行い、正常に動作することに責任を持つ ○ SREチームが作るバージョンアップのPRレビュー ○ インフラと連携し、バージョンアップ作業を行う

Slide 111

Slide 111 text

X @kotomin_m #phpconkagawa 各チームの役割:インフラ ● インフラチーム ○ 各プロダクトのインフラに責任を持つ ○ サーバ構築・アップデート手順の作成など ○ アプリと連携し、バージョンアップ作業を行う

Slide 112

Slide 112 text

X @kotomin_m #phpconkagawa 各チームとの連携方法 ● 週次のMTG ○ SRE+インフラ+ = 20分 ○ SRE+インフラ+ = 40分

Slide 113

Slide 113 text

X @kotomin_m #phpconkagawa 各チームとの連携方法 ● 週次のMTG ○ SRE+インフラ+ = 20分 ○ SRE+インフラ+ = 40分 ● 各プロダクト/各バージョンごとにSlackスレッド を立てる

Slide 114

Slide 114 text

X @kotomin_m #phpconkagawa 話すこと ● バージョンアップの背景・概要・期間 ● 4つプロダクトの概要 ● チーム構成・連携方法 ● ツール選定・リリースの方針など

Slide 115

Slide 115 text

X @kotomin_m #phpconkagawa ツールの選定 使えるツールなどを調べる

Slide 116

Slide 116 text

X @kotomin_m #phpconkagawa ツールの選定 使えるツールなどを調べる 1. Rector:無料 ○ 自動で変更差分を修正してくれる 2. Laravel Shift:有料 ○ プルリクを自動で作成してくれる 3. Laravel Human Shifts:有料 ○ 人力版のLaravel Shift、外注でバージョンアップ

Slide 117

Slide 117 text

X @kotomin_m #phpconkagawa ツールの選定 方針をどうするか決める 1. 全部自力で頑張る 2. Rectorで省力化しつつ頑張る 3. Laravel Shiftで省力化しつつ頑張る 4. Laravel Human Shifts

Slide 118

Slide 118 text

X @kotomin_m #phpconkagawa ツールの選定 方針をどうするか決める 1. 全部自力で頑張る 2. Rectorで省力化しつつ頑張る 3. Laravel Shiftで省力化しつつ頑張る 4. Laravel Human Shifts

Slide 119

Slide 119 text

X @kotomin_m #phpconkagawa ツールの選定 「Rectorで省力化しつつ頑張る」方針に決定 理由:まず無料で使えるRectorを使ってみて、どれく らい使えるのかを試してみる 一旦導入してみて、使えそうなら継続する

Slide 120

Slide 120 text

X @kotomin_m #phpconkagawa リリースの方針

Slide 121

Slide 121 text

X @kotomin_m #phpconkagawa リリースの方針 ● ノーメンテ ● 業務時間中行う(基本的には) ● 業務に影響しない程度のダウンタイムは許容する

Slide 122

Slide 122 text

X @kotomin_m #phpconkagawa リリースの方針のメリット リリースの方針

Slide 123

Slide 123 text

X @kotomin_m #phpconkagawa リリースの方針のメリット ● 調整の工数を無くせる ○ 短期間で複数回のリリースが複数プロダクトで発生する ので、毎回調整はしんどい(4つ×3回=12回 以上) リリースの方針

Slide 124

Slide 124 text

X @kotomin_m #phpconkagawa リリースの方針のメリット ● 調整の工数を無くせる ○ 短期間で複数回のリリースが複数プロダクトで発生する ので、毎回調整はしんどい(4つ×3回=12回 以上) ● 稼働時間調整の負担が減る ○ 深夜や土日のメンテナンスをしなくていい リリースの方針

Slide 125

Slide 125 text

X @kotomin_m #phpconkagawa 最初に作った図を簡略化して紹介 リリース手順

Slide 126

Slide 126 text

リリース手順

Slide 127

Slide 127 text

リリース手順

Slide 128

Slide 128 text

リリース手順

Slide 129

Slide 129 text

リリース手順

Slide 130

Slide 130 text

リリース手順

Slide 131

Slide 131 text

リリース手順

Slide 132

Slide 132 text

X @kotomin_m #phpconkagawa 「PHP 8.1にすることを優先する」 その他の方針

Slide 133

Slide 133 text

X @kotomin_m #phpconkagawa 「PHP 8.1にすることを優先する」 →「やったほうがいいけど、後回しに出来るもの」は タスク化して置いとく その他の方針

Slide 134

Slide 134 text

X @kotomin_m #phpconkagawa 「PHP 8.1にすることを優先する」 →「やったほうがいいけど、後回しに出来るもの」は タスク化して置いとく ※ 基準:やらなくてもバージョンアップが完了するかどうか その他の方針

Slide 135

Slide 135 text

#phpconkagawa X @kotomin_m おしながき ● 新米SREになるまで ● バージョンアップで得た学び ● 4プロダクト同時バージョンアップの進め方や方針 ● バージョンアップ前に知りたかった罠と対処法 ● まとめ

Slide 136

Slide 136 text

バージョンアップ前に 知りたかった罠と対処法 X @kotomin_m #phpconkagawa

Slide 137

Slide 137 text

X @kotomin_m #phpconkagawa 先に知りたかった罠 1. どういうプロダクトがバージョンアップ大変なの? 2. Composerとお付き合いするって難しいのね…

Slide 138

Slide 138 text

X @kotomin_m #phpconkagawa どういうプロダクトが バージョンアップ大変なの?

Slide 139

Slide 139 text

X @kotomin_m #phpconkagawa 4つのうちどれが大変? 4つ同時にバージョンアップしたけど、特定のプロダ クトでバージョンアップ起因の障害が多く発生した…

Slide 140

Slide 140 text

X @kotomin_m #phpconkagawa どれが一番多く障害発生したか? プロダクト コード量 歴 テストコード   ライオン 大 8年 ある   おさる 中 6年 ほぼ無い   ペンギン 中 5年 ある   リス 小 7年 ある

Slide 141

Slide 141 text

X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   ライオン 大 8年 ある   おさる 中 6年 ほぼ無い   ペンギン 中 5年 ある   リス 小 7年 ある どれが一番多く障害発生したか?

Slide 142

Slide 142 text

X @kotomin_m #phpconkagawa おさるでいっぱい障害発生 → Laravel 5.7と5.8へのアップデートで3件の障害 プロダクト コード量 歴 テストコード   おさる 中 6年 ほぼ無い

Slide 143

Slide 143 text

X @kotomin_m #phpconkagawa おさるでいっぱい障害発生 ● Laravel関数の仕様変更 ● Laravelが利用しているライブラリの仕様変更 ● 思ってた型と違うものが入ってきてエラー プロダクト コード量 歴 テストコード   おさる 中 6年 ほぼ無い

Slide 144

Slide 144 text

X @kotomin_m #phpconkagawa プロダクト コード量 歴 テストコード   おさる 中 6年 ほぼ無い   ペンギン 中 5年 ある おさるでいっぱい障害発生 一方で、大体同じコード量・大体同じ歴のペンギンの バージョンアップはそこまで苦戦していない、なぜ?

Slide 145

Slide 145 text

X @kotomin_m #phpconkagawa おさる・ペンギンの違い

Slide 146

Slide 146 text

①テストコードがあるか無いか ②静的解析が継続運用されているか コード 量 歴 テスト コード 静的解析   おさる 中 6年 ほぼ無い NO運用の 時期あり   ペンギン 中 5年 ある 継続運用 おさる・ペンギンの違い

Slide 147

Slide 147 text

X @kotomin_m #phpconkagawa おさる・ペンギンの違い ①テストコードがあるか無いか → ペンギンは細かい部分〜クリティカルな部分まで、 テストコードが書かれていた(もちろん、完全ではないけど)

Slide 148

Slide 148 text

X @kotomin_m #phpconkagawa おさる・ペンギンの違い ①テストコードがあるか無いか → ペンギンは細かい部分〜クリティカルな部分まで、 テストコードが書かれていた(もちろん、完全ではないけど) アップグレードガイドには載っていない 仕様変更・追加に気付き、未然に不具合を修正出来た

Slide 149

Slide 149 text

X @kotomin_m #phpconkagawa 例:アップグレードガイドには 載っていない仕様追加 Laravel 6からバリデーションルール password が増えた https://readouble.com/laravel/6.x/ja/validation.html

Slide 150

Slide 150 text

X @kotomin_m #phpconkagawa カスタムバリデーションには同じ password という名 前のものが既にあった → アップデートが原因でこれが使えなくなった 例:アップグレードガイドには 載っていない仕様追加

Slide 151

Slide 151 text

X @kotomin_m #phpconkagawa カスタムバリデーションには同じ password という名 前のものが既にあった → アップデートが原因でこれが使えなくなった テストコードが落ちたのですぐに気がついて直せた 例:アップグレードガイドには 載っていない仕様追加

Slide 152

Slide 152 text

X @kotomin_m #phpconkagawa おさる・ペンギンの違い ②静的解析が継続運用されているか ペンギン ● プロダクト構築初期から導入 ● PHPStan, PHPCS, PHPMD の3種類 ● 必ずCIで実行・エラーは修正されていた

Slide 153

Slide 153 text

X @kotomin_m #phpconkagawa おさる・ペンギンの違い ②静的解析が継続運用されているか ペンギン:ある ● プロダクト構築初期から導入 ● PHPStan, PHPCS, PHPMD の3種類 ● 必ずCIで実行・エラーは修正されていた 私自身、1年目実装しているときは「静的解析わ からない」だったけど、CIで落ちているエラーを 一生懸命調べて修正・リリースしていた

Slide 154

Slide 154 text

X @kotomin_m #phpconkagawa おさる・ペンギンの違い ②静的解析が継続運用されているか ペンギン:ある ● プロダクト構築初期から導入 ● PHPStan, PHPCS, PHPMD の3種類 ● 必ずCIで実行・エラーは修正されていた 私自身、1年目実装しているときは「静的解析わ からない」だったけど、CIで落ちているエラーを 一生懸命調べて修正・リリースしていた CIで実行されていたおかげで、静的解析わか らない新人がプロダクトコードを書いてても 一定の品質は担保出来ていた

Slide 155

Slide 155 text

X @kotomin_m #phpconkagawa おさる・ペンギンの違い ②静的解析が継続運用されているか おさる:1年前ぐらいに入れた ● 最初あったけど途中から無くなったらしい ● PHPStan&Larastanは1年前ぐらいに入れた 入れたものの、コードは割とスパゲッティ

Slide 156

Slide 156 text

X @kotomin_m #phpconkagawa おさる・ペンギンの違い ②静的解析が継続運用されているか おさる:1年前ぐらいに入れた アップデート時のPHPStanエラーが多く、修正に苦戦 ※ 数千件のエラーすべての修正は現実的でないため、 絞って修正 → いくつか見落とした → 障害発生

Slide 157

Slide 157 text

コード量 おさる・ライオンも比較 テストコード 障害件数 小 大 有 無 少 多

Slide 158

Slide 158 text

コード量 おさる・ライオンも比較 テストコード 障害件数 小 大 有 無 少 多

Slide 159

Slide 159 text

コード量 おさる・ライオンも比較 テストコード 障害件数 小 大 有 無 少 多 コード量 テストコード 障害件数 小 大 有 無 少 多

Slide 160

Slide 160 text

コード量 おさる・ライオンも比較 テストコード 障害件数 小 大 有 無 少 多 コード量 テストコード 障害件数 小 大 有 無 少 多

Slide 161

Slide 161 text

X @kotomin_m #phpconkagawa 障害発生確率や難易度 コードの量 や複雑さ テストコードで 品質を担保出来 ているかどうか

Slide 162

Slide 162 text

X @kotomin_m #phpconkagawa どんなプロダクトが バージョンアップ大変か?

Slide 163

Slide 163 text

X @kotomin_m #phpconkagawa どんなプロダクトが バージョンアップ大変か? ● テストコードが無い ● 静的解析が無いので品質があまり良くない

Slide 164

Slide 164 text

X @kotomin_m #phpconkagawa どんなプロダクトが バージョンアップ大変か? ● テストコードが無い ● 静的解析が無いので品質があまり良くない → バージョンアップしたら障害起きるかも…って思っ ていたら「やろう!」ってなりにくい🥺

Slide 165

Slide 165 text

X @kotomin_m #phpconkagawa どんなプロダクトが バージョンアップしやすいか?

Slide 166

Slide 166 text

X @kotomin_m #phpconkagawa どんなプロダクトが バージョンアップしやすいか? ● テストコードが網羅的にある ● 静的解析を運用して品質が担保されたコードである

Slide 167

Slide 167 text

X @kotomin_m #phpconkagawa どんなプロダクトが バージョンアップしやすいか? ● テストコードが網羅的にある ● 静的解析を運用して品質が担保されたコードである → テストコードがあるので安心してバージョンアップできる! → 品質が担保されていれば、バージョンアップも苦戦しない!

Slide 168

Slide 168 text

X @kotomin_m #phpconkagawa Composerとお付き合い するって難しいのね…

Slide 169

Slide 169 text

X @kotomin_m #phpconkagawa Composerとのお付き合い 今まではたまにお話する程度だった Composerと、 バージョンアップを期に仲良くすることになった

Slide 170

Slide 170 text

X @kotomin_m #phpconkagawa Composerとのお付き合い これまでは、 ● composer install はしている ● composer require は前に手取り足取り教えても らってやったことがある ● dependabot のPRをマージしたことがある ぐらいの関わりだった

Slide 171

Slide 171 text

X @kotomin_m #phpconkagawa Composerとのお付き合い なので最初、composer require にめっちゃ苦戦した composer require -W hoge/fuga:^x.x とか打ってみる ※ -W:いい感じに他のライブラリもなるべく最新に アップデートするオプション

Slide 172

Slide 172 text

X @kotomin_m #phpconkagawa Composerとのお付き合い エラーになる

Slide 173

Slide 173 text

Composerとのお付き合い Your requirements could not be resolved to an installable set of packages. Problem 1 - Root composer.json requires laravel/framework 5.8.*, found laravel/framework[v5.8.0, ..., 5.8.x-dev] but these were not loaded, likely because it conflicts with another require. Problem 2 // 中略 Problem 6 not loaded, likely because it conflicts with another require.

Slide 174

Slide 174 text

Composerとのお付き合い Your requirements could not be resolved to an installable set of packages. Problem 1 - Root composer.json requires laravel/framework 5.8.*, found laravel/framework[v5.8.0, ..., 5.8.x-dev] but these were not loaded, likely because it conflicts with another require. Problem 2 // 中略 Problem 6 not loaded, likely because it conflicts with another require. 「このライブラリのこのバージョンが競合し ているからインストール出来なかったよ」

Slide 175

Slide 175 text

X @kotomin_m #phpconkagawa Composerとのお付き合い 対処法 → エラーになっているライブラリのバージョンを確認し アップデート出来るバージョンを探して直接指定する

Slide 176

Slide 176 text

X @kotomin_m #phpconkagawa Composerとのお付き合い 対処法 → エラーになっているライブラリのバージョンを確認し アップデート出来るバージョンを探して直接指定する ライブラリのcomposer.jsonかPackagistを確認する ときには他のライブラリのバージョンも確認する

Slide 177

Slide 177 text

X @kotomin_m #phpconkagawa Composerとのお付き合い どうしても無理なときは、、、、 一時的に無くてもプロダクトが動作する dev packages のライブラリをアンインストールした(例外的な対応)

Slide 178

Slide 178 text

X @kotomin_m #phpconkagawa Composerとのお付き合い 複数ライブラリをまとめてアップデートする $ composer require -W phpunit/phpunit:^8.0 mpdf/mpdf:8.2.3 composer/composer:2.7.2 barryvdh/laravel-ide-helper:^2.9 phpmd/phpmd:2.12.0 とか打ってみる

Slide 179

Slide 179 text

X @kotomin_m #phpconkagawa Composerとのお付き合い エラーになる

Slide 180

Slide 180 text

Composerとのお付き合い - Root composer.json requires laravel/framework ^6.0, found laravel/framework[v6.0.0, ..., 6.x-dev] but these were not loaded, likely because it conflicts with another require.

Slide 181

Slide 181 text

Composerとのお付き合い - Root composer.json requires laravel/framework ^6.0, found laravel/framework[v6.0.0, ..., 6.x-dev] but these were not loaded, likely because it conflicts with another require. 「Laravelのバージョンが競合してなんか無理」

Slide 182

Slide 182 text

X @kotomin_m #phpconkagawa Composerとのお付き合い 「なんか無理」にどう対処したか…?

Slide 183

Slide 183 text

X @kotomin_m #phpconkagawa Composerとのお付き合い 今回の場合は、 「いくつか同時に require でアップデート」をしてた

Slide 184

Slide 184 text

X @kotomin_m #phpconkagawa Composerとのお付き合い 今回の場合は、 「いくつか同時に require でアップデート」をしてた → 1つずつrequireコマンドを実行してみた

Slide 185

Slide 185 text

Composerとのお付き合い $ composer require -W phpunit/phpunit:^8.0 mpdf/mpdf:8.2.3 composer/composer:2.7.2 barryvdh/laravel-ide-helper:^2.9 phpmd/phpmd:2.12.0 $ composer require -W phpunit/phpunit:^8.0 $ composer require -W mpdf/mpdf:8.2.3 $ composer require -W composer/composer:2.7.2 $ composer require -W barryvdh/laravel-ide-helper:^2.9 $ composer require -W phpmd/phpmd:2.12.0

Slide 186

Slide 186 text

Composerとのお付き合い $ composer require -W phpunit/phpunit:^8.0 mpdf/mpdf:8.2.3 composer/composer:2.7.2 barryvdh/laravel-ide-helper:^2.9 phpmd/phpmd:2.12.0 $ composer require -W phpunit/phpunit:^8.0 $ composer require -W mpdf/mpdf:8.2.3 $ composer require -W composer/composer:2.7.2 $ composer require -W barryvdh/laravel-ide-helper:^2.9 $ composer require -W phpmd/phpmd:2.12.0 これを実行したときだけ さっきのエラーになることを発見

Slide 187

Slide 187 text

X @kotomin_m #phpconkagawa Composerとのお付き合い ライブラリを特定したので、ここについて詳しく調査 → アップデート出来た! ※ ここまで数時間……

Slide 188

Slide 188 text

X @kotomin_m #phpconkagawa 先に知りたかった罠 1. どういうプロダクトがバージョンアップ大変なの? 2. Composerとお付き合いするって難しいのね…

Slide 189

Slide 189 text

X @kotomin_m #phpconkagawa Composer以外にも様々な罠が… ● アップグレードガイドに載っていない仕様変更・追加 ● ライブラリの使っているライブラリの仕様変更 ● 静的解析エラーの直し方は分かるけど、このコードが 分からねえ! ● etc……

Slide 190

Slide 190 text

X @kotomin_m #phpconkagawa このお話は

Slide 191

Slide 191 text

#phpconkagawa X @kotomin_m おしながき ● 新米SREになるまで ● バージョンアップで得た学び ● 4プロダクト同時バージョンアップの進め方や方針 ● バージョンアップ前に知りたかった罠と対処法 ● まとめ

Slide 192

Slide 192 text

X @kotomin_m #phpconkagawa まとめ

Slide 193

Slide 193 text

X @kotomin_m #phpconkagawa はじめての PHPバージョンアップ

Slide 194

Slide 194 text

X @kotomin_m #phpconkagawa やってよかった!!

Slide 195

Slide 195 text

X @kotomin_m #phpconkagawa まだ私のSREキャリアは 始まったばかり・・

Slide 196

Slide 196 text

X @kotomin_m #phpconkagawa もっと、 もっと、

Slide 197

Slide 197 text

X @kotomin_m #phpconkagawa 挑戦していくぞ! 💪💪💪

Slide 198

Slide 198 text

ありがとう香川