ふつーのプログラマです。主に企業内Webシステムの要件定義から保守まで何でもやってる、ふつーのプログラマです。

レインメーカー (39) 対策と対応

»

◆アリマツ通信 2022.10.29
 QQS チャリティイベント速報
 いよいよ始まりましたQQS チャリティイベント。ことしは72時間ぶっ続け生放送(一部、特別ドラマ、ニュース等含む)で開催されています。
 第2 回の特選グルメ通販コーナーが、先ほど16 時に終了し、名古屋CC での受信対応件数は、速報値で266 件となっています。他社と比べても遜色ない実績ということで、QQS 担当者様からはお褒めの言葉をいただいていました。
 実際、OP のみなさん、特訓の成果もあり、とても手際よく対応していました。ピーク時は待ち呼数がブース数と同数近くになり、OP 出身の私、土井も、思わず手に汗握る展開となりました。
 ところで番組をご覧になっていた方はご存じでしょうが、某アイドルグループのメンバーが3 人、食中毒で出演をキャンセルとなったため、予定していたコーナーが急遽、臨時通販コーナーに差し替えになる、というトラブルが発生しました。関係者一同が青ざめる中、DX 推進ユニットの田代さんは、慌てることなくNARICS の改修を30 分で終え、無事に受電体制を取ることができました。一つの番組が放送されている裏では、こんな苦労がいろいろあるんでしょうね。

 文 総務課 土井

 ◇ ◇ ◇ ◇ ◇

 事前の説明では、当日に突発的なイベントが発生することがありうる、という話だった。対応可能なシステムの準備が必要ということだ。これは営業レベルで勝手に合意されていた内容で、田代に話が降りてきた時点では、すでに覆すことができなくなっていたものだ。
 NARICS はSeasar2 をフレームワークとして採用している。Seasar2 は開発環境ではHot Deploy 機能によって、動的にプログラムの内容を変更することができるが、運用環境の場合は、アプリケーションサーバ起動時に、クラスパス上の全てのクラスがメモリに読み込まれ、動的な変更はできない。変更するには再起動が必要になり、その間は全てのOP がログアウトしなければならないので、業務時間中の更新は不可能ということになる。もっとも、アリマツのコールセンター業務では、業務フローの変更となると、インフラ関連の設定変更も含めて、週単位での準備が必要となることが多いため、これまで問題になることはなかった。
 QQS 案件は、業務時間内のロジック変更が必須となる。田代は顔をしかめながらも、これを自分の経験値アップと捉え、やりがいすら感じながら対策に取りかかった。
 最初に行ったのは、いくつかのロジックを、Web アプリケーションから切り離したことだった。スタンドアローンアプリケーションとして切り出し、コマンドライン引数で実行条件などを受け取り、結果はJSON ファイルで出力する。起動するシェルスクリプトを用意しておき、ProcessBuilder で実行、出力されたJSON ファイルを読み込むことで、結果をNARICS 側に反映するのだ。
 次に、NARICS の実行環境を複数準備した。通常のNARICS はhttp://dxnarics01/narics/ のURL で起動するが、別のサーバ2 台にNARICS の環境をコピーし、同じデータベースに接続するように設定する。それぞれを、サーバA、サーバB、サーバC とし、OP は通常、サーバA にログインする。
 もし再起動が必要になるようなロジックの変更が発生した場合、変更版をサーバB に反映する。サーバB を再起動した後、SV の指示によって、受電が完了したOP から順次、サーバB にログインし直してもらう。これなら、実質的に業務を停止せずに済む。
 この方法を説明したとき、倉田は賛意を示しつつ、いくつかの懸念点を口にした。
 「エスカレのとき、連絡用Word ファイルをサーバにアップロードしますね。サーバA で処理した場合、そのファイルはサーバA 上に保存されるわけです。その後、サーバB に切り替えたとき、localhost にはアップロードしたファイルがない。これはどうしますか?」
 「その場合」田代は答えた。「アップロード処理が終わった後で、サーバ間でファイルを同期するシェルスクリプトを実行しようと思います。rsync かscp か」
 「Tomcat はroot で稼働してますが、ssh はroot ログイン不可になってるので、一般ユーザで実行しないといけないですね」
 「そうなりますね」田代はメモした。「ああ、そうか。narics サーバは、dx01、dx02 のユーザがあるけど、サーバB とサーバC は借り物だから、他のユーザしかないですね。ssh でキーを交換しておかないと」
 「はい。ユーザの追加とか、そのあたりの操作は宇都さんの承認が必要なんで、早めに申請しておいた方が」
 「確かに。気付いてくれて助かりました」田代は礼を言うと、忘れないうちにメモに追記した。「他に何か、やっておいた方がいいことはあるかな」
 リーが手を挙げ、ややたどたどしい日本語で提案した。
 「バリデーション、今は、ページクラスのアノテーションでやってますが、これを、クライアント......ブラウザ側に持っていったらいいんじゃないかと思うんですが」
 「バリデーションね」
 そのことは以前から田代も考えていたが、項目の未入力や、単純な値の範囲ならともかく、データベースを参照しなければできないバリデーションも多くあり、クライアント側で完結するのが難しいため、あまり積極的に採用する気にはなれなかった。
 そう説明すると、リーは生真面目そうな顔に意欲を浮かべた。
 「そういうのはサーバ側と通信してやればいいんでは?」
 「つまりAjax で、ということか」田代は腕組みした。「Teeda のAjax はPage クラスかAction クラスに、対応するメソッドを定義しておかないとできないんだぞ。ブラウザ側でやりたいのは、急な改修が発生したときに再起動しなくてすむようにしたいからだよな。Ajax でやるために、クラスを修正しなきゃならんというのは、本末転倒だと思うんだがな」
 「はい」リーは頷いた。「だからTeeda のAjax 使うのやめて、axios とか使うのどうですか」
 「リーさん、それ同じことじゃん」俣野が言った。「どっちみち、サーバ側にServlet で接続先を作っておかなきゃならんってことだよ」
 「いや同じじゃないです。接続先のServlet は一個作ればいいんです。シェルスクリプト呼び出しできる仕組みがありますね。URL パラメータかフォームの値で、呼び出すスクリプトを指定して、結果をJSON でそのまま返す。これなら動的に変更ができる。どうですか」
 「あ、そういうことか」俣野は手元の裏紙に四角と矢印を書いて、動きを確かめた後、頷いた。「いいと思います」
 「よさそうだな」田代は倉田を見た。「どう思います?」
 「私もいいと思います」
 「よし、採用しよう。リーさんは、axios のテストをやってみてくれ。ないとは思うけど、Teeda 関係のjs ファイルとバッティングしないことを確認して」
 そんなわけで、QQS 案件対策を実装したNARICS を数日前にリリースし、動作確認も完了している。完全に楽観したわけではないにせよ、かなりの自信を持って田代は名古屋CC に乗り込んだのだった。
 ところが業務がスタートすると、その自信も次第に強固なものとは思えなくなってきた。
 「当日に突発的なイベントが発生することがありうる」という説明は正確ではなかった。実際は「ありうる」というレベルを遙かに越えて突発的イベントが発生したのだ。
 チャリティイベントの放送は、29 日の午前9 時から開始だった。名古屋CC は8 時からスタンバイ状態にあったが、放送開始の直前、8 時40 分になって、QQS の担当者が受電スケジュールの大幅な変更を通知してきた。
 当初の予定では、通販コーナーは11 時~12 時、15 時~16 時、18 時~19 時の3 回だ。これは業務契約時の詳細にも記載されているので、変更はないはずだった。OP の出勤数とシフト、ブースの設定、IVR 設定などが関係してくるので、そもそも軽々しく変更などできない。NARICS の受電結果履歴テーブルも、そのようにユニークキーを設定してあった。
 「は?」田代は名古屋CC の大黒課長から話を聞いたとき、思わず強い語気で訊き返した。「スポット?」
 「そうなんだ。13 時15 分から例のエペとかいうゲームのプレイ実況をするらしいんだな。有名なユーチューバーらしいんだが。それに合わせて、ゲームのインストールなんかの問い合わせ窓口を臨時で開くことになってな」
 「注文請書に書いてないじゃないですか」
 「そこはほれ」根津が横から言った。「なりゆき、というやつだ」
 「今日の今日で、OP たちの方は大丈夫なんですか?」
 「問題ない。単に、ペラ1 枚の項目を伝えるだけだからな」
 「QQS のホームページに、この番組の特設ページありますよね。そっちを見ろってQR コードでも表示しておけばいいじゃないですか」
 「もちろん、それもやるよ。というか、そっちがメインの導線になる。ただ、どうしても電話をかけてくる人が一定数いるのは、間違いないからな」
 「9 時から19 時の常時問い合わせで受ければいいんでは?」
 「そっちは今でも、結構、負荷が高止まり気味なんだわ」大黒課長はブースの方を手で示した。「それにQQS からは、コールレポートを通常問い合わせとは分けてほしいと言って来てる」
 田代が考えていると、根津が囁いた。
 「他社のコールセンターが全部断ったからうちに話が来たんだ。ここでうちが対応できれば、大きなアドバンテージになるのはわかるだろう。来年のイベントの受注はもちろん、他の受電業務も取りに行けるかもしれん」
 「毎回、同じようなこと聞いてる気がしますが」田代は嘆息した。「もうやるって言ってしまったんですね」
 「そうなんだ」
 わかりました、と答えて、田代はシステム用のPC でソースを開いた。隣に座った相沢に、横浜に連絡するよう命じる。
 土曜日だが、RM ユニットと同じく、DX 推進ユニットも全員出勤で待機中だ。内線がつながったので、田代はヘッドセットをかけて倉田を呼び、状況を伝えた。
 『うーん』倉田は唸った。『ちょっと起こって欲しくない事態ですね。要するに、1 回目と2 回目の間に、一個割り込ませるってことですよね。受信チャネルパターンとか、対応者スキルとか、全部ユニークキーにしてあるんで厄介ですね』
 3 回の通販コーナーは、受電単位としては独立しているが、前回の受電結果を引き継ぐ必要もあるので、順序があらかじめ定義されていて、パラメータデータも作成済みだ。シフトによってOP もすでに割り振り済みである。
 『1 と2 の間に1.5 でパターンを作る......』倉田は言いかけて言葉を切った。『いやダメですね。パターンNo はinteger でした』
 「3 を4 に、2 を3 に書き換えるとどうなりますか」
 すでに答えはわかっていたが、ダブルチェックの意味で倉田に訊くと、倉田が考えながら答えた。
 『影響範囲はかなり広いですよ。パターンを可変にする理由なんか思いもしなかったんで、ロジック内の定数定義から、作成済みのOP の受電パターンNo まで全部変更する必要があります』
 「しかも」田代も言った。「1 回めから2 回めに続けて受電するOP は、1 回めの受電後に2 回めのパターンヘッダが作成されますからね。せめてあと1 時間早くわかっていれば、パターンの初期化からやれたんですが」
 ちょうど時刻が9 時になり、ブースでは受電業務が開始したところだった。
 「仕方がない」田代は急いで方策を決めた。「パターン4 としてスポット受電を定義して、1 → 4 → 2 → 3 の順で動作するように修正入れるしかないですね」
 『サーバB に反映ですか』
 「開始そうそう、やりたくはなかったんですが」
 『明日はないんですよね』
 「そう。だから、今日の業務が終わったら、そのルートを削除して通常順序に戻すということで。俣野とリーさんに、作業してもらってください」
 『伝えます』
 通話を終えると、田代は相沢にもいくつか作業を命じた。
 「わかりました」相沢は頷いてEclipse を開いたが、ちらりと田代を見た。「あの......」
 「なんだ」
 「そのゲーム実況なんですけど」相沢は後ろめたそうな表情を浮かべた。「時間あったら、ちょっと見てきても......」
 「......」
 「いえ、無理ですよね。仕事で来てるんだし」
 まあ、こっそりトイレでスマホに没頭されるよりはいいか。田代は苦笑した。
 「そんなに有名な人なのか」
 「ユージーン222 っていうゲーマーで、cs:go やヴァロやシージなんかのFPS をやりこんでる廃人なんです。cs:go じゃデスマッチで連続12 キルをやってのけた人で、それが全部ヘッドショットなんです。だいたいT 側で出てくるんですけど、AK のリコイル完璧にマスターしてて、ストッピングはもう一流アスリートみたいな芸術的センスで......」
 「わかったわかった」田代は制止した。「昼休みを放送時間に合わせていいぞ」
 相沢が歓喜の声を上げたので、田代は仕事をするように言い、根津と大黒に報告に行った。二人は大げさに喜び、早速QQS 担当者が座る席に向かっていった。それを見送った田代は、紫吹SV に対応を伝えに行った。紫吹も頷いて感謝の意を表した。
 「今後も、同様にスポット業務が入ったら、同じ方法で対応できるということですか?」
 「そうですね。サーバA は他の業務でも使ってるので、再起動はできませんが、サーバB とサーバC はQQS 案件専用なので、順に回していけば」
 そう言うと、紫吹は首を傾げた。
 「確か、受電が終わったOP から順にログインし直していくということでしたね」
 「そうです。何か?」
 「いえ」紫吹はブースの方をちらりと見た。「去年もそうだったんですが、かなり長い時間通話される人もいるんですよ。中には1 時間とか2 時間とか。こっちも忙しいから切ります、とは言えないので話に付き合わざるを得ないんですが......だから、OP によってはなかなか受電対応を終えられないケースもあって」
 そういうことか。田代は内心で唸った。次に同様の状況となればサーバC に切り替えなければならない。問題は、そのとき長時間通話のOP が受電を終えていなければ、いつまで経っても、サーバB の再起動ができない。その間にまた別のスポット業務が差し込まれるようなことがあれば......
 「ああ、でも」田代が困惑しているのを見た紫吹が助け船を出した。「あまり手に負えないような相手だと、SV が変わるか、いったん切ってコールバックをお願いすることもできるので。最悪、その対応でいけますが」
 その言葉は嬉しかったが、各CC の業務を見聞きしてきた田代は、紫吹が今言ったような対応をするのが、実際には困難であることを知っていた。そもそもSV は常にOP のサポートをして飛び回っているし、上長やクライアントへのエスカレーション業務や、OP の休憩時間の調整など、かなりの激務だ。待ち呼が溜まっているときは、臨時で受電することもある。QQS 案件は、特にクライアントからの要望が激しい。そんなSV に余計な負担を抱えさせるのは心苦しい限りだった。
 「大丈夫です」田代は答えた。「他にも対応策は用意してあるので。こっちで何とかできると思いますので」
 そう言うと、紫吹は安堵したように微笑むと、挙手しているOP の元に駈け寄っていった。
 さすがにこんな状況が、そうそう発生するものではないだろう。そう楽観的に考えた田代は、数時間後、アイドルグループの食中毒の知らせを聞いて愕然とすることになった。

