さくらコードSakura Code
小説/第17話

Novel

第17話 デプロイ前夜

第17話 デプロイ前夜のイメージイラスト

Script

Cold Open

シーン1 リリース予定日の朝

 一月十八日。水曜日。

 大寒は数日先だが、朝のうちの冷気は、オフィスのエアコンの暖風を、強めに保たせていた。窓ガラスの内側に、薄く、結露の跡が、残っている。

 桜子のSlackの投稿は、九時二十分に、リリース束チャンネルに流れた。

@mochizuki-sakurako: みなさん、おはようございます。
明日木曜、17:00、小リリース束の本番反映を予定しています。
以下、リリースチェックリストです。入社してから、ここまでで積んだ材料を、
束向けに束ねました。
ご確認と、抜けのご指摘、お願いします

 添付のチェックリストは、桜子が、週末に下書きを書いて、火曜の夜に整えたものだった。

## Release Checklist: 2023-01-19 小リリース束

対象: #217 / #218 / #219 / #220 / #221 (5件)

- [ ] AC 全件、レビューApproved
- [ ] CI 全件、緑
- [ ] ステージング検証: 各Issueの受け入れ条件を通しで確認
- [ ] ロールバック可能性:
  - [ ] #217 注記表示: 文言差し替えのみで戻せる
  - [ ] #218 フラグ常時ON: feature_flags.yaml の初期値を false に戻せる
  - [ ] #219 Runbook: 戻す必要なし (ドキュメント)
  - [ ] #220 レスポンシブ修正: 元のCSSに差し戻せる
  - [ ] #221 文言更新: 旧文言に差し戻せる
- [ ] 停止条件:
  - [ ] #218 の fallback 発火件数が、平常時の10倍を超えた場合、
        フラグを一時オフ
- [ ] 顧客説明 (千葉ハートフルケア向け):
  - [ ] #217 の注記の文言、大滝さんに事前共有済
  - [ ] #218 のフォールバック恒久化について、高木さんに説明済
- [ ] 営業コミットメント:
  - [ ] #221 文言更新、営業が今週中リリースを希望
- [ ] 10/13 P2障害 再発防止の成立度:
  - [ ] #219 Runbookが #218 デプロイと同時に公開される
  - [ ] 外部依存のダッシュボードから Runbook に 1クリック到達

 桜子は、送信ボタンを押してから、自分の指先が、まだ少しだけ、冷たいことに気づいた。


Part A

シーン2 翔太の発見

 午後、二時すぎ。

 翔太が、ステージング環境で、#218 の常時ON化を有効にした状態のダッシュボードを、数時間観察していた。桜子のチェックリストの「停止条件」欄のベースになる、平常時の発火件数を取るためだった。

 翔太は、やがて、桜子と遥に、Slackで短く書いた。

@nakamura-shota: ちょっと、ステージングのダッシュボード、
数字、合わない気がする。フォールバック発火のアプリ側カウンタと、
ダッシュボードの5分窓の集計で、差が常時出てる

 桜子と遥が、すぐに集まった。翔太は、画面を共有する。

 アプリ側は、1分窓で発火回数を記録。プロメテウス風のメトリクスを、ダッシュボード側が5分窓で集計している。ただ、ダッシュボードの集計窓の境界のちょうどのタイミングで発火したケースが、手前の窓にも、次の窓にも、カウントされない瞬間がある。

「これ、何件くらい、漏れる?」

 桜子が、緊張した声で聞いた。

「いま、ステージングの模擬負荷で、一時間あたり、実際の発火件数の、たぶん、2〜4%が、過小カウントになる」

 遥が、画面を見ながら、

「実害は、どのくらい見積もる?」

「業務影響は、ほぼない。ダッシュボードの数字が、2〜4%小さく見える、だけ」

「ただし、停止条件は、そのダッシュボードで発火件数が10倍を超えたら、って桜子さんが書いてる」

