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

イノウーの憂鬱 (10) GWに休める会社

»

 「おつかれさまでした」
 木名瀬さんの言葉に、ぼくは肩の力を抜いて、両手をダラリと垂らした。29 日の午後から、ほぼ2 日間にわたって作ってきた検温登録システムは、5 月1 日の午前7 時に無事リリースすることができた。待機していた総務課の社員が、最終テストを兼ねて、それぞれの検温結果を登録し、正常に動作することを確認してくれている。ぼくもメルマガサーバにssh で接続し、ログをtail で眺めていたが、今のところエラーは発生していなかった。
 「結局、徹夜でしたね」マリが疲れた顔で言った。「いつの間にか朝って感じで」
 「そうだね」ぼくはあくびをかみ殺しながら呟いた。「そして王は暗い影の中から立ち上がられ、最後の美しい朝に臨まれた......」
 「はあ?」
 「セオデン王が死んだときですか」木名瀬さんが笑った。「さて、たぶん登録のピークは9 時前後のはずです。二人ともそれまで少し仮眠を取っておいてください」
 「あと2 時間ぐらいなら大丈夫ですよ」
 ぼくはそう言ったが、木名瀬さんは首を横に振った。
 「どうせ、なんだかんだ要望が出てくるに決まってます。それに明日の朝までに、登録状況一覧送信機能を作る必要があります。もしかしたら、睡眠を取るチャンスは今しかないかもしれないんですよ」
 確かにそうかもしれない。納得したぼくは、チャットを終了すると、ベッドに倒れ込んだ。スマートフォンのアラームを9 時ちょうどに設定して目を閉じる。緊張状態が解除されたせいか、睡魔が急激に襲いかかってきた。考えてみれば、この2 日間というもの、途切れ途切れに数時間ほど仮眠を取っただけで......
 スマートフォンが金切り声で、ぼくを叩き起こした。ちっとも寝た気がしないな、と思いながら画面を見ると、木名瀬さんからの着信だった。時計の表示は7:33 だ。寝た気がしないのも当然だ。
 「はい」
 『ごめんなさい』木名瀬さんの声が聞こえた。『問題が発生したようです。Teams のチャットに来てください』
 ぼくは目をこすりながら、スリープ状態で放置してあったノートPC の前に移動した。Teams を起動すると、すでに木名瀬さんは待ち構えていたが、シノッチもビデオ会議に参加していた。
 「すいません」開口一番、シノッチは謝った。「総務の他、他部門の社員にも何人か先行で登録してもらったんですが、バグが出たみたいです」
 「バグ......」脳が急激に覚醒した。「どんなバグですか?」
 IT 業界では、実装に近い人間ほど「バグ」という言葉を口にせず、「不具合」とか「仕様洩れ」を使用する。純粋なプログラミング上のバグのほとんどは、実装とテストの工程を経るうちに潰されていくのが通例だからだろう。この会社に入ってから、普通に「バグった」などと言われているのを耳にして、気恥ずかしくなったものだ。
 「マイナスの数値がそのまま登録できてしまったそうです」
 「......」
 入力項目のバリデーションはマリに任せた部分だ。submit する前に、JavaScript でチェックしている。ソースを開いてみるとjQuery の$.isNumeric() を通しているだけだった。マイナス値も数値としては有効だからパスしてしまう。
 「それから」シノッチは続けた。「1℃とか99℃とかも登録できてしまってます」
 ぼくは呻きそうになった。そんな体温の人間がいるなど、誰に想像できただろうか。
 「......すみません。それは確かにチェックが甘かったようです。ただ、マイナス値はともかく、数値の範囲は決めていなかったので。36 から42 ぐらいを有効にしてしまっていいですか?」
 「そうですね、いいと思いますが......一応、確認するので、少し待ってもらえますか」
 それぐらいこの場で決めても大差ないだろうに、と思ったが、シノッチの性格を考えるとムリもないことだ。何をするにも根回しをしておかなければ、自分が軽視されていると捉えるのが、この会社の管理職全体に見られる傾向だった。自分のマネジメント力をアピールするためだけに、部下の意見を却下するなど日常茶飯事だ。営業成績や人脈などで、部下サイドの力関係が上であれば、その限りではないが、残念ながらシノッチは該当しない。
 シノッチを待っている間に、ぼくはログを確認してみた。おかしな数値を登録したのが誰だったのか、ふと気になったのだ。
 サーバにデプロイしたのが7:01。最初の登録者はぼく自身で、7:03 にログが残っている。次に、木名瀬さんやマリ、シノッチなどが登録した後、総務課の社員たちが続いている。ここまでは36℃台ばかりだ。異常な数値が出現し始めるのは、7:20 を過ぎたあたりで、-3.6、0、1.5、99.9、1234 などが登録されている。社員ID から調べると、いずれもマネジメント三課の社員ばかりで、マイナス値を登録したのは、他ならぬ伊牟田課長だった。どうやらマネジメント三課の社員には人外のものばかりが揃っているらしい。
 「何を考えてるんでしょうかね」ぼくは木名瀬さんにこぼした。「そりゃ、入力可能範囲を設定しなかったのはまずかったかもしれませんが、それにしたって意図的にありえない数字入れるって。デバッグしてやってるぜ、とかそういうつもりなんですかね」
 だとしたら、余計なお世話、という以前に、悪意が先行している気がする。検温の登録は業務命令だ。その実効性に疑問はあるが、とりあえずは素直に従うのが社会人というものではないのだろうか。単純な入力ミスならともかく、意図的にあり得ない数値を入力するとは、悪意がなければできない。
 木名瀬さんは眠そうな顔で笑った。
 「まだまだですね。うちの会社は、隙あらば他人を蹴落とすことが常習的に実行されているんですよ。それは責められることではなく、場合によっては美徳にすらなり得ます」
 「つまり、実力がない人間が、他人のミスをあげつらうことで、自分を高く見せようとしているってことですね。この会社って、そんな人ばっかりいるんですか」
 睡眠不足のせいで気分が少々ささくれだっているらしい。ぼくの口調は我知らずキツイものになっていた。木名瀬さんはそれを咎めることなく、頷いてくれた。
 「悲しいことですが、社風になってしまっていますね。そんな空気を呼吸して育った人間が上司になると、当然のように同じことを部下に教育する。それがおかしいと思った人間は、自分から見切りを付けて辞めていくので、変革の気運が盛り上がることもない」
 ということは、木名瀬さんも、少なからずおかしいとは思っているわけだ。なぜ会社に残っているのか、と訊いてみようとしたとき、シノッチが戻ってきた。
 「お待たせしました。30℃から47℃までの範囲を有効にしてもらえますか?」
 「30℃から47℃ですか?」
 思わず訊き返したが、シノッチは、それでお願いします、と答えた。
 「いや、30℃なんて低体温や47℃なんて高温があるわけないじゃないですか」
 ぼくが持っている電子体温計の測定範囲は32.0℃から42.0℃までだ。メーカーや製品による差もそれほど大きくはないはずだ。
 「念のためということで」シノッチは肩をすくめた。「なんでも医療用の体温計だと45℃まで測れるものがあるそうなんです」
 論点がズレている気がしたが、ここで反論しても覆る可能性は少ないし、時間のムダだ。ぼくは頷いた。
 「わかりました。では30℃から47℃で制限かけます」
 「お願いします。それから......」
 「まだあるんですか」
 「すいません。3 つあります。まず、再登録を可能にして欲しいことです。現在、二度目に登録しようとすると、登録済みです、とエラーになりますよね。うっかり違う数字を入れたとしても、修正する手段がないので」
 ぼくは納得して頷いた。現在は社員ID、年月日、AM/PM のユニークキーで登録していて、登録前に存在チェックをかけている。存在チェックをやめて、登録ロジックをdelete - insert に変更するだけだ。
 「警告時刻はずらさなくて大丈夫ですか?」
 朝の入力は10:00、夕方の入力は19:00 に警告時刻が設定してある。この時刻を過ぎたとき、未登録者の上長にアラートメールが送信される仕組みだ。シノッチは、それは大丈夫です、と答えて続けた。
 「二点めですが、検温結果は数字入力か、画像アップロードのどちらかだけでも可になっていますが、画像の場合、その内容をチェックできません。なので画像の場合、数字の入力を必須にしたいんです」
 登録済みの社員の何人かは画像をアップロードしていたが、体温計を撮影した画像ではなく、別の画像をアップロードした奴がいたらしい。不特定多数のネットユーザではなく、社員ID でログインする社内システムなので性善説を前提とした設計にしたのだが、考えが甘かったようだ。
 「シノッチさん」聞いていた木名瀬さんが発言した。「それならいっそ、数字の入力だけにしたらどうですか?」
 確かにどちらにしても数字の入力が必須なら、画像のアップロードは意味がなくなる。だが、その提案にシノッチは力なく首を横に振った。
 「それはそれで残したいということなので。すいません」
 どうせ画像でのアップロードを指示した誰かが、自分の意志が消されることを嫌ったとか、そんなことだろう。
 「三つめは何ですか」
 「検温数字の入力方法をもっと簡単にして欲しいんです」
 「どういうことですか」
 「数字で入力するのではなく、選択式にできないかと」
 「選択式ですか?」
 「入力エリアの最大文字数は4 桁にしてあるようですが、小数点以下が2 桁だったり、整数部分が3 桁だったりと、自由に入力できすぎるんですね。テストのときに気付かなかったのは申しわけないと思いますが」
 整数2 桁プラスドットプラス小数部1 桁で揃えたい、ということだ。
 「まさか30.0 から47.0 まで0.1 刻みで選択肢を並べろとかじゃないですよね」
 もちろん冗談のつもりだったが、シノッチは真面目な顔で答えた。
 「それでもいいそうです」
 いっそそうしてやろうかという衝動に駆られたが、幸い、木名瀬さんが常識的な判断を下してくれた。
 「それではさすがに入力しづらいし、また、誰かからクレームが出るでしょう。3 桁めをドットで固定して、残りを一桁ずつの数字で選択するようにしましょう」
 生年月日の入力フォームなどでよく見かける方式だ。年、月、日を選択肢にして13 月とか32 日のような入力ミスを避ける。生年月日の場合は、大の月、小の月のチェックが必要になるが、今回は30℃から47℃の範囲なので、先頭桁は3 か4 のどちらかになる。2 桁めと4 桁めは0 から9 で問題ない。個人的にあまり好きな入力方法ではないが、それがエンドユーザの要望であれば仕方がない。
 了承すると、シノッチは安堵した顔で訊いた。
 「どれぐらいでできますか?」
 「どれぐらいまでに必要なんですか」
 「その......」躊躇いがちな声が答えた。「できれば明日の登録分からだと助かるんですが」
 できれば、と言いながらも、上司からは明日までにやらせろ、と厳命されているに決まっている。
 「シノッチさん」木名瀬さんが怒りの混ざった声を上げた。「イノウーくんは昨日から、ほとんど寝ていないんですよ。それに明日から連休ではないですか。登録された検温データを元に何らかのアクションを起こすとしても連休明けになりますよね」
 建前としては、今日中に機能追加を終えてしまえば、明日からの連休は休めるのだが、リリース時には立ち会いを要求されるに決まっている。つまり明日も勤務になる、ということだ。
 「正しい登録データがないと困るということなので。すいません」
 「わかりました」ぼくは諦めて言った。「明日までに何とかします」
 どこかに行く予定があったわけではないが、それでも5 連休は楽しみだった。サードアイ時代は、GW といえども何日かは出社していた。この会社ではカレンダー通りに休めると思っていたのだが、その目論見は甘かったようだ。
 シノッチがビデオ会議から抜けると、ぼくはマリに電話をかけて起こした。寝かせておいてやりたかったが、html 上の変更が大きいのでマリの力が必要になる。
 マリはすぐに電話に出たが、寝起きの顔をビジネスモードに切り替えるのに10 分かかる、とか何とか言って、すぐに切ってしまった。マリを待つ間、木名瀬さんが心配そうに訊いてきた。
 「寝てないのに大丈夫ですか?」
 「まあ、そう大した機能追加でもないので」ぼくはコーヒーを淹れ直すためにキッチンに向かいながら答えた。「午前中で終わると思いますよ」
 夕方の登録まで寝ます、と笑ったが、木名瀬さんの声から不安の響きは消えていなかった。
 「機能追加がこれで打ち止めならいいんですが」
 「まだ何かありますか?」
 「難癖をつけようと思えば、いくらでもつけられる、ということです」木名瀬さんは恐ろしいことをサラッと口にした。「こんなに優しくて善良な私でも、あと5 つか6 つぐらいは改良点を指摘できますよ」
 「マジですか」ぼくはモニタの前に戻って訴えた。「それ、教えておいてくださいよ」
 木名瀬さんは小さく首を振った。
 「杞憂に終わるかもしれないので、余計な体力を使うことはありません。とにかく隙間時間を見つけて仮眠を取ってください」
 マリがビデオ会議に参加した。
 「もうちょっと寝られると思ったのに」マリは普段はかけていないメガネを指で押さえた。「寝てすぐ起こされるって最悪」
 「確かに。中途半端に疲れるね」
 「それもそうなんですけど」マリはあくびをしながら言った。「なんか変なもの見るんですよね」
 「変な夢ってこと?」
 「夢は寝てるときに見るものじゃないですか。そうじゃなくて頭は起きてるのに、心が半分寝てると、残りが別のどっかをさ迷ってるらしくて」
 「?」
 「たとえばですね」マリは顔を左右に動かした。「今、イノウーさんの後ろに立ってる人みたいなのが見えるんすよ」
 ぼくは身体の向きを180 度回転させたが、もちろん背後は無機質な白い壁が広がっているだけだ。
 「そういうの止めてくれるかな」
 「見えないっすか? まあいいですけど」
 ここにも人外のものがいたのか。ぼくは頭を振って、マリに追加仕様を説明した。マリは頷きながら聞いていたが、ぼくが話し終わると、うんざりしたように言った。
 「それは、いわゆる難癖ってやつじゃないですかねえ。ま、いいか。変更点はわかりました。昼までにはできますよ」
 「お願いします」木名瀬さんが言った。「斉木さんには私から連絡しておきます。お二人は、早速取りかかってください。では」
 木名瀬さんが抜けると、ぼくとマリは変更点の詳細を打ち合わせた後、修正を開始した。マリがhtml 部分を修正している間に、ぼくはロジック部分を修正する。
 木名瀬さんの予想が的中したのは、10 時を10 分ほど経過した後のことだった。未入力者一覧の上長への送信が、10 時に正常終了したことを確認した後で、懸念点が一つ減った、と喜んでいた矢先のことだった。再びシノッチが呼びかけてきた。
 「すいません。木名瀬さんも斉木さんも話中のようなので、イノウーさんに直接かけてしまいました」
 「なんでしょう」ぼくはこみ上げてくる嫌な予感を押し殺しながら訊いた。「未入力者一覧の送信なら、予定通り、10 時に完了しましたよ」
 「それに関連したことなんです。やっぱり各部署で何人かは未入力者が発生して、メールも飛んでます。内容は総務でも確認できています。ただ、受け取った部門長の方から要望が入りました。未入力者への連絡が面倒、というんです」
 上長へ送信している未入力者一覧は、社員ID と氏名だけだ。受け取った上長は、一人ずつ電話なりメールなりで、入力を促す連絡をしなければならない。
 「それが面倒だというわけですか」
 「はい。一斉メールか何かを送信できないか、と」
 「それぐらいなら、総務でまとめて一斉メールしてもらった方がいいんじゃないですか?」
 「どのタイミングで連絡するかは、部門長の方で決めたいらしくて......」
 では、上長用に未入力者への連絡用のフォームを作成すればいいのか、と言いかけて、わざわざネット上のサーバに配置した理由を思い出した。
 「一斉メールと言っても、社内LAN にアクセスできない人もいますよね」
 「......そうですよね」シノッチも一斉メールの欠陥に気付いたようで青ざめた。「どうしましょう」
 「どうしようと言われても」ぼくは代替案を考えた。「とりあえず一斉メールを送っておいて、メールが見られない人へは電話をしてもらうのはどうですか」
 「なるほど。確認してきます。お待ちいただけますか」
 シノッチはまた上長に確認するためチャットから抜けた。いっそ、課長あたりと直接話した方がいいんじゃないか、と思ったが、それはそれで話が長くなりそうだ。
 15 分ほどで戻ってきたシノッチは悲しそうな顔で言った。
 「電話は面倒だそうです。それに、誰が社内LAN に接続できないかを、把握していない人もいて」
 「だとすると、もう連絡先のメールアドレスを、各自に入力してもらうしかないんじゃないでしょうか」
 「SMS は送れないでしょうか」シノッチは訊いた。「携帯番号は全員、JINKYU に登録されているじゃないですか」
 「SMS を送信するのは簡単じゃないんですよ」ぼくは説明した。「外部のサービスを使う必要があります。もちろん有償です。お金の問題はともかく、すぐにはムリだと思います。明日から連休に入るわけですしね」
 「そうなんですか」シノッチは頭を下げた。「無知ですみません。じゃあ、個人のメールアドレスを登録してもらうしかないですか」
 「それでお伺いしてみてもらえますか」
 シノッチが再び消え、入れ替わるように木名瀬さんが入ってきた。ぼくが事情を説明しても、木名瀬さんは驚かなかった。
 「私が想定した改良点の中の一つですね、それは。イノウーくんの提案通り、個人アドレスを登録してもらうしかないと思いますよ。ログインした後、メールアドレスの登録画面を挟めますか」
 「......大丈夫です。笠掛さんと相談して進めます」
 戻ってきたシノッチは、個人アドレスを登録することで同意が取れた、と言い、ログイン後に登録画面が表示される仕様を了承してくれた。ぼくはマリに画面の追加を連絡した。
 「あたしたち、今日、寝られるんすかね」
 「ぼくもそれが心配だよ」ぼくは木名瀬さんの言葉を思い出しながら答えた。「これで終わりだといいんだけど」
 終わりではなかった。1 時間後に連絡してきたシノッチは、未登録者への送信メールの内容を、上長が任意に変更できるようにしてほしい、との要望を伝えてきた。
 「あと、相手によって送信するメッセージを変えたいかもしれないので、送信する相手を選べるようにと」
 「......わかりました」ぼくは答え、シノッチに訴えた。「これで機能追加は終わりにしてもらっていいですか」
 「もう何もないと思いますが」
 そう安請け合いしたシノッチは、舌の根も乾かないうちに、また連絡してきた。
 「すいません、本当に。実は検温の登録画面に、総務からメッセージを表示したいと要望がありまして」
 「メッセージですか?」
 「お知らせみたいなものです。新しい感染者が確認された、とか、そういったことを通知したいそうです」
 「ということは、メッセージの登録画面がいるんですね?」
 「えーと、そうなりますね」
 「それも明日までですか?」
 「はい」シノッチは深々と頭を下げた。「本当に申しわけありませんが」
 「これで最後でしょうね」ぼくは大して期待も持たずに訊いた。
 「そうだと思います」
 シノッチは自分でも信じていないような顔で答えた。そして、やはり、連絡は続いた。
 「追加の要望が入りました」もはやシノッチは、謝罪の言葉を枕詞として述べる手間さえ省いていた。「同じく、検温登録画面に、簡単なアンケートみたいなものが欲しいと」
 「総務の方で質問内容を任意に変更したいんでしょうね、きっと」
 「はい、その通りです。あ」シノッチは思い出したように付け加えた。「これは明日まででなくていいそうです。月曜日の朝にできていれば」
 「それはありがたいですね」
 ぼくは皮肉をこめて言ったが、シノッチは疲れた顔で頷いただけだった。気の毒なシノッチを解放すると、ぼくはシステム開発室のチャットで状況を説明した。
 「タダだと思って」マリは怒りを露わにした。「使い放題じゃないすか」
 「現実的な話」木名瀬さんは冷静な顔で訊いた。「要望通りの機能を、要望通りの期日に間に合うように実装できますか」
 「これ以上、何も出てこなければ」
 これ以上の追加仕様が発生するようなら、GW は全部、勤務になるかもしれない。
 「追加仕様をここでストップするように、私の方から総務に話を通しておきます。イノウーくんとマリちゃんは、今出ている分だけに集中してください。もし、直接話が来たら、夜でも朝でも構わないので、私に回してください」
 「ありがとうございます」ぼくは礼を言った。「じゃあ、マリちゃん、急いで項目名まとめて送るから、html テンプレートの方、頼むね」
 「え、あ、はい、了解っす」
 木名瀬さんとマリが驚いたような顔を向けてきたが、ぼくは深く考えることもなく、実装作業に戻った。

 (続)

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

