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 一枚の窓

「まず、雑談から、いきます」
翔太は、入力ボックスに打った。
今日の東京、上着いる?一行で数秒の間を置いて、画面に、返答が流れた。
朝はまだ少し肌寒く、昼は薄い上着で足りそうです。会場から、軽い笑い声。「夕方は上着が欲しくなるね」と、誰かが相槌を打った。
翔太は、次を打った。
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の、翔太の指の動きが、まだ、頭の中で、駆けていた。次の週には、翔太は、またひとつ、先に、行く気がした。
それでも、桜子は、歩くスピードを、変えなかった。
自分の指先の痛みを、まだ、持っていない窓に、どう向き合うか。それを決めるのは、流暢さの後追いではなく、観察ノートの一行、一行だった。
桜子は、鞄の中のメモ帳の、新しい見開きの白さを、もう一度、頭の中で、確かめた。
坂道の途中で、街灯が、ひとつ、瞬いた。
まだ、答える窓の向こう側には、誰がいるのか、分からなかった。
けれど、窓を、信じすぎないところから、見始めよう。
桜子は、駅の改札を、静かに、通り抜けた。