(続)

 この物語はフィクションです。実在する団体名、個人とは一切関係ありません。また、特定の技術や製品の優位性などを主張するものではありません。

Comment(5)

コメント

匿名

システムの内容がそのままと言う事もないでしょうけど、
属人化しているのは営業やSVの方ですよね。
性別の差別になるかもしれませんが、女性(的な人)の方が属人化が多い気もします。

匿名

手作業の修正多くて、しくじったら障害になるのでおっかないな。
スタンバイできるサーバーセットにも限りがあるとかつらすぎる・・

匿名

雨宮氏の件が語られないのが不気味すぎる…
この後、とんでもないカタストロフィに陥ったりせんでしょうな。

匿名

雨宮sanの件、
相沢には休憩時間の自由を許して、
紫吹sanには休憩時間を拘束している。とか報告するんじゃない?
今回はイズミsanの嘘発見(?)で、田代は窮地を脱する、とか。

ななし~

> 『1 と2 の間に1.5 でパターンを作る......』倉田は言いかけて言葉を切った。『いやダメですね。パターンNo はinteger でした』

子供の頃に触っていたBASIC(F-とかN-BASICの話。NOT VB)の行番号の名残りか、こういうケースでは未だに10,20...で附番します(^^;
Press Enter■な時代を懐かしく思い出しました(^^;

コメントを投稿する