Comment(8)

コメント

匿名

「はい。一斉メールか何かを遅れないか、と」
遅れないか → 送れないか

匿名

おおーっイノウー!自然すぎる!やるじゃん
結構タイミング難しいんですよねーこういうのって

ほげ

これはイノウーあとで木名瀬さんに追及される流れなや!

それはそうとマネジ三課あからさまだなぁ。課員使って不具合探しまくりだ。たぶん検出した仕様不備を一覧化して次フェーズからの参画の大義名分を主張するつもりやな。
イノウーも、検討の時間はなかったんだろうけどちょっと詰めが甘いというか、ちょい「敵」を過小評価しがちな感じで、後で足元すくわれないといいんだが。

princess

さすがに「マネジメント三課の社員」みたいな今回の悪役っぽい明確な悪意はないですが、
この手のシステムを見ると、「%s」とか「%d」とか「
」とかSQL文とか入れてみたいいたずら心は芽生えますね( ˙꒳˙ ;;)

匿名

イノウーが実は古き者達に狙われていた。笠掛さんにはそれが見える。実はアーカム側の人間だった⁉
なんて想像してみたり(笑
実装に気を取られてて、ついイノウー君、マリちゃん呼びが出ましたね。
一息ついたあたりで笠掛さんと木名瀬さんに突っ込まれるかまた、さん呼びになって笠掛さんにスネられるのか、ちょっとニヤニヤ。

リーベルG

匿名さん、ありがとうございます。
送れない、ですね。

匿名

体温に負数とか入れてる時点で、会社の方針に真面目に対応する気ありませんって言ってるようなもんじゃ…。
まぁ、華氏温度計使った想定で、100度ってのは許す(笑)

あれ、前回「マリちゃんは、どんな椅子?」って言ってましたよね。
つっかえずに自然に出たってことかな?

コメントを投稿する