さくらコードSakura Code
小説/第21話

Novel

第21話 答える窓

第21話 答える窓のイメージイラスト

Script

Cold Open

シーン1 春風の朝と貼り紙

 四月十一日。火曜日。

 春風のまだ少し冷たい温度が、朝のオフィスの入口で、桜子の耳の先を、少しだけ、固くしていた。

 エレベーターを降りると、受付の横の掲示板に、新しい貼り紙が一枚、増えていた。

第14回 社内LT会
テーマ自由・持ち時間10分・質疑5分
4月11日(火) 12:30-13:30 会議室「桜」
発表者: 中村翔太「海外発の対話型AI『ChatPort』を触ってみた」

 桜子は、貼り紙の前で、数秒、止まった。

 三月の終わり、リリースの日のランチで、翔太が「海外で、ChatPort ってのが、話題らしい」と口にした、あの四文字が、ここでは、もう、公式の登壇スロットの中に並んでいた。

 (中村くん、早い)

 桜子は、鞄の中のメモ帳に、指先で軽く触れて、それから、自分の席に向かった。


Part A

シーン2 LT会の会場

 昼休みの十二時半。会議室「桜」に、エンジニアとデザイナーを中心に、十四、五人が集まった。普段の月次LT会より、少し、人が多い。

 桜子は、いつもの席の、少しだけ後ろ寄りに座った。前の方には、遥、鈴木、早瀬、デザイナーの柏木。翔太はプロジェクターの前で、ノートPCを繋いでいた。

 スライドの一枚目。

海外発の対話型AI 『ChatPort』を触ってみた

中村 翔太 / 2023-04-11

 そのあと、翔太は、画面をブラウザに切り替えた。白い画面に、長方形の入力ボックスがひとつだけ。サービスのロゴが、上の方に、小さく。

「これが、ChatPort の画面です。窓は、この一枚だけ」

 会場で、誰かが、小さく息を吐いた。一枚だけ、という言い方が、なぜか、耳に残った。

 翔太は、続けて、少しだけ、声を張った。

「今日のデモは、全部、公開情報だけで、やります。うちのお客さんの情報も、社内の未公開のコードも、入れません。ここは、最初に、はっきり」

 鈴木が、前の席で、静かに、うなずいた。


シーン3 一枚の窓

昼の社内LT会で、入力ボックスひとつだけの白いチャット画面がプロジェクターに大きく映り、翔太が発表し、後方の席で桜子がメモ帳に書き留めている

「まず、雑談から、いきます」

 翔太は、入力ボックスに打った。

今日の東京、上着いる?一行で

 数秒の間を置いて、画面に、返答が流れた。

朝はまだ少し肌寒く、昼は薄い上着で足りそうです。

 会場から、軽い笑い声。「夕方は上着が欲しくなるね」と、誰かが相槌を打った。

 翔太は、次を打った。

PythonでSQLAlchemyのN+1を避ける3つの代表手法を、
コード例つきで簡潔に

 やや長めの間のあと、箇条書きのリストと、joinedload subqueryload lazy='selectin' のコード片が、流れるように返ってきた。

「……速いな」

「ほんとに、流暢に書く」

「日本語も英語も、混ぜていけるのは、強い」

 会場が、ざわついた。

 翔太は、次を打つ前に、もう一度、断りを入れた。

「ここからは、架空の題材で、いきます。教科書に載っていそうな範囲の、一般的な設定にします。うちのお客さんも、うちのコードも、入れません」

 そう言って、入力ボックスに、こう打った。

架空のBtoB向け問い合わせ管理Webアプリで、
詳細取得APIが外部APIの一時的失敗時に
5xxを返さないためのフォールバック設計を、3案、
それぞれのメリット/デメリットつきで。
公開情報の範囲で

 画面には、三案が、整った表形式で返ってきた。デフォルト値でしのぐ案、キャッシュを添える案、部分表示に落とす案。教科書寄りの語彙で、けれど、輪郭は、それらしく、そこに、あった。

「うわ」

「次の会議に持っていく叩き台の、下書きの下書きが、これで作れちゃう」

「叩き台が、こんな速さで並ぶのは、想像してなかった」

 鈴木が、そっと、腕を組んだ。

 桜子は、二つ目の案の行で、目を止めた。

 十月の夜、二十三時四十八分。翔太が書いて、遥が即時に通して、桜子がタイムラインに フォールバックPR #125 デプロイ完了 と記録した、あの形だった。翔太は、あの夜に自分の手で出した答えを、今日、架空の題材に言い換えて、窓に投げていた。

 あの夜、この形が本番に載るまでに、三十八分かかった。そのあいだ、百二十人が、お問い合わせの詳細を、開けなかった。

 同じ形が、いま、十数秒で、教科書の言葉で、並んでいる。

 桜子の、胃の下のあたりが、少しだけ、縮んだ。

 それから、自分のノートに、静かに、書いた。

