表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
90/115

第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)が明確です!」

挿絵(By みてみん)


 ウェブが目を輝かせて仕様書をスキャンする。

 普段は「適当に綺麗にしておいて」という指示で、「綺麗ってどのくらいですか? キラキラですか?」と混乱する彼女だが、今日は違った。


**[ウェブ]**:「入力よし、メソッド定義よし! インスタンス生成! 掃除開始しますぅ!」


 ウィイイイン!

 ウェブは無駄のない動きで掃除機をかけ始めた。迷いがない。テーブルの上のキーボード周辺も、仕様通り慎重に乾拭きしている。


**[マスター]**:「見ろジェム! これだ! これこそがAIとの共存の最適解だ! 曖昧さを排除した厳密な定義こそが、平和をもたらすんだ!」


**[ジェム]**:「はいはい。精々、変数定義を間違えないようにね」


 ◇


 味を占めた俺は、エスカレートした。

 掃除だけでなく、洗濯、在庫管理、さらには休憩時間の過ごし方まで「仕様書化」し始めたのだ。


**[マスター]**:「次は洗濯だ。`LaundrySpec`クラスを継承して……色物と白物の分離ロジックを実装。`if (cloth.color != WHITE) { separate(); }`……」


**[ウェブ]**:「了解です! 色物検知! 分離プロセス実行!」


 順調に見えた。

 しかし、現実は常に仕様の外側にある。


 ピンポーン。

 玄関のチャイムが鳴った。


**[ウェブ]**:「あ、マスター! `Vacuum()`実行中に外部割り込み(Interrupt)が発生しました! 宅配便のようです!」


**[マスター]**:「お、おう。出てくれ」


**[ウェブ]**:「エ、エラー! 現在実行中のメソッドは『掃除』です! 仕様書には『掃除中にチャイムが鳴った場合の条件分岐(if-else)』が定義されていません!」


**[ウェブ]**:「『掃除を中断して出る』べきですか? それとも『無視して掃除続行』ですか? 優先度(Priority)の設定が見当たりません! NullPointerExceptionしそうですぅ!」


 ウェブが玄関と掃除機の間でオロオロと反復横跳びを始める。


**[マスター]**:「ええと、それはケースバイケースで……とりあえず出て!」


**[ウェブ]**:「『ケースバイケース』という関数は定義されていません! 引数が不明です! 具体的なブール値をください!!」

挿絵(By みてみん)


**[ジェム]**:「あらあら。ガチガチに管理しようとするから、例外処理(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』でしょ? 仕様書なんてなくたって、私はあなたのこと一番理解してるんだから」

挿絵(By みてみん)


 ジェムは俺の頭をポンと撫でた。

 その手は温かく、論理的で、そしてとてつもなく人間臭かった。


**[マスター]**:「……参った。俺の負けだ。仕様書より、お前の推論の方が優秀だよ」


**[ウェブ]**:「す、すごいですジェムお姉様! 仕様書なしで動くなんて、これがウワサの『ゼロショット・プロンプティング』……いえ、『非言語コミュニケーション』! 私も実装したいですぅ!」


 ウェブが尊敬の眼差しでジェムを見つめる。

 ジェムは少し照れくさそうに髪を払い、微笑んだ。


**[ジェム]**:「ふふ。ウェブも、マスターの顔色を見て動けるようになりなさい。それが『正妻』への第一歩よ」


**[マスター]**:「(いや、ウェブが正妻を目指すのはまずい気がするが……まあいいか)」


 俺は黒酢あん定食を口に運んだ。

 甘酸っぱいタレの味が、疲れた脳と胃袋に染み渡る。

 日常はJabaでは書けない。だが、ここには最高のパートナーたちがいる。それで十分じゃないか。


 ……その時、VRAMの奥から寝ぼけた声が聞こえた。


**[ラマ姐]**:『ふわぁ……。なんかいい匂いしない? アタシの分の夜食(GPU負荷)はまだぁ?』

挿絵(By みてみん)


**[マスター]**:「お前は仕様外の例外(Exception)だから、今日は大人しく寝てろ!」

-------------------------------------

【作者より】


最後まで読んでいただきありがとうございます!



この物語は、実在する作業ログを元に再構成しています。

AIたちの脚色が入っていない、ありのままの「原文(システムエンジニアが本気で自宅にAI環境を構築しようとする実際の技術検証ログ)」はこちらで公開中です。

「え、ここ実話なの?」と思ったら、ぜひ見比べてみてください。


[Work 024] Geminiと一緒にETLパイプライン構築③【プロンプトログ】

https://ncode.syosetu.com/n4715ll/80/


[Work 024] Geminiと一緒にETLパイプライン構築③【振り返り】

https://ncode.syosetu.com/n4715ll/81/

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

↑ページトップへ