イノウーのプログラミングなクリスマス (2)
日曜日の午前11 時少し前、サイゼリヤに着いたイノウーは、すでにボックス席に座っている木名瀬を発見し、急いで駈け寄った。
「すみません。お待たせしました」
木名瀬は読んでいたKindle をパタンと閉じると、小さく頷き、向かいの席に座るよう指示した。地味なパンツスーツで、会社にいるときの服装とそれほど違いがない。
「時間厳守なのは感心です」木名瀬は呼び出しボタンを押しながら言った。「お昼を食べながら打ち合わせしましょう。ピザでいいですか?」
「あ、はい」
本音では、パスタとかリブステーキなど、もう少しボリュームのあるものを食したいところだったが、イノウーは我慢することにした。木名瀬は、やってきたウェイトレスにマルゲリータと、野菜のピザ、それにドリンクバーを2 つオーダーした。
「もっとガッツリ食べたいのはわかりますが」ウェイトレスが去った後、木名瀬はイノウーの心を読んだように言った。「打ち合わせの場なので、片手で食べられるものがいいでしょう。ハンバーグなどのセットにするとプレート、ライス、サラダと場所を取るし、パスタだとソースが飛び散ったりします。それに、打ち合わせ中にフォークで人や資料を指したりするのは行儀悪いですから」
「ぼくはそんなことはしません......しないと思います」
「私は井上さんのことを、そこまで知っているわけではないので。そういう食べ物がなければ、そもそもそんな心配は無用になりますよね。自分から目を閉じてもらうこともできるのだが、目というものは足がよろめいたりすると、まばたきするものだから、というわけです」
「木名瀬さんは慎重な方なんですね」イノウーはそう言うと、少し気になっていたことを尋ねた。「せっかくの休日なのに、ご家族はよろしいんですか?」
余計なお世話だ、と突っぱねられるかと思いきや、木名瀬は素っ気ない口調ではあったが答えてくれた。
「主人は海外出張中で不在なんです。娘は近所のお友達とクリスマス会です。夕方にはお迎えに行きますが、それまでは時間があります。さて、自分の飲み物を取ってきて、打ち合わせを開始することにしましょうか」
イノウーと木名瀬が、それぞれのドリンクを手に打ち合わせを開始したのは5 分後だった。イノウーは準備してきたシステム構成のプリントアウトをテーブルに広げた。
「全く甘く見ていました」イノウーは頭を下げた。「木名瀬さんに指摘してもらわなかったら、そして、のんびり明日から設計してたら、完全に間に合わなかったところです。本当にありがとうございます」
「仕事ですから、礼は不要です」木名瀬はプリントアウトに目を通しながら言った。「そもそも、斉木係長が直前になって井上さんに振ったのが間違いです。井上さんは、その場でスケジュール的に無理がある、と断るべきでした」
「......」
「まあ、これは正論で、井上さんの立場でそんなことを言えないのは理解できます。これ、データベースは何を使うつもりですか?」
どうもこの人は、唐突に話題を変える傾向がある。イノウーは内心戸惑いながら答えた。
「Oracle を使わせてもらえたらと思ってるんですが」
「Oracle は無理です」木名瀬は断言した。「検証用サーバにもインストールされていますが、新規のユーザ作成はワークフローで部長承認を取った後、DB 管理者に改めて作成依頼を出さなければなりません。部長承認は5 日以上の余裕を持って申請することになっているので、今回はもう間に合いません。以前はもっと自由だったんですが、野良ユーザが増えすぎたため規約ができました。不便になった、と文句を言う社員もいますが、私に言わせれば自業自得です」
「そうですか。いや、Oracle にこだわってるわけじゃないんですが」
「PostgreSQL ではどうですか? それなら全ての検証用サーバにパッケージが入っているし、Oracle より扱いが緩やかです。庶務権限でDB を作成できますよ」
「ポスグレでも構いませんが......庶務権限でDB 作成ができるんですか?」
「あまり気にしている社員はいませんが、うちのグループウェアは、データベースがPostgreSQL です。その関係で庶務が管理しているDB サーバがあります。組織変更や異動の際など、バックアップを取ってから修正するので、操作をする権限が必要なんです。うちの会社では、商用製品はその利用状況の詳細な記録が求められますが、オープンソースのソフトは今のところ野放し状態です。無料イコール大した価値がない、と見られているためです。これが参加者一覧テーブルですね。社員ID、氏名、氏名カナ......これだけですか」
イノウーはテーブルレイアウトを見直した。
「他に必要ですか? 社員ID でログインさせるためだけなんですが......」
「悪いことは言わないから」木名瀬は紅茶をすすった。「性別と所属、職位、入社年月日も追加しておきましょう」
「ビンゴですよ?」イノウーは訊き返した。「性別や所属が必要なシーンを想像できないんですが」
木名瀬はカップを置くと小さく首を横に振った。
「ビンゴに必要なものって何ですか?」そう訊き、イノウーの返事を待つことなく答えを言った。「賞品です。賞品がなかったら、誰がビンゴなんか参加します?」
「そりゃそうですね」
「賞品というのは会社から社員に出るものです。もちろん無料ですが、課税対象にはなります。当選した人の翌月の給与明細には、賞品の相当額が<その他支給E>として載るんです。つまり、誰にどんな賞品が当選したのか、経理に提出しなければならない、ということです。そのような臨時支給項目の提出フォーマットは決まっていて、所属、職位、社員ID、氏名が必要なんです」
「......夢のない話ですね」
「全く同意しますが、要点はそこではなく、後から社員ID で必要項目を引っ張るより、ビンゴシステム内で完結させた方が楽だ、ということです。違いますか?」
「違いません」イノウーは言われたとおりの項目名を追記した。「入社年月日や性別は何に使うんですか」
「たぶん、明日になればわかります。ひょっとすると取り越し苦労で済むかもしれません」
「賞品で思い出しましたが、賞品の種類と個数がわからないですね。係長に聞いておけばよかったんですが」
「たぶん聞いてもムダです」木名瀬はにべもなく言った。「当日ギリギリまで、協力会社や取引先からの協賛品が飛び込んできますから。去年は当日の17 時に役員賞ということで、オリーブオイルセットが追加されました。会社に届いたお歳暮か何かの流用でしょうね」
「では賞品マスタをExcel でインポートできるようにしておきますか」イノウーはメモし、別のプリントアウトを指した。「スマホの画面はこんな感じでどうでしょう?」
木名瀬はチラリと見ただけだった。
「デザイン的なことは好みもあるので、斉木係長に見せてください。むしろ、今の段階ではあまりしっかり作り込まない方がいいでしょうね。どうせリテイクになるに決まってますから。最初から工数かけるのは時間の浪費です」
「ギリギリまで見せずに、当日の午後に見せて、もう変更するには時間がない、って言い張るのはどうですか」
メガネの奥で、木名瀬のきれいに整えられた眉が片方だけ跳ね上がった。
「一つの手ではありますが、斉木係長の心証を害するかもしれません。後々のことを考えるなら、お勧めはできませんよ。それでもやりますか」
「......やめておきます」
「それより」木名瀬は画面デザインを押しのけて、データ連携を簡易的に記述したプリントアウトをつまみ上げた。「こっちで訊きたいんですが、ナンバーがヒットしたとき、スマホ側にはどうやって反映するんですか」
「金曜日に言ったように、Ajax で5 秒間隔ぐらいで見に行こうかと思っていますが」
「Ajax というのは、普通のリクエストですよね」木名瀬はほっそりとした顎を指でつまんで考えた。「106 人が5 秒間隔......井上さん、検証用サーバのスペック知っていますか?」
「いえ」
「社内LAN の業務サーバはN 社のクラウドサービス上にありますが、検証用サーバはオンプレミスです。社内LAN からの接続は問題ないですが、閉域SIM からの接続は、一度VPN を通っていて、これがかなり遅いんです」
「いや、でも、せいぜい数キロバイトですよ。その程度なら遅延なんか気付かないほどじゃ......」
「モバイルPC から、検証用サーバにssh 接続すると、打ったキーの文字が表示されるまで、かなりタイムラグがあるそうです。気が短い人なら、かなりイラつくぐらい。何度もキーを叩き直して、さらに事態を悪くするらしいですが」
イノウーは少し呆れた。
「そんな遅いインフラ使ってるなんて、うちの会社のキャッシュフローって、そんなに悪いんですか?」
「県内の同業他社の中では、かなりいい方だとは思いますよ。井上さんだって、まだ試用期間なのに賞与がきちんと支給されたでしょう」
「ああ、ええ、確かに」
「ただ、管理職を気前よく増やしすぎて、人件費が高騰しているのも事実です。給与テーブルがバブル直後のまま、ほとんど見直しされていないからです。そのあおりで、不要なコストは可能な限り削減される、というより、追加投資が抑制されています。検証用サーバなどは、サポートが切れてもハード的に壊れるまでは、使用し続けるんです」
「今どきなら、サーバ類はクラウドに置いた方が、結果的にコストダウンになる気がしますけど」
「その手の話は何度も稟議が上がっていますが、いつもどこかで潰されます。いろいろな理由をつけて。動いているものを無理に変える必要はない、寝た子は起こすな、というわけです」
そう言うと木名瀬は、面白そうな顔でイノウーを見た。
「どうです? 辞めたくなりましたか?」
「なりません」イノウーは訊き返した。「そんなに辞めさせたいんですか?」
「まさか。こんなはずじゃなかった、などと後悔するぐらいなら、と心配しているだけです。話を戻しますが、5 秒間隔のポーリングの他に、何かいい手段はないんですか?」
「そうですね......何がいいと思いますか?」
「プログラマは井上さんでしょう。私は庶務グループの事務スタッフですよ。何を期待しているんですか」
「一介の事務スタッフさんにしては、かなりシステム運用に詳しいじゃないですか」
木名瀬はため息をついた。
「どういうわけか、面倒な管理業務は、たいてい庶務グループに回ってくるんです。部門間の利害関係が強すぎて、どこかに任せると、必ず遺恨を残すことになるからです。ファシリティグループは、業者との交渉や納入・設置支援はやってくれますが、運用になると丸投げしてくるので。これも改善しなければならないのに、一向に手がつけられない病巣の一つです。今言っても仕方がないことですが」
「それにしてもフレームワークや、いろんなWeb 技術の知識まであるって、ただの庶務の人とは思えないですが。どんな秘密があるんですか?」
木名瀬は不思議な笑みを浮かべた。
「どんな女性にも、何かしら秘密があるんですよ。まあ、いずれわかるときもあるかもしれません。それはともかく、他に何か方法はないんですか?」
イノウーは方法を考えた。前職の上司だった東海林にも、よくこうやって頭を使えと言われたな、と思い出しながら。
「MC の合図で更新ボタン押してもらうのはどうですか?」
「却下です。全員がMC に注目してるとは限らないし、飲んだり食べたりおしゃべりに夢中だと、高確率で聞き逃すでしょう。紙のカードなら、聞き逃した方が悪い、と言えますが、システムでやってるのに自動化もできないのか、とクレーム出ますよ」
少し考えた後、チャットなどで使われるSocket.io で双方向通信し、リアルタイムで更新する方法を採用することにした。木名瀬は仕組みを説明されると、頷いて了承した。
その後も、進行状況の表示方法や、MC 側の操作など、ビンゴ大会の進行に沿って仕様を検討した。木名瀬による無数のダメ出しを受け、ドリンクバーを何度も往復した後、16 時近くまでかかって、ようやく全てにOK が出た。
「今、できるのはこんなところでしょう」木名瀬はメガネを外して目をマッサージしながら、さすがに少し疲れた声を出した。「後は井上さんの仕事です」
「ありがとうございます。明日、朝一番から実装を始めます」
「明日?」木名瀬はイノウーを睨んだ。「今日からやるんですよ。デートする相手もいないぐらいだから、夜はヒマなんでしょう? 自宅でやれる部分はやっておいてください」
「そんなに急がなくても......」
「何か予定があるんですか?」
「......ありません」
木名瀬は時計を見て、伝票をつまみ上げた。イノウーは慌てて手を伸ばした。
「ここはぼくが出します」
「何をバカなことを」木名瀬はスマートフォンを出して、素早く計算した。「割り勘です。どうしても、というなら、端数は払ってください。それよりいいですか、今日のうちに、少しでも進めておいてください。それから、明日は朝6 時に出社です。私も同じ時間に来て、進捗をチェックします。いいですね」
「6 時ですか......」イノウーは茫然と木名瀬を見た。「ちょっと早いですね」
「遅いぐらいです。本当なら5 時に来てもらいたいぐらいですが、就業規則で6 時より前の出社は、部門長の許可が必要なので。必ず来てください。でないとクリスマスイブは自宅のベッドで眠るのはもちろん、会社から出ることさえできなくなります」
「日の出とともにではなく」イノウーは思わず呟いた。「お呼びがあったらだ。暗黒が始まった。夜明けは来まい」
木名瀬は驚いたように目を大きく見開いた。
「指輪物語ですね。王の帰還でしたか」
「さっきの目を閉じるうんぬんも」イノウーは答えた。「二つの塔でファラミアがフロドたちに言った言葉ですね。本は好きなんですよ」
「なるほど」木名瀬は頷き、優しいといってもいい表情でイノウーを見た。「うちの会社にも、少しは知性のある人がいるとわかって嬉しいです。では、行きましょう」
◇ ◇ ◇ ◇ ◇
木名瀬の言葉の正しさは、その日の午後一番に、早速証明された。
「イノウーちゃん」斉木係長が猫なで声で言いながら接近してきた。「どう、ビンゴの方」
「はい、作成中です。いまのところ順調に進んでます」
「よかった。さすがイノウーちゃん。それはそうと、ちょっとお願いがあってさ」
斉木係長は、なれなれしくイノウーの肩をギュッとつかんできた。イノウーは顔をしかめたくなるのをこらえて訊いた。
「なんでしょうか」
「当選率の調整ってできる?」
イノウーは寝不足の目をぱちくりさせた。
「当選率......の調整ですか?」
「そう、勤続年数によって、当選率が高くなるようにしたいんだよね」
なるほど、このために入社年月日が必要だったのか。イノウーは納得すると同時に、木名瀬の読みの鋭さに舌を巻いた。
「可能です」イノウーは答えた。「どんな割合にすればいいですか」
「一年毎に5% ぐらいの割合でいいかな」
「勤続25 年だと100% になってしまいますが」
「そっか。そうだね。じゃあ、二年ごとに3% ってことにしようか。10 年以上は一律20% でいいよ」
こういうのも、木名瀬が言っていた管理職に対する優遇措置か。イノウーは大いに呆れたが、もちろん本心は表に出さない。
「わかりました」
イノウーはモニタに向き直ったが、斉木係長はまだ立ち去ろうとしなかった。
「それからさあ」
「はい?」
「当選数を男女で同じにできるかな」
「......できますが」イノウーは午前中に木名瀬から受け取った在籍者データを思い浮かべた。「女性の方がかなり少ないので、当選数を男女同じにすると、女性ばっかり当選することになりませんか?」
「じゃあ男女比と一致するようにしてよ。ほら、このご時世、いろいろうるさいからさ。コンプライアンスとか」
「......なんとかします」
「助かるよ。それからさあ」
まだあるのか、と噛みつきたくなったが、グッとこらえてイノウーは笑顔を作った。
「なんでしょう」
斉木係長は声を潜めた。
「一人、絶対に当選させてほしい人がいるんだよね」
もはやイノウーは驚かなかった。
「誰ですか?」
どうせ、エースシステムの役員だろう、と思っていたが、その予想は外れた。
「業務三課の笠掛さんなんだけどさ」
笠掛という名は、イノウーの脳内で顔が一致する数少ない社員だった。新卒入社4 年目の小柄で丸顔の女性だ。とはいえ、一度、打ち合わせに同席したことがあるので憶えている、という程度だ。斉木係長がなぜ彼女を優遇したいのかは不明だ。
まさか不倫というわけではあるまいな、と思っていると、イノウーの怪訝そうな表情に説明する必要性を感じ取ったらしく、斉木係長は小声で囁いた。
「彼女、先月、客先でちょっとやらかしちゃってね」
クライアントである元請け会社の担当者と連絡の行き違いがあり、30 人が集まる場でのデモを予定通りに行うことができなかった。責任はどちらかといえば元請け会社の担当者にあったのだが、業務三課では、立場上、笠掛を叱責せざるを得なかった。それ以来、仕事に精彩を欠くようになってしまったという。
「できれば、ちょっといい賞品が当たるようにしてあげられないかな」
「そういうことなら......わかりました。やってみます」
「よかった」斉木係長は、またイノウーの肩をぎゅっと掴んだ。「そんで、画面の方はいつ見られるかな?」
「今日中にはテスト画面ができると思います」
「わかった。今日はずっといるから、いつでも声かけてよ。ドーン、バーンってのを忘れないようにね」
斉木係長は機嫌良く去って行ったが、イノウーは早くも少し後悔していた。
完全にランダムに数値を出すなら簡単だが、特定の属性や人を意図的に当選させるとなると、乱数に運命を託すわけにはいかなくなった。それなりのロジックを考える必要がある。表向きは当選確率を上げるだけだが、実際にはそれらしいパーセンテージに見えるような数を当選させなければならないだろう。
どういうロジックにすればいいのか、と考えていると、木名瀬さんが足早にやってきた。
「斉木係長に何か言われましたね?」
斉木係長がイノウーに話しかけたのを見ていたらしい。イノウーは救われた思いで、斉木係長の要望について説明した。
「それはもう」説明を聞いた木名瀬は、あっさり言った。「あらかじめ決めておくしかないですね」
「決めておくって何をですか」
「当選者です」
「それじゃあ」思わず声が大きくなってしまい、イノウーは慌ててボリュームを下げた。「それじゃあ、完全に出来レースじゃないですか」
「何を言っているんですか。リアルタイムで決めるか、少し前に決めるかの違いでしかないでしょう。全員分、決めるわけではありません。斉木係長案件に該当する何人かだけです。社員はビンゴゲームを楽しむ。斉木係長は満足する。井上さんの評価も上がる。ウィンしかないじゃないですか。何が不満なんですか」
「不正......ですよね」
「勤続年数で確率を上げるのは不正ではないとでも?」
「その、プログラマとしてのプライドが......」
「そんなもの、何の役に立つんですか。井上さん一人が満足すれば、他の全員が満足しなくてもいいとでも言うんですか」
「......」
「それなら、もう何も言うことはありませんね」木名瀬は平板な声で言った。「ご自由にクソの役にも立たないプライドを満足させてください」
「わかりました」イノウーはうなだれた。「わかりました。木名瀬さんの言うとおりだと思います」
「プライドは大切ですが、乱発してもムダになるだけです。ここぞというときに使ってこそ、プライドの価値が出るんです。ところで、笠掛さんに対する操作は不要です」
「え?」イノウーは驚いて、木名瀬の顔を見た。「むしろ、それは良心に恥じることなく操作してもいいと思ってたんですが」
「そんなことをしても彼女は喜びません。いいですね。繰り返しますが、笠掛さんに対する操作は不要です。では、少し待っていてください。過去5 年分の当選者リストを持ってきます。去年、当選した人が、今年も当選するようなことになったら、クレームがつきます。うまく分散するように調整する必要があります」
木名瀬は足早に庶務グループに戻っていった。イノウーは割り切れない思いを抱えながら、出来レースのためのロジックを考え始めた。
(続)
この物語はフィクションです。実在する団体名、個人とは一切関係ありません。また、特定の技術や製品の優位性などを主張するものではありません。
コメント
匿名
どうりで毎年ビンゴが当たらないわけだ。
匿名
ビンゴの当選確率上げたり、確定当選させるの何気にムズいな
匿名
ビンゴは紙に限る
匿名D
ビンゴの当選確率を操作するなんて、
そりゃ事前に当選者を決めておくしか方法はないよね。
ところで、木名瀬さんは唐突に話題を変えているのではなく、
もたもた道草を食っているイノウーを、
首根っこを掴んで正道に戻しているだけだと思う。
おかげで、ロジックで当選者を操作する方法なんて、
不毛な思考から開放されたわけだ。
匿名D
ビンゴの当選確率を操作するなんて、
そりゃ事前に当選者を決めておくしか方法はないよね。
ところで、木名瀬さんは唐突に話題を変えているのではなく、
もたもた道草を食っているイノウーを、
首根っこを掴んで正道に戻しているだけだと思う。
おかげで、ロジックで当選者を操作する方法なんて、
不毛な思考から開放されたわけだ。
名なし
どうやって実装するかな
ビンゴの数字を当日乱数で決めず、事前に乱数列を作成しておく、当日はそれを順に取り出すしか無さそうだが。
参加者がランダムさの保証を納得し無さそうだ。
ビンゴの数字だけ、司会者何ビンゴセットで出す方式にした方が良さそう。
そうすれば、当選確率なんか操作出来ないと断ることが出来る
匿名
木名瀬さんが主人公の話をいつか読みたいです。
匿名D
ビンゴゲームをプログラムするのに、
あらかじめ出玉を配列に用意するのは当然の仕様ですよ。
乱数を取って既出かどうか判断する方法では、
残りが少なくなるほど出玉を決定するのにコストがかかるようになります。
問題は、配列を覗くかどうかというモラルだけですね。
匿名D
二重投稿になってるじゃないか。orz
匿名
became including nervous giving operation.
Google先生頼りですが。
匿名
マリちゃんいたんだ。
てか斉木さんの全然イメージ違うな…