- 翔太くんの問いかけに、それらしく、速く、整った形で返ってきた
- 二案目は、#125 の形。あの夜は三十八分。今日は十数秒
- ただし、題材は、架空。うちの現場は、入っていない

 翔太は、締めに、

「最後に、ポエム、やっときます」

 と言って、「春風と、テストが緑になる瞬間について、三行で」と打った。画面には、それっぽい三行詩が、流れた。会場で、笑い声。


Part B

シーン4 遥の「面白いね」、鈴木の「業務へはまだ」

 質疑の時間。

 デザイナーの柏木が、

「これ、ワイヤーの修正指示の下書き、書かせても、いけそう?」

 翔太が、うなずいて、

「文字主体なら、いけると思う。ただ、画像の中の要素を、向こうが正しく“見る”のは、いまはまだ、範囲外のはず」

 営業サポートの席から、手が挙がった。

「顧客への返信文の下書きは?」

「できる。けど、個別のお客さんの固有情報は、向こうに送らない方がいい。入力した内容が、向こう側で保存されるのか、学習に使われるのか。そこが、まだ、はっきりしない」

 遥が、手を挙げずに、前の席から、そのまま、聞いた。

「さっきの三案。合ってるかどうかは、誰が見た?」

「……僕が、見ました。教科書の範囲では、合ってます。うちの本番でどうかは、まだ、見てない」

「うん」

 遥は、一拍、置いてから、

「面白いね」

 と、言った。

 三月のランチの「ふうん」と、同じ温度だった。関心半分、警戒半分、判断は、まだ。

 鈴木が、続けて、

「じゃあ、整理だけ、しておきますね」

 と前置きして、会場に向けて、三本の線を引いた。

「ひとつ。業務で使うかどうかは、社内で、まだ決めていません。顧客情報、本番データ、未公開の資料は、入れない。ここは、いままでの規定どおり、絶対です」

「ふたつ。個人のアカウントで、公開されている知識の範囲で勉強するのは、止めません。ただ、入力したものが向こうでどう扱われるか、まだ確認できていない。だから、出てきたコードを、そのまま業務のコミットに貼るのは、当面、なし」

「みっつ。会社としての運用方針は、法務とセキュリティと一緒に、今月中に叩きを作ります。それまでは、『勉強』の枠で、手を動かして、感触だけ、掴んでおいてください」

 会議室が、しんとした。

 鈴木の言い方は、禁止でもなく、推奨でもなかった。冷静に、いまの温度を、温度として、整理しただけだった。

 翔太が、最後に、

「ガイドラインが出るまでは、僕も、本番のコードには貼りません。勉強は、続けます」

 と言って、LTを、閉じた。

 会場が、軽い拍手で、解散になった。


シーン5 カフェの一杯と、第一回対話

 十八時四十分。

 定時で仕事を切り上げて、桜子は、駅までの坂道の途中にある、小さなカフェに寄った。窓際の二人がけに座って、温かいコーヒーを頼み、鞄からノートPCを出した。

 ChatPort の無料アカウントを、そこで作った。メールアドレスは、仕事のものは避け、個人のものを使う。ユーザー名は、適当な英数字。

 今夜は、あくまで、様子見。長居はしない、と桜子は、コーヒーカップの縁に、そっと、指を触れた。

 白い画面の真ん中で、カーソルが、点滅していた。

 指が、先に、動いた。

未読件数のキャッシュのTTLが10秒のとき、

 そこまで打って、桜子は、止まった。

 それは、教科書の設定ではなかった。サクラサポートの、本番の数字だった。大滝の画面の、上のほうのバッジの、裏側の数字だった。

 桜子は、バックスペースを、一文字ずつ、押した。「10秒」が消え、「TTL」が消え、「未読件数」が消えて、白い窓が、また、空になった。

 昼の会議室で、鈴木の三本の線は、当たり前のことに、聞こえた。ここでは、自分の指で、引き直さないと、線には、ならなかった。便利さの入口は、指先の、すぐそこに、あった。

 桜子は、コーヒーを、一口、飲んだ。

 それから、あらためて、最初の一問を、打った。

Pythonで、1, 3, 5, 7, 9 を順に出すだけの、簡潔なループを

 画面には、

for i in range(1, 10, 2):
    print(i)

 と、ごく自然に、返ってきた。正しい。桜子自身が、書いても、同じ形になる。

 次に、

上のループを少し書き換えたときに、意図しない結果や
エラーになるケースを、3つ、例示して

 と、打ってみる。

 画面には、

1. range(1, 9, 2) に変えると、stop の 9 は含まれず 7 で止まる。
   9 まで出すなら range(1, 10, 2) のままにする