「10倍はさすがに効く。ただ、“ほんとは10.2倍なんだけど9.9倍に見える”みたいな境界で、動かないまま見過ごす可能性は、ある」


シーン3 微妙な軽微さ

 桜子は、自分のチェックリストを、もう一度、上から読んだ。

 「10/13 P2障害 再発防止の成立度」の下に、自分で書いた一行があった。

- 外部依存のダッシュボードから Runbook に 1クリック到達

 十月の障害のpostmortemで、桜子が自分の名前で、「(望月) 外部依存ごとに、Runbook に "公開ステータスページURL / SLA / 過去incident頻度" の欄を必ず置く」と書いた再発防止案。あれを、束として成立させるために、「ダッシュボード ↔ Runbook」のひと繋ぎを、自分で束の中に組み込んだ。

 でも、そのダッシュボード側が、境界で数字を過小報告する。

 実害は、ほとんど、ない。でも、あのpostmortemで桜子が書いた再発防止の、目的の根っこを、半分、削る。

 (止めるほどか、止めるほどじゃないのか)

 桜子は、メモ帳の裏ページを、開いた。

- 全件、予定通りリリース
- 全件、翌週に延期
- 一件だけ延期 (ダッシュボード側直してから)

 三択を、並べた。

 どれかが、自然な答えだとは、感じなかった。


Part B

シーン4 会議室の三択

 十六時。

 鈴木、遥、翔太、早瀬、桜子の五人が、空いていた小会議室に集まった。エアコンは強めにしてもらった。翔太が、ノートPCを持参して、ステージングのダッシュボードを映す。

 桜子は、自分のメモをちらっと見て、ホワイトボードの前に立った。手のひらが、少しだけ、湿っていた。

「今日のお話は、明日のリリースで、どこまで出すか、の相談です」

 桜子は、ホワイトボードに、三択を書いた。

(A) 全件、予定通り木曜17:00 デプロイ
(B) 全件、翌週月曜デプロイ
(C) 一件だけ延期。#218/#219 のダッシュボード絡みを翌週、#217/#220/#221 は木曜予定通り

 それから、評価軸を、横に並べた。

業務影響 / 顧客説明 / ロールバック可否 / 10/13 P2障害 再発防止の成立度 / 営業コミットメント

 桜子は、それぞれの欄に、自分の頭の中にあった数値や手応えを、書き込んでいった。

