第2話「それ、絶対言っちゃダメなやつ・2 抱えてる爆弾は、一つじゃない」
久しぶりのお台場デートの最中に、突然の呼び出し。
沙耶との楽しい時間を振り切って、会社に向かうことになった瑛士を待ち受けていたものとは……?
※緊急の雰囲気を出すため、専門的な用語も出てきますが、
最後に簡単な用語解説集を用意してますので、ふわっと雰囲気で読んでいただいて大丈夫です。
コートを脱ぎ、紙袋を机の下に放り込み、少しずつ装備を剥がして日常に戻っていく。
「ログ、見せてください」
瑛士が声をかけると、サーバー班のデスク前にいたエンジニアが、椅子ごと少し横にずれた。
モニターには、昨晩のサーバー負荷を示す赤いグラフの山がびっしり並んでいる。
「……この時点ではユーザー数のピーク、もう過ぎてるはずですよね」
グラフの軸を一瞥して、瑛士は眉を寄せた。
深夜に差し掛かる時間帯。ふつうなら負荷が落ち着いていくはずだ。
「はい。他のサーバーは素直に落ちてるんですけど……
イベント用だけ、ずっと上がりっぱなしで」
エンジニアが、問題のラインをマウスでなぞる。
山の稜線が、ゆっくり、しかし確実に右上へと伸びていた。
「ドカンと死ぬんじゃなくて、じわじわ死んでるパターンか……」
派手なエラーは出ていない。
でも、ログの量が静かに増え続け、ディスクIOも上がってる。
メモリの使用量もじわじわ右肩上がりする——
そういう危ない形だ。
「このまま本番まで放っといたら、明日のイベント中に、確実にパンクしますね……」
サーバー班のエンジニアが、げっそりした顔でつぶやく。
瑛士は真剣な眼差しでグラフの傾きを追った。
「……ログの出方、ここから変わってますね。
本来なら一回で終わる処理が、同じログを何度も吐いてる」
グラフの一点を指し、そのタイミングに、頭の中で昨日の作業履歴を重ねる。
「たしかこの時、イベントの仕様、差し替えしましたよね」
「それ、多分俺がマージしたやつっス」
声を上げたのは、新堂だった。
「イベントボス戦の、残りHPまわりの処理いじったんスよ。演出、派手にしたくて」
「やっぱりか」
「……やっぱりって何スか。俺も一応テストしてますからね?」
新堂の言葉を聞きながらも、もう瑛士の指はキーボードの上で走り始めていた。
該当の修正差分を開き、ログの時間と見比べていく。
「ここか。残りHPが一定以下になった時の、ド派手エフェクトのトリガー処理追加」
瑛士はコードを指し示した。
「これ、最後までちゃんと倒しきった時にのみ、終了する前提で組んでますよね?」
「っスね。ラストは絶対見せ場なんで。……あ」
新堂の声が、内省するかのように小さくなる。
「そうか。途中で抜けられた時は、片付け処理が走ってないのか……」
瑛士は頷いた。
「そうです。イベントの途中でログアウトされたり、回線落ちたりした場合、
終了の指示が飛ばない。だからクリーンアップが保証されてない」
「そのたびに、見えないところに『ゴミ』が溜まっていく感じッスね」
テストプレイではみんな最後までちゃんと遊んでくれるので、途中で抜けた場合のパターンは、対応を忘れがちになる。
新堂は、弱った顔で頭をかきながら言葉を継いだ。
「すませんした。俺のやらかしッスね、これ」
瑛士はモニターから目を離さずに言った。
「新堂さん一人のせいじゃありません。
そこまで想定して仕様を詰めなかった、僕の責任でもある」
サーバー班のエンジニアが、おそるおそる口を開く。
「ロールバック、します? イベント実装ごと前の状態に戻して……」
「いや、このまま戻しても、問題を先送りにするだけです。
明日も同じ遊び方をされたら、同じ場所で死にます。
今ここでちゃんと潰して、イベント用インスタンスごと新しいのに差し替えましょう」
「今から、ですか……?」
エンジニアの表情に、一瞬だけ絶望がよぎる。
「徹夜に備えて、夜食買ってきてもいいんですよ?」
軽口を交わしつつも、頭の中ではもう、対処の手順を並べていた。
原因の特定。
どこまで影響が出ているかの確認。
どこを直せば、一番リスクが少なく収まるか。
サーバー側の管理をいじるか、
それともイベント用のスクリプト側で、「どんな抜け方をしても必ず最後に片付けが走る」ように、保険を掛けてしまうか。
「ふむ……スクリプトで拾ったほうが早いですね」
ログを追っていた瑛士は、そう決めて椅子の背にもたれた。
「全体を触るより、イベント側だけ差し替えたほうが安全でしょう」
「了解!『イベント中断時、絶対後始末するマン』の出動っスね」
新堂は軽く片手を挙げると、一気にスイッチが入ったのか、爆速でキーボードを叩きはじめた。
ここで誰も、「うわ、帰れないじゃん」とは言わない。
そういう愚痴は、みんなわかっていても、ここでは口に出さない。
ここに残っているのはただ——
「やるしかないね」と苦笑いしながら、再び机に向かう人たちだけだった。
(……こういうところが、好きなんだよな)
誰かが潰れそうな夜に、誰かが当たり前みたいな顔で隣に来てくれる。
困った時は助けに行って、
自分が困った時は、助けられる側になる。
その循環が出来上がっているこの場所を、瑛士は嫌いになれそうもなかった。
* * *
「……ふぅ」
瑛士は大きく息を吐いて、壁の時計を見上げる。
日付は、とっくに変わっていた。
修正済みスクリプトの反映。
テスト用のイベント専用フィールドを起動し直し、途中抜けを何度も繰り返す。
さっきまで真っ赤に尖っていたログの山は、今はなだらかな丘のように落ち着いたカーブを描いていた。
「傾き、収まりましたね」
サーバー班のメンバーが、ホッとしたように椅子の背にもたれる。
「イベント中断パターン、十回連続で流しても大丈夫です。
メモリも、ちゃんと戻ってます」
「よし。……これで、明日はなんとか持つな」
明日、というかもう「今日」なのだが、そこは誰もツッコまない。
瑛士は椅子の背もたれに体を預けた。
張り詰めていた緊張が、ようやくほどけていくのを感じる。
視界の端では、新堂が空になったエナドリ缶を指で転がしながら、自分の書いたスクリプトのログを確認していた。
「じゃ、とりあえず今日は上がりましょっか。サカキさん、顔色死んでるんで」
「お互い様ですよ、新堂さん」
新堂は眠そうな顔をしていたが、その目には、まだちゃんと光が点っていた。
「明日、いいイベントになるといいっスね」
「なりますよ。さっきの修正が入ったから、逆に安定してて当たり前になります」
「上手くいって当たり前って、一番報われないっスよね」
「確かに……でもそれが、一番いい状態なんですよ」
うまく行って当たり前の仕事。
でも、その裏にはこうして、何人もが残業した苦労が隠されている。
「じゃ、お先に。……ほんとみんな、ちゃんと帰ってくださいね」
新堂が笑って、手をひらひらと振りながら帰っていく。
まだ終電が間に合う者、タクシーを使う人、そして帰るのは諦めて仮眠室を使う者……。
それぞれの寝場所を求めて散っていく。
* * *
瑛士もデスクの上を片付け、帰る支度を始めた。
スマホを見ると、沙耶からのメッセージが届いていた。
《今日はありがとう》
《まだお仕事なの?》
《また今度ね》
最後のメッセージのタイムスタンプは、二時間前だった。
(……しまった、もう寝てるかな)
椅子の背にかけていたコートを羽織りながら、瑛士は深く息をついた。
《今日はごめんな、またね》
何度か書いては消してをくり返し、最後は結局シンプルにそう書いて返信する。
またね、とは書いたものの、心のどこかでは
いつかこのバランスは崩れる。
という予感だけが、小さく侵食を始めていた。
* * *
そして、その「いつか」は、思ったより早く訪れることとなった——。
// TODO: Continue in next chapter.
。*❅┈┈┈┈┈┈┈┈┈┈┈┈❅*。
【開発現場ミニ用語集】
◆ サーバー班
ゲーム世界そのものを動かしているコンピュータ (サーバー)を、日々なだめすかしながら運用している人たち。
プレイヤーにとっては「ログインボタン押したら当たり前にゲームが動く」裏側で、
その「当たり前」を維持するために、彼らは密かに徹夜を繰り返している。
◆ サーバーがじわじわ死ぬ
サーバーが「ドカン!」と一瞬で落ちるのではなく、
表向きは何とか動いているものの、裏でじわじわと負荷やログが積もり続け、
気づいた頃には限界を超えて壊れてしまうパターン。
◆ ディスクI/O
ゲームやサーバーが、ディスク(HDDやSSD)からデータを読み書きしてる量のこと。
マップの読み込み、キャラデータの保存、ログの書き込みといった「データの出し入れ」がディスクI/O。
こねが増えすぎると、ゲームが重くなったり、読み込みが遅くなったりする。
開発者からすると、
「CPUもメモリも余裕あるのに重いんだけど!?」
と思ってよく見ると、このディスクI/Oが真っ赤になっていたりする、真犯人ポジションの常連である。
◆ イベント用インスタンス
オンラインゲームの世界の中に用意された「イベント専用の個室ワールド」。
期間限定ボス戦やお祭りコンテンツを、この「部屋」の中で動かすイメージ。
プレイヤーからすると
「イベント会場だ! ひゃっほう!」
というノリだが、開発・運営側からすると
「落ちるなよ……ここだけは落ちるなよ……」
と毎回お祈りしている空間でもある。
瑛士が言っていた「イベント用インスタンスごと差し替えよう」は、
このイベント専用の部屋を、丸ごと新しいものと入れ替える、という意味。
◆ マージ
ソースコード管理ツールなどで別々に作業していた変更を、ひとつの流れに合流させること。
うっかりバグを一緒に流し込んでしまうと、
「マージしました」=「地雷を埋めました」
になってしまうこともあるため、開発現場ではちょっとドキドキする瞬間でもある。
◆ ロールバック
一言で言うと「時間を巻き戻すボタン」。
不具合が発覚した時に、問題のあるバージョンより前の状態に、システムやデータを戻してしまうこと。
ただしデータベース更新が絡むと、ロールバックは簡単じゃない。
「それまでに積み上がったもの」がなかったことになる危険もあるため、乱用はできない。
第2話ではサーバー班が「ロールバックします?」と提案していたが、瑛士は
「同じことがまた起きるだけだから、根本から直そう」
という判断をしている。
◆ エフェクト
ゲーム画面で表示される光や炎、爆発、キラキラなどの視覚的な演出効果のこと。
派手であればあるほど、プレイヤーはテンションが上がり、
サーバーとマシンパワーは静かに泣く。
新堂が「ボスの残りHPが少なくなった時にド派手エフェクトを足した」結果、
見えないところにゴミが溜まり続ける不具合が生まれたのが、第2話の真相である。
◆ スクリプト
ゲームの中で「こうなったら、こう動く」という流れを記述した台本のようなもの。
キャラの行動パターン、イベントの進行、演出のタイミングなどを細かく制御する。
瑛士たちの現場では、
「サーバー本体をいじるより、イベント用スクリプト側で
『どんな終わり方しても最後に片付ける処理を入れる』ようにしておこう」
という判断がされている。
根本の柱を直すか、イベント会場側で安全装置を増設するか、というイメージ。
◆ 「イベント中断時、絶対後始末するマン」
イベントの途中でプレイヤーが抜けたり落ちたりしても、
裏側でちゃんと「片付け処理」を実行してくれるスクリプトのことを、新堂が擬人化してそう呼んでいる。
こういうノリで嫌な仕事を引き受けてくれる人がいる現場は、たいてい大変だけど、めっちゃ楽しい。
今回の新堂さんは「言っちゃダメやなつ」じゃなくて「言わないとダメなやつ」でしたね。
仕事で失敗した時は、大変なことになる前に自分から言う。
そして瑛士は、それを責めない理想の上司でした。
次回……一難去ってまた一難。
ちょっと読んでて胸が痛い回かもしれませんが、お付き合いいただけると嬉しいです!




