走るそよ風たちへ (2)
「WWCD」イノウーはシュンの言葉を繰り返した。「で、それは何? CIA みたいなもの?」
「違います」シュンは否定したが、すぐに語を継いだ。「ぼくたちも実体はよく知らないんです」
「君たちは、そのWWCD の人なんだろう?」
「いえ、ぼくたちはA......別の組織に属してるんです。今日はアルバイトみたいなもので。以前、WWCD にちょっと借りを作ってしまって、それを返すためにただ働きってわけです」
「ふーん」イノウーは、隣でマイカに遊んでもらっている娘をちらりと見た。「で、そのWWCD というのは何をやってるんだ?」
「えーと、何というか......一種の配信サービスです」
「配信って動画とか?」
「信じてもらえるかどうかわからないんですが」シュンは躊躇いながら言った。「サンタクロースです」
「サンタさん!」ナナミが嬉しそうに叫んだ。「来るの?」
「来るよ」マイカが保証した。「絶対来る」
「やったー!」
「もちろん」シュンは声を潜めた。「トナカイに乗せたサンタクロースを配信しているわけではなく、特定のロジックで算出された割合の幸運を届けている、らしいです」
「何かの比喩ではなく」イノウーは確認した。「言葉通りの意味でか?」
「はい」
「なんでこんなに混んでるだろうな」トレイを抱えたカズトが戻ってきた。「買ってきたぞ。どこまで話した?」
人数分のドーナッツと暖かいドリンクが広げられると、ナナミが目を輝かせて父親を見た。イノウーが頷くと、ナナミは歓声を上げてチョコレートのかかったオールドファッションを掴んでかぶりついた。
「慌てないでね。まるで食べさせてない子みたいじゃないか」イノウーはリュックから、娘のハンドタオルを出してそばに置いた。「で、君たちが抱えているトラブルって何だ?」
「このモールの中で」シュンに代わってカズトが説明した。「配信が滞っているという報告があったんだよ。一番近くにいて、動けるのはオレたちだけだったんだ。で、何が原因なのか現地調査に派遣されたってわけ」
「配信が滞っているって、具体的に何か弊害があるのか?」
「あるよ」カズトはカスタードクリームがたっぷり詰まったドーナツをつまみ上げた。「このモールの中だけでも、10 店舗以上が、電気系統や水回りのトラブル、従業員の急病、物理的な荷物の配送遅れなんかで閉まってる」
幸運が行き渡らないと、まるで生命維持に必要な薬剤が切れたように、様々な不具合が生じるんだ、とカズトは付け加えた。
「閉まっているお店が多いって思いませんでした?」シュンが言い、フードコートの中をぐるっと指で指してみせた。
そう言われれば、とイノウーは頷いた。いつもなら行列ができている丸亀製麺やリンガーハットがやけに空いている、と思っていたのだが、よく見ると照明が消えていた。
ひょっとすると、例の製パン材料専門店が臨時休業だったのも、そのせいだったのかもしれない。そう気付いたイノウーは、希望が胸の奥に湧いてくるのを感じながら訊いた。
「その滞りとやらを解消すれば、閉まっている店舗が開くかもしれないってことはある?」
シュンとカズトは顔を見合わせた。
「ある......かもね」
「ないとは言えないな」
イノウーは時刻を確認した。15 時を少し回ったところだ。これから、雨が止むのを待って外に出て、何らかの手段で専門店に行くよりも、モールの中で作業が完結できるなら、それに越したことはない。
「よし、やろう」イノウーは決断した。「何をすればいい?」
◇ ◇ ◇ ◇ ◇
5 人はエスカレーター下の空間に戻った。
「目視はできないけど」シュンが漠然と手を動かした。「このあたりに配信ルートの分岐ステーション......えーと、スイッチングハブみたいなものがあるんです」
分岐ステーションはモール内だけでも40 箇所以上に点在している。人が多く集まる場所の方がポイントの配布を容易に実行できるからだ、とシュンは説明した。各ステーションでは、それぞれ異なるアプリケーションが稼働している。
「これがそのアプリのソースです」シュンはノートPC の画面を見せた。「一部ですけど」
Python で記述されたソースだった。見たこともないようなライブラリがimport されているのを除けば、業務アプリケーションのソースと大きな違いはない。イノウーの最近の作業は、SpringBoot を使うことが多かったが、いくつか動いているAPI はPython なので読むのに支障はなかった。
「このAI エージェントは」イノウーは画面を指した。「使えるのか?」
「使えることは使えるんだけどね」カズトが鼻を鳴らした。「AI のコード生成はそのまま使えないんだよな」
「どうして?」
「話すと長いし部外秘もあるので詳しくは言えないんですけど」シュンが答えた。「いわゆる知的生命が考えないと、動作しないんです。将来はともかく、今現在だとまだAI は知的生命とは認めてもらえなくて、どうしてもヒト科の生きものの手が必要です」
「認めてもらえないって」イノウーは笑った。「誰に? 神様とか?」
修辞疑問だったが、シュンは真面目に答えた。
「似たようなものです」
深く突っ込むのを躊躇わせるような口調だったので、イノウーはソースに戻った。
「このクラス?」
「はい。そこまでは特定できてるんですが」
![]()
コメントがほとんどないので、何をやっているのか全くわからない。しかもメソッドが長い。
「コンストラクタで何もやってないということは」イノウーはソースを指して訊いた。「インスタンスを作った後、このstat() メソッドを呼ぶわけだな。最後にkpt という変数を返している。このkpt の値が期待通りになっていない、ということか?」
「さすがプロ」カズトが茶化すように言った。「その通りだよ」
「これ、どうやって実行するんだ?」
プロジェクトのルートに、run.py があり、必要な引数などが記述されているので、そのまま実行すればいい、とシュンが教えてくれた。
「結果は」カズトがタブレットを見せた。「こっちでモニタできる」
「やってみていいか?」
シュンとカズトが頷いたので、イノウーは言われた通りにrun.py を実行した。たちまちコンソールに大量の出力が吐き出され、数秒で停止した。
「ほら」カズトがタブレット画面の一部を指した。「この数値が1.35v になってるだろ。本当なら最低でも12v 以上、できれば19v 以上ないと配送に必要なパワーが得られないんだ」
「AI に質問してみていいか?」
「いいけどムダだよ」
「パパ? 何やってる?」
「お仕事だよ」イノウーはナナミの頭を撫でた。「ちょっと待ってて」
ナナミは頷いたものの、興味を惹かれた様子で、父親にくっついたまま手元を見つめていた。イノウーはAI エージェントに入力した。
――run.py を実行したが、結果の数値が想定より低い。なぜかわかるか?
AI はすぐに答えを返した。
――与える引数が違っているんだろう
なんて尊大なAI だ。シュンが肩をすくめた。
「そういう奴なんですよ」
イノウーは続けて入力した。
――引数は間違っていない。stat() の中身でおかしいところはないか?
――実行できているなら間違いはない。引数の再確認を推奨する。人間はミスを犯すものだ。31 時間22 分前、カズトはオペレーションA72 で変数にマイナスを付け忘れるという愚かなミスを......
「マドソン、ストップ」カズトが慌てた声で遮った。「もういい」
「音声入力できるなら先に言ってくれよ」
「とにかく、そいつに訊いてもムダだよ」カズトは言った。「WWCD のミッション用に最適化されてないんだから。オレたちがアルバイトだってことを忘れんなよ」
「だが」イノウーはAI エージェントを指した。「こいつの言うことにも一理ある。コンパイルエラーでも出てるならともかく、実行時例外もなく完了しているなら、コーディングは間違ってないということになるんじゃないのか」
「あの、いいですか」マイカが小さく手を挙げて発言した。「もう一つ、重要な要素があるんですよ」
「というと?」
「コードが冗長だと、正しい動作にならない場合があるんです」
意味がわからない。イノウーはマイカの顔を見た。
「ランタイムが少し特殊なんです。あ、触っちゃダメよ」
ナナミの手がキーボードに到達する直前に、マイカは優しく引き戻した。イノウーはナナミの手を受け取ると、膝に乗せて動きを封じながら訊いた。
「つまり、やってることは同じでも、コーディング次第で結果が変わる、という意味か?」
マイカは頷いた。イノウーは思わず嘆息した。
「ちょっと試してみる」
![]()
手早くソースに入力する。意味のない変数への代入だ。保存して実行してみる。
「ほらな」カズトが示した数値は1.22v だ。「ムダなコードがあると影響するんだよ」
「そういうことか。それなら逆に話は早いな」
「え?」
「要するにコードレビューをやればいいんだろう」イノウーはナナミを膝から下ろしと、冷たい床に座り込んだ。「それなら慣れてるんだよ」
◇ ◇ ◇ ◇ ◇
「なんで"is"で比較してるんだ。ダブルイコールで書き直せ。"is"はオブジェクトの比較に使うんだ」
「ここ、シャローコピーになってる」
「辞書の順序を信用するな。Python 3.7 以降だと一応保証されていることになってるが、パッと見、確認できないから危険だ」
「これ、クラス変数になるな。マルチスレッドだと共有される。インスタンス変数に直しておけ」
「この、df['var8'] == None っておかしいだろ。ヒットしないぞ。.isna() にしろ」
「ここのmerge だと、値によってはn対n になって最終的な件数が膨れあがるかもしれん。drop_duplicates() 使った方がいいな」
「このsum() もNaN があっても結果が出ちまうから、.isna() で検査するか、sum() 呼ぶ前に精査するかしろ」
イノウーは次々に潜在的な問題点を指摘していった。一つ修正するたびに実行させ、結果を確認する。タブレットに表示される数値は、少しずつ数を増やしていった。
マイカは退屈し出したナナミを連れて、フードコートとエスカレーター下を往復し、現実世界への反映を確認していた。
「丸亀製麺、お店が開いてたよ」
「銀だこ、もうすぐ再開しますってお店の人が言ってた」
「連絡通路前のエレベータの故障が直ってた」
「レシート引き換えの抽選会、当選者が出始めた」
16 時を過ぎたとき、実行結果の数値は9.7v まで上昇していた。しかし......
「この式、たぶんレイト・バインドになるな。ラムダ使うのやめてみよう」
シュンが素早く修正し、ショートカットキーで実行した。終了するとイノウーとシュンはカズトに顔を向けたが、カズトの顔は明るくなかった。
「9.8v だ」
「もうちょっとなんだけどな」
数値の上昇率が目に見えて落ちてきていた。
「製パン材料のお店」戻ってきたマイカが残念そうに報告した。「まだ閉まったままだった。トイザらスのシステム障害も直ってなくて、会員認証できないままだった」
「とは言ってもな」イノウーはキーボードに手を伸ばし、ソースをスクロールした。「もう最適化できるところは手をつけたと思うんだが」
「パパ」ナナミが不満そうに言った。「ボールで遊ぶところ行きたい」
ナナミが行きたがっているのは、上の階にある、子供向けの室内遊戯施設のことだ。今日のような雨の日でも、安心して遊ばせることができるが、料金はそれなりにかかるので、ごくたまにしか行ったことはない。
「今日はちょっと行けないな。また、今度行こう」
「やだ行く!」
「お父さん、お仕事してるんだよ」
子供だけでの入場はできないので、マイカに連れて行ってもらう、というわけにもいかない。
「じゃ、ナナミもお仕事する」
「それはちょっと無理かな」
「する!」
「わかった」とにかくナナミをなだめるために、イノウーは妥協することにした。「じゃ、ちょっとお手伝いしてもらえる?」
ナナミは目を輝かせて頷いた。シュンたちは、仕方ないな、という顔で見守っている。
「じゃパパのお膝に座って」ナナミを座らせて、小さな手を掴んだ。「このボタンの上に指を載せて。そうそう。じゃ、パパがはいって言ったら押してね。わかった?」
「わかった!」
とにかく何かやらせれば気がすむだろう。イノウーはタッチパッドを指でなぞってメニューを開くと、実行の上にカーソルを誘導した。
「いくよ。3、2、1、はい」
「カチッ!」
擬音とともに、ナナミの小さな指がタッチパッドをタップした。コンソールにデバッグ情報が次々に表示されるのを、ナナミは目を丸くして眺めている。
「はい、終わった。ありがとうね。あ、おトイレ大丈夫?」
「だいじょうぶ」
「じゃ、ちょっとお茶飲もうか......」
「おい!」カズトが大声を出した。「これ、これ見ろよ」
全員の視線がタブレットに集中した。表示されている数値は、11.9v。
「え、なんで?」
「何も修正してないのに......」
「待って!」マイカがナナミを見た。「観測問題! ナナミちゃんがソースを見ていたよね。実行したのもナナミちゃんだった」
イノウーは茫然として娘を見つめた。ナナミはきょとんとした顔で父親を見た。
(続)
コメント
匿名
ナナミはやはり幸運ポイントを継承している?