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

イノウーの選択 (16) 消えない執着

»

 もしかしたら、ぼくたちは日本から四季という言葉が消える過程をリアルタイムで目撃しているのかもしれない。そんな冗談が不気味なほど現実味を帯びていた10 月が終わると、ようやく秋の気配が日常を優しく包み込むようになってきた。
 イチゴシロップのかき氷がマイブームだったナナミは、毎日のようにもののけ姫さながら口の周りを赤くしていたが、11 月になると、あっさり興味を失い、糖分の取り過ぎを心配していたマリを安堵させた。代わりにはまったのは、なぜか、ぼくが朝食に食べていた低糖質のクロワッサンだった。おかげでマリは、購入のサイクルを見直すことになった。
 「ただいま」買い物に行っていたマリが戻ってきた。「最後の一個だった」
 マリがテーブルの上においたのは、ナナミお気に入りの低糖質クロワッサンだ。切らしていることに気付いて、マリが近くのフィットケアに走ったのだ。22 時の閉店ギリギリに駆け込めたらしい。明日の朝ナナミが食べるとは限らないが、欲しいときにないとわかると、手足をバタバタさせて幼稚園に行くのを拒否するので、ストックしておくに越したことはない。
 「そろそろ定期購入を考えた方がいいかな」
 「そうね」マリは麦茶を注いだコップを干した。「なに、仕事?」
 「うん」ぼくは開いていたノートPC を閉じた。「新人のアサインどうしようかなってね」
 「ああ。問題は安川さんよね」
 すでに一ヵ月以上、練習を続けているにもかかわらず、安川さんのスキルレベルは、最大限ひいき目に見ても、アマチュアを脱していなかった。
 今日の午後も、安川さんがプッシュしたhtml ソースを見たマリは、すぐに立ち上がって安川さんの席の後ろに立った。
 「あのですね」マリは苛立ちを抑えながらモニタを指した。「ここでは、テキストの幅をcss で指定してるのに、なんでこっちはwidth で指定してるんですか? いまどきwidth は使わないでしょう」
 「ああ、そういうものなんですね」安川さんは頷いた。「参照したサイトが古かったようです。申し訳ありません」
 「いや、謝らなくてもいいんですが」マリは戸惑ったように首を横に振った。「それに、間違いというわけではないので。ただ、やっぱりトレンドというか、効率のいい書き方ってものがあるんで」
 「わかりました」
 「それから、このあたりのdiv ですけど」マリはマウスを動かした。「いちいちmargin-bottom で間隔作ってますよね。こういうのはclass 付けてcss でまとめましょう」
 「わかりました」
 マリがこの手の指摘を安川さんに行うのは、これが初めてではなかった。css に切り出す件にしても、ぼくが記憶しているだけでも、マリが指示したのは数回以上のはずだ。
 個別に教育を始めてから数日で、マリが疲れた顔で家事をしていることに気付いたぼくは、隣で食器の水分を拭きとりながら理由を訊いてみた。同じことを何度も教えなければならないからイライラしているのかと思ったのだが、マリの答えは違った。
 「それはいいんすよ、別に」マリはため息をついた。「教えたことは一回で憶えろ、二度訊くヤツは死ね、なんてどっかの傭兵部隊みたいな教育方針でやってるわけじゃないんすから。あたしだって、フロント勉強してたときは、同じ失敗を何度も何度も何度も繰り返したもんです。人のことはいえません。身の覚えのある失敗をどうして指させる、ってやつです」
 「そりゃそうだな」
 「困るのはですね」マリはスポンジをギュッと握りしめた。「安川さんが、プログラマとしては素人だってことです」
 「ん?」ぼくは手を止めた。「それは最初からわかってることじゃ......」
 「ああ、いや、そうじゃなくて、あたしが説明しても、それを正しく理解しているかどうか、自分でも自信が持てないんだと思います。だから、ネットでいろいろ調べて確認を取ってるんです。ソースが一種類だと不安だから、似たようなサイトをいくつかも渡り歩いて、やっと納得する」
 「なるほどね」ぼくは頷いた。「慎重なのは悪いことじゃないんだけどな」
 「そうなんですけどね。でも安川さんの場合、最終的に安川さん的に納得した内容っていうのが、なんというか微妙に正道からズレてるのが問題なんすよね」
 安川さんの場合、圧倒的に経験が少ないので、そもそも「正道」が何か、ということ自体がわかっていない。少し前に、Spring Boot で簡単な検索画面を作ってもらったときに、ロジックのソースを見て愕然としたことがある。検索条件として、ユーザ種別を選択するselect タグがあるページだ。
 なぜかJava 側でuserKind の一覧をループして、userKindName が一致するレコードから、userKindId を決定している。なんでこんな面倒なことを、と思ってhtml テンプレートを見ると、th:field で指定しているのが、userKindId ではなく、userKindName になっている。@ModelAttribute で受け取るdto にもuserKindId がない。
 普通に考えれば、userKindId を受け取り、テーブルからレコードをfindById() で取得すればいい。というか、それ以外の方法などあり得ない。だが、安川さんの思考では、名称が一致するレコードをループで探す、という方法が正だという結論に達してしまったようだった。
 また、ユーザ一覧をExcel ファイル形式でダウンロードする、という機能の作成をやらせたとき、ファイルの作成までは順調に進んでいたのに、ダウンロード部分で丸一日を費やしていたことがあった。HttpServletResponse のoutputStream にバイトデータをwrite すればいいだけで、手間取るような内容ではない。どこで引っかかっているのか、と訊いてみたところ、クライアントPC 側でのファイルの作成場所を制御する方法をずっと調べていた、との答えが返ってきて、思わず脱力してしまった。根本的にWeb アプリケーションというものを理解していない。
 「それに加えて」マリは手を洗いながらぼやいた。「あの完璧主義。ありゃあ、エースシステム的教育なんすかね」
 安川さんの学習計画を練り直さなければならなかった第二の理由は、彼の完璧主義だった。エースシステムは失敗を好まない。安川さんも、その例に漏れず、一度で完璧なものを作り上げなければならない、という考えに染まりきっているようだ。
 「間違っていてもいいから」ぼくは何度となく言った。「とにかく手を動かして、コードを書いていかないと。Excel であれこれ仕様を考えていても何も生まれませんよ」
 「しかし」安川さんは納得できないようだった。「やみくもに手を動かしても、作ったものが使えなかったり、動かなかったりすると思うんですが」
 「動かなかったら、動くまで何度も修正すればいいんですよ」
 「途中まで作って、やっぱり方向が間違っている、とわかったら、それまで作ったものがムダになりますよね」
 「だから何ですか?」温厚なぼくも、さすがに苛立ちを押し殺すのに苦労した。「そしたら、全部捨てて、一から作り直せばいいじゃないですか」
 全財産を賭けた勝負に2 のワンペアでコールしろ、とでも言われたような顔で、安川さんはぼくをまじまじと見た。
 「そんなことが許されるんでしょうか」
 「許されない、とどうして思うんですか」
 「費やした工数がムダになります」
 「今、安川さんがやっているのは、練習問題ですよ」ぼくは思い出させた。「工数云々よりも、まず、プログラマとしてのスキルを身につける方が先じゃないんですか。そのために、ここに座っているわけですから。そのための時間はムダにはなりません」
 その場では頷いたものの、安川さんは進め方を変えなかった。変えようと努力はしているらしいが、おそらく社会人になってすぐに刷り込まれた意識は、かなり強固な根を張っているようだった。
 ぼくもマリもそれぞれの業務があり、1日中、隣に張り付いているわけにもいかない。考えた末に、ぼくはCursor を使ってみてはどうか、と提案してみた。Teams プランのアカウントは、ぼくとマリの二人分だが、Free プランでも試すぐらいは可能だ。だが、安川さんは首を縦に振らなかった。
 「生成AI に頼ってしまうと、自分の本当の力がいつまで経っても身につかないと思うので。もうしばらく、このままでやらせてもらえないでしょうか」
 急がば回れ、という考えは尊重するが、脇道に迷い込んでばかりでは、目的地に到達するまで相当な時間がかかってしまう。時には、問題集の最後のページに飛んで正解を見るのも有効な勉強方法だ。他の人なら手法の変更を指示しただろう。だが、安川さんは一時的にシステム開発室に籍を置いている人間だ。本人が決めた以上、こちらが強制することはできない。
 一方、尾日向さんはというと、ネット制限が解除されてからは、すぐにその優秀さを見せつけていた。ぼくやマリが与える練習問題を楽々とクリアしてみせ、安川さんとは逆に研修計画を前倒しにしなければならないほどだった。
 やっていること自体は安川さんと大きな違いはない。わからない部分はすぐにCopilot やGemini に質問を投げ、コードを書かせて、エディタに貼り付ける。時には間違いもあるが、尾日向さんにはシステム開発の経験値があり、正解にたどり着く時間を最小限にとどめることができていた。
 「やっぱり優秀な人材だったな」進捗状況を報告された茅森課長は満足そうに言った。「そうなんだろう?」
 「はい」ぼくは認めた。「実戦投入可能なレベルと言っていいと思います。ネット環境があれば、という条件は付きますが」
 「実際の開発でネットが使えないなんてことはないんだろう」茅森課長は、尾日向さんと同じような疑問を口にした。「そもそも意味があったのか?」
 「人間ドックなんかで採血するとき、前日は絶食しますよね。あれと同じです。ネットやAI のない状態でスキルチェックする必要があったんです」
 「ふーん。まあいいが」茅森課長はあまり興味なさそうに言った。「で、今後はどうするつもりなんだね」
 「JINKYU の機能追加要望がいくつか経理から来てるので、比較的小規模なタスクからやってもらおうかと。少しずつ慣れてもらう意味でも」
 茅森課長は少し顔をしかめた。
 「うん、それもいい、いいとは思うんだが」茅森課長は身を乗り出した。「前に頼んだAI ガイドラインな。そろそろ本格的に着手してほしいんだ」
 そろそろ、その話が出てくる頃合いだ、と考えていたところだった。茅森課長の意図は見え透いていたが、ぼくはあえて、思惑を外す答えを口にした。
 「いくつかのツールの使い勝手や、ランニングコストを、多忙な業務の合間に時間を見つけて進めています」多忙、という単語を強調しておいた。「先月、進捗は報告してありますが」
 「うん、読んだ。そうではなくて、彼をこの件の専任にして、一気に進めたらどうだろう?」
 その三人称が尾日向さんであることは言うまでもない。
 「まずは、社内の各システムの状況を把握してもらわないと」ぼくは穏やかに反論した。「今後のためにも」
 「もちろん、そっちはそっちでやってもらいたい。もらいたいんだが、ガイドライン作成はエースシステムからの要請だからな。こっちも後回しにはできないんだ」
 「今は、彼にとっても大事な時期なんです。システム開発室の本業は、社内システムの開発と保守です。そのベースとなる知識やノウハウを、今確立させておかないと、今後の業務に支障が出ると思います。ガイドライン作成が終わった後も、開発業務は続くんですから」
 口をつぐんだ茅森課長は、しばらくテーブルを指をトントンと叩きながら考えていた。課長権限で命令すべきか、と思案しているのは明白だった。実のところ、業務命令として、尾日向さんを生成AI ガイドライン作成に専念させること、と言われれば、ぼくは従うしかない。だが、そこまで深くシステム開発室の業務に介入することは、茅森課長としても本意ではないだろう。
 「わかった」茅森課長は頷いた。「イノウーがそう言うんなら、そうなんだろうな」
 「ありがとうございます」
 ぼくは礼を言って、茅森課長の前を辞した。
 その一週間後、人事発令が通知された。組織変更のような大きな異動は年度末の一ヵ月前、中途採用や退職などは、該当月の月末というのが通例だったから、月の半ばというのは珍しい。あるとしたら戒告やけん責などだから、ぼくは半ば好奇心で通知を開いた。

 生成AI ガイドライン作成プロジェクトチーム発足にともない、次の社員に兼務を命ずる
 広報課 田中
 マネジメント三課 椛沢
 ネットワーク業務課 伊牟田
 営業三課 多良
 システム開発室 尾日向
 チームリーダーは人事課 戸室課長が兼務する

 こういう手で来たか、と、ぼくは半ば呆れ、半ば感心しながら通知を眺めた。
 プロジェクトチームは、特定の課題解決や目標達成のために、不定期に生まれるチームだ。たいていは半期程度の活動期間を設定され、成果報告が義務づけられている。内容に応じた予算も付く。起案は誰でもできるが、所属課長の承認と、部課長会議での検討を経て正式に発足することになっている。「なっている」というのは、課長が承認したものが却下されるのは、よほど内容がずさんでないかぎり、ザルに注いだ水のように通過するのが通例だからだ。
 チームリーダーには、責任の所在を明確にする意味でも、起案部門の課長か部長が就くのも通例だ。つまり、このプロジェクトチームを起案したのが人事課、端的に言えば、戸室課長だということだ。
 通知にはプロジェクトチーム発足の趣旨が20 行ほど付記されていた。昨今の生成AI 普及と進歩にともない我が社も云々、エースシステムからのガイドライン作成予定もあり云々、各部署から幅広く人材を云々、AI の使用に習熟した若い世代からの云々......。各部署から幅広く、というのは、システム開発室から尾日向さんを参加させる口実だろう。
 ぼくは尾日向さんを見た。もちろん事前に話をされているのだろうが、ここ数日、そんな気配は微塵も見せなかった。今、真剣なまなざしでモニタを見つめている顔からは、内心を伺うことはできない。
 ドアが開き、茅森課長が入ってきた。
 「あー、ちょっといいかな」茅森課長は咳払いした。「通知で読んだと思うが、生成AI プロジェクトチームに尾日向さんが参加することになった。週に2 回の定例ミーティングの他、プロジェクト関連の業務に時間を割くことになる。イノウー、時間の調整の方をよろしく頼む。しばらくは、こっちを優先させることになるから」
 「わかりました」ぼくは頷いてから訊いた。「じゃあ、ガイドライン作成は、システム開発室ではなく、そっちのプロジェクトチームの方でやってくれるんですね?」
 「そういうことになる。途中で取り上げるような形になってすまんが、これまでの作業内容なんかがあったら、尾日向さんに引き継いでおいてくれ。尾日向さんもいいね」
 尾日向さんは神妙な顔つきで頷いた。
 「じゃあ、早速、これからプロジェクトチームのキックオフを兼ねて、ランチミーティングがあるから。最初だけ、メンバーの上長も参加となるんだ。尾日向さん、行こうか」
 二人が出て行くと、時計を見て、安川さんも立ち上がった。
 「私も昼休憩に行ってきます」安川さんはスマートフォンを掴んだ。「午後、自社の方に顔を出してくるので、戻りは15 時ぐらいになります」
 「了解です」
 ドアが閉まると、待ちかねたように、マリが言った。
 「これ見ました?」マリはモニタを指した。「伊牟田さん、入ってますよ。まだ生息してたんですね、あの人」
 伊牟田さんは、以前、短い期間、システム開発室の管理者だった人だ。お世辞にも能力のある人ではなく、開発部門の管理者としては不向きだった。その後、紆余曲折を経て、通信事業部ネットワーク業務課に落ち着いている。ネットワーク業務課は、大昔にうちの会社が販売していたネットワーク機器の保守を細々と続けている部署で、はっきり言えば閑職だ。
 「そういう人を入れてるってことは」ぼくは苦笑した。「あまり真剣にやるつもりはないのかね、このプロジェクト」
 「チームリーダーが戸室さんですからね」マリは呆れたように言った。「生成AI でやらかした人を、生成AI 関連のプロジェクトリーダーにするって、何のジョークなんだか」
 「一度失敗したからって、カムバックのチャンスも与えないのは公平じゃないよ」ぼくは指摘した。「ま、戸室さんにしても、起死回生の一手なんだろうな」
 戸室課長としても、このまま「生成AI でやらかした人」というレッテルを貼られたままでいるのは耐えられないだろう。失敗したからこそ、その経験を生かして貢献できる、とでもアピールしたのかもしれない。
 「まあ、厄介なタスクが一つ減ってよかったじゃないすか」マリは楽観的な口調で言うと立ち上がった。「あたし、今日は同期とランチなんで外行ってきます」
 「営業?」
 「いえ、今日は庶務課で。なんか相談があるとかで、会社の人がいなさそうなとこで」
 一人になると、ぼくはランチボックスとKindle を取り出した。五穀米のおにぎりを頬張りながらKindle のページを開いたが、ふとデスクトップの片隅にあるCursor のアイコンが目に止まった。
 以前、VSCode を使っていた流れで、Python をコーディングするためだけにインストールしたが、AI エディタとしてはあまり活用していない。そろそろその方式を改める頃合いなのかもしれない。ぼくはKindle をしまうと、Cursor の設定や活用方法を求めて、ネットをさまよい始めた。

 (続)

Comment(1)

コメント

匿名

>>身の覚えのある失敗をどうして指させる
SUPER BEAVERかな…!

コメントを投稿する