×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 い つ ま で も で き る と 思 う な 夜 メ ン テ