Slide 1

Slide 1 text

小さく段階的リリースすること で深夜メンテを回避する まきまき 2025/03/23 PHPerKaigi 2025 1

Slide 2

Slide 2 text

まきまき          @_mkmk884 愛媛→京都→小田原 NE株式会社 アプリケーションエンジニア 来月は PHPカンファレンス小田原 みなさん次はぜひ小田原へ🏯 2

Slide 3

Slide 3 text

3 断続的に動いているサービス 止めたくないですよね? 止めたく なーい 止められたく なーい 開発者 ユーザー

Slide 4

Slide 4 text

4 システムを止めるための 深夜メンテナンス したくないですよね? 眠い…… しんどい…… 開発者 \ さらに /

Slide 5

Slide 5 text

わたしたちは止めてリリースすることにした 5 過去に深夜メンテで やってるし 同じようにしよ 定期的に動いている処理に用いるデータを書き換えるとき、 動いている処理を停止して、 1リリースで一気に書き換え&運用をする方針にしていた

Slide 6

Slide 6 text

6 ちなみに そのリリースって本当に夜間メンテが 必要なやつなんですか? \ ベテラン /

Slide 7

Slide 7 text

7 うちのサービスは深夜メンテができるんですけど、 できないサービスも世の中にはあります。 そのときのことを考えて一回やらない方法を考えてみても 良さそうに思いました。 \ ベテラン / 一応 ベテランとして アドバイス しておきますね

Slide 8

Slide 8 text

8 え…たしかに……? しなくてもいける道があるのか…?

Slide 9

Slide 9 text

9 \ ドーシヨ / チームで再考 \ コレハ ドウ? /

Slide 10

Slide 10 text

10 3つに分割して段階的にリリース ↓ 深夜メンテナンスを回避

Slide 11

Slide 11 text

どうして段階的にリリースできたのか 11 1. やりたい変更を処理単位で分割できないかを考える ● 変更手順を追ってみる 2. もし戻したいときの逃げ道を確保する ● 修正対象を絞る ● どの段階で、どうデータや処理がなっていると よいのかを洗い出す

Slide 12

Slide 12 text

どうして段階的にリリースできたのか 12 1. やりたい変更を処理単位で分割できないかを考える ● 変更手順を追ってみる 2. もし戻したいときの逃げ道を確保する ● 修正対象を絞る ● どの段階で、どうデータや処理がなっていると よいのかを洗い出す

Slide 13

Slide 13 text

13 第1段階 データを避難させる

Slide 14

Slide 14 text

第1リリース 14 1. 一時利用用カラムを作成し、既存カラムの中身をコピー 既存カラム橋 一時カラム橋 14

Slide 15

Slide 15 text

第1リリース 15 既存カラム橋 2. 一時利用用カラムを参照するようにソースを書き換える 一時カラム橋 15

Slide 16

Slide 16 text

16 第2段階 値を加工して元の場所にいれる

Slide 17

Slide 17 text

第2リリース 17 既存カラム橋 3. 既存カラムを一時利用用カラムをもとに加工して保存 一時カラム橋 17

Slide 18

Slide 18 text

第2リリース 18 既存カラム橋 4. 既存カラムを参照するようにソースを書き換える 一時カラム橋 18

Slide 19

Slide 19 text

19 第3段階 避難場所を消す

Slide 20

Slide 20 text

第3リリース 20 既存カラム橋 5. 一時利用用カラムをDROP 20

Slide 21

Slide 21 text

どうして段階的にリリースできたのか 21 1. やりたい変更を処理単位で分割できないかを考える ● 変更手順を追ってみる 2. もし戻したいときの逃げ道を確保する ● 修正対象を絞る ● どの段階で、どうデータや処理がなっているとよい のかを洗い出す

Slide 22

Slide 22 text

もし問題が発生した場合にリカバリができる 22 既存カラム橋 移行もできるし、戻せる 一時カラム橋 22

Slide 23

Slide 23 text

23 無事 サービスを止めることなく 段階的リリースできました

Slide 24

Slide 24 text

方針を考えるときに意識したこと 24 ● 定期的に動いている処理を止めないこと ● 途中で問題があれば、 ○ 戻せるようにすること ○ 方針を変えられるようにすること

Slide 25

Slide 25 text

25 アジリティを支える品質特性 / Agility and Quality Characteristics Developers Summit 2021 Summer 和田卓人 twada

Slide 26

Slide 26 text

小さく段階的にリリースするために意識したこと 26 チーム全員で1つのボードを 見ながら方針を話し合う → 認識合わせ ● 大きな流れ ● 開発手順 ● その時のDBの値の状態 ● タスクの分け方 ● リリースの分け方 ※ 記載内容はイメージです

Slide 27

Slide 27 text

チーム全体で認識合わせをするメリット 27 ● レビューでの内容理解が速くなる ● チームの誰でもタスクを持てる状態になる ○ もし問題・障害が発生したときにすぐ対応できる 確率が上がる ● タスクを並行して進めることができる

Slide 28

Slide 28 text

チーム全体で認識合わせをするメリット 28 ● レビューでの内容理解が速くなる ● チームの誰でもタスクを持てる状態になる ○ もし問題・障害が発生したときにすぐ対応できる 確率が上がる ● タスクを並行して進めることができる

Slide 29

Slide 29 text

小さくリリースすることのメリット 29 ● 問題・障害が発生したときに問題箇所を発見しやすい ○ 次のリリースで気をつけるところがわかる ● 1つのPRの差分が少なく、読みやすい ● 知識や作業の属人性を減らせる ○ 担当者の不在、組織の変化に対応できる ● タスクが捌けている感が気分がいい

Slide 30

Slide 30 text

小さくリリースすることのメリット 30 ● 問題・障害が発生したときに問題箇所を発見しやすい ○ 次のリリースで気をつけるところがわかる ● 1つのPRの差分が少なく、読みやすい ● 知識や作業の属人性を減らせる ○ 担当者の不在、組織の変化に対応できる ● タスクが捌けている感が気分がいい

Slide 31

Slide 31 text

小さくリリースすることのメリット 31 ● 問題・障害が発生したときに問題箇所を発見しやすい ○ 次のリリースで気をつけるところがわかる ● 1つのPRの差分が少なく、読みやすい ● 知識や作業の属人性を減らせる ○ 担当者の不在、組織の変化に対応できる ● タスクが捌けている感が気分がいい 1日で終わるくらいに しておくと 次の日に持ち越さなくて ハッピー

Slide 32

Slide 32 text

小さくリリースすることのデメリット 32 ● 全体像が見えづらくなる → ドキュメントに記載して、可視化をしておく ● 依存関係の管理が複雑化する → チーム全体で認識を揃え、優先度を精査する

Slide 33

Slide 33 text

小さくリリースすることのデメリット 33 ● 全体像が見えづらくなる → ドキュメントに記載して、可視化をしておく ● 依存関係の管理が複雑化する → チーム全体で認識を揃え、優先度を精査する

Slide 34

Slide 34 text

まとめ 34 ● メンテナンス時間がなくリリースできる方法はないかを 考えてみることが大切 ● 深夜メンテを回避する方法の1つとして 小さく段階的にリリースするという方法がある ○ 問題が発生したときに問題箇所を発見しやすい ○ 方針転換がしやすい

Slide 35

Slide 35 text

35 い つ ま で も で き る と 思 う な 夜 メ ン テ