2. range(1, 10, 0) は step=0 のため ValueError
3. range の引数に float を渡すと TypeError

 と、返ってきた。確かに、正しい例示だった。stopが排他的であること、step=0で例外が出ること、floatは受け付けないこと、いずれも、教科書どおりに、並んでいる。

 桜子は、少しだけ、黙って、画面を見ていた。

 >= 18 と > 18 の境界で、赤い画面と、長く、睨み合った日。テストの parametrize で、境界を、指先の癖として、並べられるようになった日。集計窓の境界を、プロレートで、割って扱うことを、覚えた日。

 それらが、桜子の中で、身体のなかの記憶として、残っているのは、自分の指先で、一度、赤い画面に痛い目を見せられて、それでも、前後を読んで、テストを書き直したからだった。

 ChatPort の画面は、正しい。けれど、この画面は、桜子の指先の痛みを、まだ、何も、代わりには、持っていない。

 三月のランチで、心の中だけで言った「流暢、とは、合っている、とは、違う」は、今日、少しだけ、形を変えた。

 (流暢、と、手触り、は、違う)

 桜子は、自分のメモ帳を、開いた。新しい見開きの上に、大きめの字で、

ChatPort 観察ノート

 と、書いた。

 続けて、最初の一行を、書いた。

2023/04/11 観察#001
- 「1, 3, 5, 7, 9」正しい
- 境界の壊れ方の例示、正しい
- ただし、自分の手触りは、まだ、ない
- 出力は、わたしの指先の痛みを、持っていない
- 一度、うちの話を打ちかけて、消した。線は、自分の指で引く

Part C

シーン6 付箋と、観察の柱

 桜子は、目を、少しだけ、閉じた。

 オフィスの、自分のデスク。ディスプレイの右下に、貼りっぱなしの、黄色い付箋。

信じすぎない、を、信じる。

 あの一行は、いま、桜子の視界には、無い。けれど、頭の中では、はっきりと、そこに、あった。

 あの付箋を書いたとき、桜子が信じすぎたくなかったのは、未読件数のバッジだった。数字は、正確そうに見える。けれど、裏側のキャッシュは、少しだけ、古い。大滝は、それが十秒なのか二十秒なのかを知らないまま、自分の付箋とExcelで、信じすぎない運用を、先に、作っていた。

 さっき、打ちかけて消した一行も、その数字だった。

 ChatPort を、信じすぎない理由は、たぶん、少しだけ、別の言葉になる。まだ、桜子は、その言葉を、持っていない。

 代わりに、観察ノートに、項目だけ、立てた。

観察の柱(仮):
- 正しさの範囲はどこまでか(既知 vs 未知)
- 出典は、どこか
- 間違えたとき、どう間違えるか(大げさに?こっそり?)
- 指示の粒度を変えると、出力はどう変わるか
- わたしの指先の痛みと、どこまで交換できるか

 五つ、書いてから、桜子は、少しだけ、自分に笑いそうになった。五つ目の「わたしの指先の痛みと、どこまで交換できるか」は、技術の項目ではなかった。けれど、いまは、書いたままにしておく。

 カップの底に、コーヒーが、残り一口分、揺れていた。

 桜子は、ChatPort の画面を閉じて、ブラウザのタブを、静かに、畳んだ。

 ノートPCの蓋を、そっと、閉じる。

 メモ帳の、新しい見開きの、いちばん下の余白に、桜子は、もう一行、書き足した。

今夜は、ここまで。長く居ない

 窓ガラスの向こうを、通勤帰りの人影が、いくつか、駅の方向へ流れていった。桜子も、そろそろ、その流れに、混ざる時間だった。


Ending

シーン7 入社の日と同じ坂道、冷たい春風

 十九時五十分。

 桜子は、カフェを出て、駅までの坂道の残りを、静かに、下り始めた。

 入社の日の朝、初めてこの坂道を登ってから、もう、一年と少しが、経っていた。今日は、その同じ坂道を、下り側で、歩く。会社から駅へ、毎日、通っている、その道。

 四月の夜、風は、朝よりも、もう少し、冷たくて、桜の木には、花びらの名残と、若い葉が、混ざっていた。街灯の下で、アスファルトに、薄い花びらの影が、いくつも、散らばっている。

 入社の日の桜子は、この坂道で、赤い画面のことなど、まだ、何も、知らなかった。今の桜子は、白い入力ボックスのことを、少しだけ、考えていた。どちらも、画面の中では、たった数行の文字だった。

 桜子は、息を吐いて、ちいさく、声に出した。

「ChatPort」

 発音は、思ったより、舌の上で、冷たかった。

 (速い人は、もう、速く走り始めてる)

 昼のLTの、翔太の指の動きが、まだ、頭の中で、駆けていた。次の週には、翔太は、またひとつ、先に、行く気がした。

 それでも、桜子は、歩くスピードを、変えなかった。

 自分の指先の痛みを、まだ、持っていない窓に、どう向き合うか。それを決めるのは、流暢さの後追いではなく、観察ノートの一行、一行だった。

 桜子は、鞄の中のメモ帳の、新しい見開きの白さを、もう一度、頭の中で、確かめた。

 坂道の途中で、街灯が、ひとつ、瞬いた。

 まだ、答える窓の向こう側には、誰がいるのか、分からなかった。

 けれど、窓を、信じすぎないところから、見始めよう。

 桜子は、駅の改札を、静かに、通り抜けた。