(A) 全件、予定通り
- 業務影響: 軽微。ダッシュボード数値が2〜4%過小
- 顧客説明: 不要 (過小であって過大ではない)
- ロールバック可否: 可 (フラグで切れる)
- 10/13 P2障害 再発防止の成立度: 半分 (監視の目的が一部崩れる)
- 営業コミットメント: 満たせる (#221 今週中)

(B) 全件、翌週延期
- 業務影響: なし
- 顧客説明: 必要 (#221 の文言更新遅延を営業・顧客に伝える)
- ロールバック可否: -
- 10/13 P2障害 再発防止の成立度: 来週に繰り越し
- 営業コミットメント: 満たせない

(C) 一件だけ延期
- 業務影響: 軽微 (延期対象は監視側のみ)
- 顧客説明: #218/#219 の延期理由を営業・顧客に伝えるが #217 と #221 は今週に届く
- ロールバック可否: 4件は可、1件は延期 (事故は起きない)
- 10/13 P2障害 再発防止の成立度: 来週に繰り越し、ただし今週 Runbook ドラフトは公開する
- 営業コミットメント: 満たせる

シーン5 桜子の提案書

 桜子は、ホワイトボードの一番下に、自分の推奨を、はっきり書いた。

推奨: (C) 一件だけ延期
根拠:
- (A) は目的を半分崩したまま「再発防止、済」と言うことになり、
  10/13 のpostmortem の価値が目減りする
- (B) は、#217 と #221 を、単なる延期の巻き添えにする。
  #217 は千葉の現場観察(大滝さん)起点で、今週届けたい
- (C) は、延期対象を監視まわりに限定。他の4件の価値は今週に届く

懸念:
- ダッシュボード修正に追加で、エンジニア1人1〜2日
- 顧客向けに「一部延期」の説明がひとつ増える
- 束としての見え方が、「完全な一束」ではなくなる

合意すべきこと:
- 延期対象の新リリース日を決める (提案: 来週火曜)
- 顧客向け延期説明の担当 (提案: 鈴木さん)
- ダッシュボード修正の担当 (提案: 中村くん、早瀬さんレビュー)

 書き終えて、桜子は、ペンを置いた。マーカーの匂いが、会議室の冷気と混ざっている。

 しばらく、誰も、口を開かなかった。

 翔太は、自分のノートPCの画面を見たままで、

「僕、ダッシュボード直すの、やります。あさってか、しあさっての夕方には、直せる」

 と言った。

 早瀬が、

「#217 と #221 の事前確認、わたしが、今日中に仕上げておきます」

 遥が、

「桜子さんの、並べ方、いいね」

 と、短く、ひと言。


Part C

シーン6 鈴木の決裁

 鈴木は、しばらく、ホワイトボードと、天井の間を、視線で往復していた。

 彼の顔には、リーダーの、板挟みが、静かに浮かんでいた。桜子は、その沈黙を、こわばった喉で、ただ、見ていた。

 鈴木は、自分のノートPCを、一度、開いて、何かを軽くめくり、また、閉じた。営業からのメールか、契約書か、別の顧客の名前か。桜子には、開かれた画面の中身までは、見えなかった。けれど、その「画面を一度開いて閉じる」という、ほんの数秒の動作のなかに、いま、桜子のホワイトボードの三択の上に重ねるべき、別の重さの何かが、置かれているのは、伝わってきた。

 桜子のホワイトボードには、業務影響、顧客説明、ロールバック可否、再発防止の成立度、営業コミットメント、の五つの軸が並んでいた。鈴木の頭の中には、たぶん、そこに、もう一段、桜子のメモ帳には載せられない、別の縦列がある。営業の数字。半年単位の信頼残高。上層からの今期の方針。今期の他のチームの予定。どれも、桜子が今晩、自分の言葉で書ける範囲には、入っていない。

 桜子は、その「自分には書けなかった列」が、いま、目の前で、書かれていく時間を、見ていた。

 やがて、鈴木が、口を開いた。

「(C) でいこう」

「はい」

 桜子は、思わず、頭を下げそうになって、下げなかった。

「一件だけ延期の事情説明は、僕がお客さんに書く。高木さんと、営業には、僕からメールする。桜子さん、ダッシュボード修正のリリース再提案、来週頭でお願いします」

「はい、やります」

「翔太くん、修正お願い。早瀬さん、レビュー、お願いします」

 全員が、「はい」で答えた。

 解散の間際、鈴木は、ホワイトボードを、スマホで写真に撮った。

「これ、議事録、桜子さん、このまま、貼っておいてくれる?技術判断は、記録に残す、ってことで」

「はい」

 会議室を出るとき、鈴木は、桜子の横に並んで、ひとこと、だけ、言った。

「桜子さん、僕は、桜子さんの提案書で、決めた。桜子さんは、決めない。決めるのは、こっち。そのかわり、桜子さんには、これからも、ちゃんとした提案書を持ってきてほしい」

 その声は、いつもの、やわらかな声色のままだった。けれど、ひとつだけ、いつもより、少し、重かった。

 桜子は、ひと拍だけ、立ち止まった。

「鈴木さん、ひとつ、聞いていいですか」

「うん」

「いまの『決めるのは、こっち』の『こっち』って、わたしから見て、どこに、立っているんですか」

 鈴木は、廊下の途中で、軽く、立ち止まった。

「営業の数字、契約期間、他のお客さんの状況、今期の会社の方針。桜子さんの提案書に、たぶん、必ずしも全部は、書ききれない、別のレイヤー。そこを背負うのが、僕の今日の役目」

「それが、提案と、決裁の、差ですか」

「うん。提案は、自分の見えてる範囲を、根拠とセットで、ちゃんと並べる。決裁は、その並びの上に、自分の見えていない範囲を、もう一段、重ねて、最後に、ハンコを押す。提案を出す側が偉くないわけでも、決裁する側が偉いわけでも、ない。役割が、別だってこと」

「……はい」

「桜子さんが、いま、自分の手元で書ける範囲だけ、ちゃんと書いてくれれば、僕は、僕の手元の、別の重さを、ちゃんと、その上に、重ねる。重ねるのは、僕の仕事だから、桜子さんは、桜子さんの並べ方を、これからも、続けてほしい」

「はい」

 鈴木は、もう一度、軽く、うなずいて、廊下の角を、曲がっていった。


Ending

シーン7 夜の屋上、一年目の終わりが見えてくる

一月の夜、ビルの屋上のベンチで、コートを着た桜子がひとりメモ帳を開いて書いている

 十九時半。

 桜子は、退勤の前に、屋上のベンチに寄った。雨のレビューの日、遥と話した場所。

 そのときの遥は、桜子の隣に座って、前職の決済の夜の話をしてくれた。今日は、桜子ひとりだった。

 1月の夜の風は、屋上のベンチでは、ベンチの背もたれの金属に、しっかりと、冷たさを残していた。近くのビルの窓から、まだ、ぽつぽつと、灯りが漏れている。

 桜子は、メモ帳を開いた。

2023/01/18 新人日記

- リリース前夜、(A)(B)(C) の三択を、根拠つきで並べた
- 推奨は (C)、決裁は鈴木さん
- 「桜子さんは、決めない。決めるのは、こっち。
  そのかわり、ちゃんとした提案書を持ってきてほしい」
- 提案の質と、決裁の位置は、別

覚えたこと:
- 全有り/全なし、だけじゃない。切り分ける判断がある
- 切り分けの材料は、影響範囲 / 顧客説明 / ロールバック可否 /
  再発防止の成立度 / 営業コミットメント
- リーダーが沈黙している時間の重さを、見ていた
- 「決めるのは、こっち」の「こっち」には、わたしの提案書には書けない
  別のレイヤー(営業数字、契約期間、会社方針)が積まれている
- 提案書 = 自分の見えてる範囲を、根拠と一緒に、並べる
  決裁    = その並びの上に、見えていない範囲を、もう一段、重ねる
  どっちが偉い、ではなく、役割が、別
- 「自分が見えていない範囲」を、無理に推測して提案書に混ぜないこと
  わたしの仕事は、自分の見える範囲を、ちゃんと、書ききること

 ペンを止めて、桜子は、頭の中で、これまでの学びを、数えた。

 ログを見よう。レビューは会話。エラーは赤く咲く。テストは未来の保険。観察と段階分割。ロールバックなし禁止。記録と三択。信じすぎない、を、信じる。分けて、渡して、聞ける状態にする。

 そして、今日。

 (十、まで、きた)

 入社からの一年が、もうすぐ、ひと回りして閉じるのだと、気づいた。

 明日のデプロイは、四件。翌週に残る一件の重み。そのどちらも、自分の手で積んできたチェックリストの中にある。そのチェックリスト自体も、ここまでに、ひとつずつ、誰かに教わって、書き継いできた。

 桜子は、メモ帳を閉じた。

 (明日、わたしは、何を見ていることになるんだろう)

 翌日のリリースは、ボタン自体は、鈴木が押す。見るのは、桜子の仕事ではない。けれど、束を整えた人として、その時刻、ちゃんと、机の前にいるつもりだった。

 屋上のベンチの下で、鞄の桜色のキーホルダーが、風に、すこしだけ揺れた。