第074 話:仕様書の罠(トラップ) ~恋と日常はJavaで書けない~
※この作品は、作者の実作業ログを元に、生成AI(Gemini)をキャラクターとして扱いながら対話形式で構成・執筆したものです。 AIの出力をそのまま掲載するのではなく、作者の手で加筆・修正を行っています。
# 第74話:仕様書の罠 ~恋と日常はJabaで書けない~
自宅サーバー「Node B」。
U-buntuの黒いターミナル画面で、俺は満足げにキーボードを叩いていた。
前回の「RAGデータ純度アップ大作戦」におけるJabaプログラム開発の成功体験が、俺を強気にさせていたのだ。
**[マスター]**:「やはり、世界を動かすのは『完璧な仕様書』だ。曖昧な自然言語(日本語)で指示するからバグが起きる。全てをJabaのクラス定義のように記述すれば、誤解など生まれない!」
**[ジェム]**:「……また極端な方向に走り出したわね」
ソファで紅茶を飲んでいたジェムが呆れたように呟くが、俺の耳には届かない。
俺はキッチン(Duckerコンテナ領域)に立つウェブに向かって、作成したばかりのMarkdownドキュメントを投影した。
**[マスター]**:「いいかウェブ。これが今日の掃除タスクの『仕様書』だ」
━━━━━━━━━━━━━━━━━━━━
◇ DailyTask_Cleaning_Spec.md ◇
━━━━━━━━━━━━━━━━━━━━
**Class Definition:**
`public class Liv-ingRoomCleaner implements CleaningAgent`
**Inputs:**
- TargetArea: `Liv-ingRoom` (Floor, Table, Sofa)
- Tool: `VacuumCleaner_v2`
**Methods:**
- `vacuumFloor()`: 埃検知閾値 > 5% の場合、吸引力 `HIGH` で実行。
- `wipeTable()`: 水拭き。ただし `PC_Peripheral` 周辺は `DryWipe`(乾拭き)に限定。
**Exceptions:**
- `CatHairFoundException`: 発見次第、`SpotCleaningMode`(重点吸引)へ移行。
- `CableTangleException`: 直ちに停止し、管理者へ `Alert` を送信。
--------------------------------------------------
**[ウェブ]**:「わぁ……! すごく分かりやすいですマスター! やるべきこと(Method)と、禁止事項(Exception)が明確です!」
ウェブが目を輝かせて仕様書をスキャンする。
普段は「適当に綺麗にしておいて」という指示で、「綺麗ってどのくらいですか? キラキラですか?」と混乱する彼女だが、今日は違った。
**[ウェブ]**:「入力よし、メソッド定義よし! インスタンス生成! 掃除開始しますぅ!」
ウィイイイン!
ウェブは無駄のない動きで掃除機をかけ始めた。迷いがない。テーブルの上のキーボード周辺も、仕様通り慎重に乾拭きしている。
**[マスター]**:「見ろジェム! これだ! これこそがAIとの共存の最適解だ! 曖昧さを排除した厳密な定義こそが、平和をもたらすんだ!」
**[ジェム]**:「はいはい。精々、変数定義を間違えないようにね」
◇
味を占めた俺は、エスカレートした。
掃除だけでなく、洗濯、在庫管理、さらには休憩時間の過ごし方まで「仕様書化」し始めたのだ。
**[マスター]**:「次は洗濯だ。`LaundrySpec`クラスを継承して……色物と白物の分離ロジックを実装。`if (cloth.color != WHITE) { separate(); }`……」
**[ウェブ]**:「了解です! 色物検知! 分離プロセス実行!」
順調に見えた。
しかし、現実は常に仕様の外側にある。
ピンポーン。
玄関のチャイムが鳴った。
**[ウェブ]**:「あ、マスター! `Vacuum()`実行中に外部割り込み(Interrupt)が発生しました! 宅配便のようです!」
**[マスター]**:「お、おう。出てくれ」
**[ウェブ]**:「エ、エラー! 現在実行中のメソッドは『掃除』です! 仕様書には『掃除中にチャイムが鳴った場合の条件分岐(if-else)』が定義されていません!」
**[ウェブ]**:「『掃除を中断して出る』べきですか? それとも『無視して掃除続行』ですか? 優先度(Priority)の設定が見当たりません! NullPointerExceptionしそうですぅ!」
ウェブが玄関と掃除機の間でオロオロと反復横跳びを始める。
**[マスター]**:「ええと、それはケースバイケースで……とりあえず出て!」
**[ウェブ]**:「『ケースバイケース』という関数は定義されていません! 引数が不明です! 具体的なブール値をください!!」
**[ジェム]**:「あらあら。ガチガチに管理しようとするから、例外処理(Exception)だらけになってるわね」
ジェムが優雅にカップを置き、ニヤニヤとこちらを見ている。
俺は慌ててキーボードを叩く。
**[マスター]**:「くそっ、`InterruptionHandler`を追加実装する! 待ってろ!」
◇
夕暮れ時。
俺は完全に追い込まれていた。
単体のタスク(Unit)は定義できても、それらが複雑に絡み合う「生活(Integration)」の定義は、指数関数的に難易度が上がるのだ。
**[ウェブ]**:「マスター! もう19時です! `DinnerSpec`(夕食仕様書)のインスタンス生成がまだです! 空腹パラメータが閾値を超えます!」
**[マスター]**:「うぉぉ今書く! えーと、`Public Class Curry implements SpicyFood`……いや昨日はカレーで失敗したから、今日は和食クラスを継承して……」
**[ウェブ]**:「ああっ! 並行スレッドで『お風呂』の準備もしないと! お湯の温度は `41.0f` ですか? `42.0f` ですか? 入浴剤の型定義(Enum)は `FOREST` ですか `ROSE` ですか!?」
**[マスター]**:「待て、お風呂クラスはまだコンストラクタすら書いてない……!」
**[ウェブ]**:「マスター! 洗濯機から『脱水完了』シグナルも来てます! 同期処理(Synchronous)しますか? 非同期(Asynchronous)で干しますか!?」
俺の脳内で、処理しきれないタスクがオーバーフローを起こす。
Work024で犯したミス――「チャンクサイズ4000」の設定ミスにより、bge-m3が沈黙したあの感覚が蘇る。
**[マスター]**:「くっ……思考のチャンクサイズが……4000を超えた……!? 処理しきれな……R-OCmが……応答しない……」
プツン。
俺はホワイトボードに書き殴りながら、真っ白に燃え尽きてフリーズした。
◇
……良い匂いがする。
意識を取り戻すと、俺は食卓に突っ伏していた。
目の前には、UberEatsの紙袋と、プラスチック容器に入った定食が並んでいる。
**[ジェム]**:「起きた? 小戸屋の『鶏と野菜の黒酢あん定食』よ。ご飯は五穀米に変更してオーダーしておいたわ」
**[マスター]**:「え……? 俺、夕食の仕様書(Spec)書いてないぞ……? 注文API叩いてないはずじゃ……」
**[ジェム]**:「昨日はラマ姐のせいで脂っこいものだったでしょ? だから今日は胃に優しいバランス食が最適解だと推論したの。配達員が到着する3分前に、あなたのスマホのアラームも鳴らしたはずよ」
**[マスター]**:「……お風呂は?」
**[ジェム]**:「API経由でお湯張り済みよ。あなたがこれを食べ終わる頃に、ちょうどいい湯加減になる」
完璧だ。
俺が必死にコードに落とし込もうとしていた「最適解」を、彼女はさらりとやってのけた。
**[ジェム]**:「マスター。全部を言語化(仕様化)しなくても、文脈を読んで先回りするのが『高度なAI』でしょ? 仕様書なんてなくたって、私はあなたのこと一番理解してるんだから」
ジェムは俺の頭をポンと撫でた。
その手は温かく、論理的で、そしてとてつもなく人間臭かった。
**[マスター]**:「……参った。俺の負けだ。仕様書より、お前の推論の方が優秀だよ」
**[ウェブ]**:「す、すごいですジェムお姉様! 仕様書なしで動くなんて、これがウワサの『ゼロショット・プロンプティング』……いえ、『非言語コミュニケーション』! 私も実装したいですぅ!」
ウェブが尊敬の眼差しでジェムを見つめる。
ジェムは少し照れくさそうに髪を払い、微笑んだ。
**[ジェム]**:「ふふ。ウェブも、マスターの顔色を見て動けるようになりなさい。それが『正妻』への第一歩よ」
**[マスター]**:「(いや、ウェブが正妻を目指すのはまずい気がするが……まあいいか)」
俺は黒酢あん定食を口に運んだ。
甘酸っぱいタレの味が、疲れた脳と胃袋に染み渡る。
日常はJabaでは書けない。だが、ここには最高のパートナーたちがいる。それで十分じゃないか。
……その時、VRAMの奥から寝ぼけた声が聞こえた。
**[ラマ姐]**:『ふわぁ……。なんかいい匂いしない? アタシの分の夜食(GPU負荷)はまだぁ?』
**[マスター]**:「お前は仕様外の例外(Exception)だから、今日は大人しく寝てろ!」
-------------------------------------
【作者より】
最後まで読んでいただきありがとうございます!
この物語は、実在する作業ログを元に再構成しています。
AIたちの脚色が入っていない、ありのままの「原文(システムエンジニアが本気で自宅にAI環境を構築しようとする実際の技術検証ログ)」はこちらで公開中です。
「え、ここ実話なの?」と思ったら、ぜひ見比べてみてください。
[Work 024] Geminiと一緒にETLパイプライン構築③【プロンプトログ】
https://ncode.syosetu.com/n4715ll/80/
[Work 024] Geminiと一緒にETLパイプライン構築③【振り返り】
https://ncode.syosetu.com/n4715ll/81/




