if文の中の正義
午前10時。
いつも通りオフィスに入り、PCを立ち上げ、Slackをチェックして──
「え、これ……ほんとにこの構成でいくの……?」
私は小さく呟いた。モニターの先には、翔太が今朝プルリクを投げた新機能の設計図。ファイル構造から関数の分割、ルーティングの命名まで、初心者全開な設計が炸裂していた。
いや、がんばってるのはわかる。でも、これは──
「読めない。動きはするけど、読めない」
そのとき、背後から聞こえたのはおなじみの快活な声。
「朝倉さーん!今日もよろしくお願いしますっす!」
西田翔太。元気だけが取り柄──いや、最近は少しずつコードも読み書きできるようになってきた新人エンジニアだ。だけど、今日のこれはちょっと……。
「設計、見た?」
「はいっ!ちゃんと分けて、関数も作って、モジュールも分離して……ってやったんですけど……」
「うん。動くのはわかる。でも、ロジックが深すぎる。ifが5段ネストしてる時点で、未来の自分が泣くよ」
「うっ……!」
と、そこに横からスライドインしてきたのは、佐倉真理。バリバリのフロントエンドエンジニアであり、毒舌系・感情派の代表でもある。
「しかも変数名、data1とかresultTmpとか、何にも伝わらんし。業務ロジックにおける『仮』は、マジで地雷だからね?」
翔太、撃沈。
「す、すみません……!でも、自分なりに分かりやすく……」
「自分なりが通じるのは趣味開発までだよ。チーム開発は誰が読んでもわかるコードじゃないと」
ピシリ、と言い切る真理。翔太は口をつぐんだ。
──わかる、真理の言いたいことは。
でも、それじゃ翔太の心は折れる。
「……翔太くん、設計の意図を、説明してくれる?」
私が間に入るように声をかけると、翔太は少し戸惑った顔で、それでもゆっくりと話し始めた。
「最初は処理を共通化したくて、関数を分けようと思ったんです。でも途中から条件が複雑になって……。あと、ログを残したかったので、ifの中にprint入れたりしてたら……どんどんネストが深くなってしまって……」
「うん。意図はわかった。でも、共通化と可読性はトレードオフじゃない。うまく分割すれば、両立できるよ」
「……たとえば?」
「それは、レビュー会で一緒に考えよう。明日時間取れる?」
翔太は顔をぱっと明るくし、うなずいた。
「はい!ぜひお願いします!」
横で聞いていた真理が、小さくため息をついた。
「甘いなぁ、凛。もっと突き放してもいいのに」
「……甘いって言うより、経験あるから。私も昔、同じことしてた」
真理は少し驚いたように私を見たが、すぐにふっと笑った。
「……あんた、昔から意外と面倒見よかったもんね」
====
昼休み。私は自席に戻り、AIアシスタント「ユニ」を起動した。
モニターに表示されたのは、白い球体に目と口がついたような、ちょっと間抜けな見た目のキャラクター。だけど、頭脳は冷徹。というか、毒舌AIだ。
「ようこそ、バグ修正奴隷生活へ。今日は何個潰しますか?」
「黙れ、ユニ。過去ログ開いて。“2018年5月:バグ地獄”ってタグつけてるやつ」
「おや、珍しく自分の黒歴史を直視するお時間ですか。開きますね、心の傷口も一緒に」
……これ、ほんとに私が作ったAIなのか?
表示されたログには、懐かしい変数名、めちゃくちゃな関数、コメントなしの嵐。
「“data2”とか、“funcX”とか……これ、翔太くんよりひどいじゃん」
「はい、当時のあなたのIQはジャガイモ並です。何度も言ってますが、関数名に“doStuff”と書くのはやめましょう」
私は苦笑しながらウィンドウを閉じた。
──そう。私も、通ってきた道。
翔太は、ちゃんと成長してる。
====
夕方、翔太が近づいてきた。
「朝倉さん……さっきは、ありがとうございます」
「なにが?」
「真理さんの言葉、ちゃんと受け止めようとは思ってます。でも、ちょっとだけ、悔しくて」
「うん。悔しいと思えるのは、大事なこと」
翔太は、しばらく黙っていた。やがて、口を開く。
「……自分、もっと上手くなりたいです」
その言葉に、私は小さくうなずいた。
「じゃあ、まずは明日のレビュー会。ifを減らす設計、いっしょに考えよう」
====
夜。
Slackには、翔太がこんなメッセージを残していた。
明日、設計レビューよろしくお願いします!
「読めるコード」を目指して、がんばります!
私はそのメッセージに、「+1」のスタンプを返したあと、小さく呟いた。
「ifの中に正義があるわけじゃない。でも、選び方に人間が出る」
──そして私は、明日のデバッグに備えて、そっとPCを閉じた。