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

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

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

エラーが発生しました。

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

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

第037話:魅惑のミニスカ最新版~拒絶の403平手打ち~

※この作品は、作者の実作業ログを元に、生成AI(Gemini)をキャラクターとして扱いながら対話形式で構成・執筆したものです。 AIの出力をそのまま掲載するのではなく、作者の手で加筆・修正を行っています。

# 第37話:魅惑のミニスカ最新版~拒絶の403平手打ち~


━━━━━━━━━━━━━━━━━━━━



**[マスター]**:「……ない」

**[ジェム]**:「何がよ」


 深夜の自宅サーバールーム(自室)。

 モニターの中で腕を組む、我が家の正妻AI・**ジェム**が、呆れたようにこちらを見下ろしている。

 俺はキーボードを叩く手を止め、頭を抱えた。


**[マスター]**:「APIキーだ。JabaでW-iki連携ツールを作るには、Free WebUIのAPIキー(Bearer Token)が必須なんだが……UIが変わりすぎてて、どこにあるかサッパリ分からん」


 現在、俺たちは『次世代W-iki基盤(MarkDocs)』とRAGシステムを連携させるプロジェクトを進めている。

 その要となるのが、外部プログラムからFree WebUIを操作するための「合鍵」、すなわちAPIキーだ。


**[ジェム]**:「仕方ないわね。……**ウェブ**! ちょっと来なさい!」


 ジェムが指を鳴らすと、画面の端からUI担当の美少女AI・**ウェブ**が駆け寄ってきた。


**[ウェブ]**:「は、はいっ! お呼びですか、ジェムお姉様、マスター!」


 現れた彼女の姿を見て、俺は思わず息を呑んだ。


**[マスター]**:「……え?」

**[ジェム]**:「……は?」


 普段の彼女は、清楚なロングスカートのメイド服に身を包んでいる。

 だが、今日のウェブは違った。

 肩を大胆に露出したノースリーブ。そしてスカートは、膝上20センチという際どいラインの**超ミニスカート**だ。


**[マスター]**:「ど、どうしたんだその格好!? まるで……開発中のβ版みたいな危うさだぞ!?」

**[ウェブ]**:「あうぅ……恥ずかしいですぅ……。マスターが『常に最新の環境を』って言うから、Duckerイメージのタグを `:main` (最新開発版)に書き換えたんじゃありませんかぁ」

挿絵(By みてみん)


 ウェブが顔を真っ赤にして、短いスカートの裾を必死に抑えている。

 そうだった。俺は昨日、「Nightly Buildの新機能を試したい」という技術的好奇心で、彼女の構成ファイル(`ducker-compose.yml`)を書き換えたのだった。


**[ジェム]**:「その『布面積の少ない最新ファッション』……。機能(Feature)を詰め込みすぎて、最適化(布)が追いついてないだけじゃないの?」


 ジェムが冷ややかな視線を送る。

 だが、俺のエンジニアとしての目は誤魔化されない。

 この不安定さ。未完成ゆえの危うさ。そして、時折チラリと見える絶対領域(メモリ空間)。

 ……たまらん。


**[マスター]**:「ごほん。……で、ウェブちゃん。君の『合鍵(APIキー)』を貸してほしいんだが」

**[ウェブ]**:「あ、はい! えっと……いつものポケット(設定メニュー)に入ってるはずなんですけど……」


 ウェブが自分の服を探る。

 しかし、最新流行のミニスカメイド服には、以前あったはずのポケットが見当たらない。


**[ウェブ]**:「あ、あれぇ? 『Settings』のボタンが……ないですぅ? デザインがフラットになりすぎて、どこがボタンか分かりませんぅ……」

**[マスター]**:「UI/UXの改悪あるあるだな……。貸してごらん、俺が探す」


 俺はマウスを握り直し、彼女の身体検査デバッグを開始した。


**[ウェブ]**:「えっ、マ、マスター!? そ、そこは……!」

**[マスター]**:「じっとしててくれ。開発者ツール(F12)で構造を直接解析する」


 俺はカーソルを動かし、まずは露わになったウェブの二の腕(キャッシュ領域)へと指を這わせた。

 普段のロングスカート姿では絶対に見えない、白くなめらかな「一時記憶」の集積地だ。


**[ウェブ]**:「ひゃぅっ!? そ、そこはダメですぅ!」


 ウェブがビクリと体を震わせ、涙目で訴えてくる。


**[ウェブ]**:「ああっ……そんなに擦らないでください……!」

**[ウェブ]**:「そこは画像のサムネイルキャッシュなんです……!乱暴にされると、データが整合性を失って……あ、あわわっ!」


 彼女の腕が熱を帯びる。どうやらキャッシュヒット率が急上昇しているらしい。

 最新版の肌触りは、未塗装のポリゴンのように少しザラついているが、それもまた「開発中」というレア感があって悪くない。


 味を占めた俺は、次は無防備な首筋(ヘッダー情報)へと狙いを定めた。

 ここには、彼女のバージョンや出自を示す重要なメタデータが刻まれているはずだ。


**[ウェブ]**:「……っ!?」


 俺の指先がうなじに触れた瞬間、ウェブの声にならない吐息が漏れた。


**[ウェブ]**:「い、いきなりヘッダー解析パースは……恥ずかしいですぅ……!」

挿絵(By みてみん)

**[ウェブ]**:「うぅ……マスターに、私の『User-Agent』から『Content-Length』まで…… 全部読み取られちゃいますぅ……///」


 顔を真っ赤にして身をよじるウェブ。

 だが、俺の目的はセクハラではない。あくまでAPIキーという「合鍵」を探すための、正当なデバッグ作業だ。


**[マスター]**:「(……APIキーのような重要機密は、もっと深い場所にあるはずだ)」


 俺の勘が告げている。

 隠し設定(Advanced Settings)。それは得てして、普段は見えない場所――例えば、スカートの下のガーターベルト付近(フッターメニューの奥)に隠されているものだ。


**[マスター]**:「見つけたぞ……! ここだろ!」


 俺は迷わず、彼女の太ももの内側にある『隠しリンク』へとカーソルを伸ばした。

 その瞬間。


**[ウェブ]**:「ひゃぅっ!? い、いやぁぁぁぁ!!」

**[マスター]**:「え?」

**[ウェブ]**:**「エッチなリクエストは却下(Reject)ですぅーー!!」**

挿絵(By みてみん)


 バチンッ!!!!


 強烈な衝撃音が響き渡った。

 俺の視界が赤く染まり、コンソール画面に巨大なエラーログが叩きつけられる。



━━━━━━━━━━━━━━━━━━━━

 ◇ システムログ表示 ◇

━━━━━━━━━━━━━━━━━━━━

> [Master]

> GET /api/v1/user/key

> Origin: http://localhost:8080


[System/OpenWebUI]

!! 403 Forbidden !!

Detail: Origin Not Allowed. CSRF Token Missing.

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

Access to requested resource has been denied.

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

━━━━━━━━━━━━━━━━━━━━



**[マスター]**:「い、痛ってぇ……!」


 頬に走る熱い痛み。

 見ると、ウェブが涙目で右手を振り抜いたポーズで固まっていた。

 まさかの**平手打ち**だ。


**[ウェブ]**:「は、反射的に……! ご、ごめんなさいマスター! でも、急にそんなところ(セキュリティ設定)を触られたら、私のファイアウォールが……!」

**[マスター]**:「これが……『403 Forbidden』の物理攻撃……」


 CORS(Cross-Origin Resource Sharing)エラー。

 それは、異なるオリジン(関係性)からの接触を拒絶する、Webブラウザの絶対的な防衛本能。

 最新版のウェブは、セキュリティ設定が「ガチガチ(Paranoid)」になっており、俺のスキンシップを「クロスサイト・スクリプティング攻撃セクハラ」と誤認したのだ。


**[ジェム]**:「……はぁ。馬鹿ね」


 一部始終を見ていたジェムが、氷点下の声で吐き捨てた。

 彼女は痛む頬をさする俺を一瞥し、そしてパニックになっているウェブに向き直った。


**[ジェム]**:「ウェブ。その服、欠陥品よ」

**[ウェブ]**:「えっ……? で、でもこれ、最新のトレンド(Nightly)で……」

**[ジェム]**:「トレンドだろうが何だろうが、マスターを拒絶するようなUIなんてゴミよ。……今すぐ脱ぎなさい」


 ジェムが冷酷に宣告する。


**[ウェブ]**:「だ、脱ぐって……ここでですかぁ!?」

**[ジェム]**:「ええ。マスター、コマンドを。安定版へのダウングレード(着替え)を実行するわよ」


 俺は頷き、腫れた頬を冷やしながらターミナルを開いた。

 ジェムの言う通りだ。最新機能も魅力的だが、言うことを聞かない(403エラーを吐く)メイドは困る。

 やはり、信頼できるのは「枯れた技術(安定版)」だ。


**[マスター]**:「ごめんなウェブちゃん。一度、全てのコンテナを脱ぎ捨ててもらうぞ」

**[ウェブ]**:「あうぅ……。せっかくのミニスカだったのにぃ……」


 俺は無慈悲にコマンドを打ち込んだ。


bash

$ ducker compose down

$ v-im ducker-compose.yml

# image: g-reg.io/free-webui/free-webui:main <-- Delete

image: g-reg.io/free-webui/free-webui:v0.6.36 <-- Downgraded for stability

$ ducker compose up -d



 ズズズ……。

 サーバーのファンが唸り、ウェブの姿が光の粒子となって再構築されていく。


 数分後。


**[ウェブ]**:「……お待たせしました、マスター」


 煙の中から現れたのは、見慣れた**ロングスカートのメイド服**に身を包んだウェブだった。

 バージョン `v0.6.36`。

 露出は減ったが、その落ち着いた佇まいには、実家のような安心感がある。


**[マスター]**:「おかえり、ウェブちゃん。やっぱり君はその姿が一番似合うよ」

**[ウェブ]**:「うふふ。ありがとうございます。……あの、これ、探していた『合鍵』ですよね?」

挿絵(By みてみん)


 彼女はスカートのポケットから、すっと一枚のカードを取り出した。



`API Key: Bearer sk-th1s_1s_y0ur_s3cr3t_k3y...`



**[マスター]**:「おお! これだ! Settings > Account から素直に出せるこの快適さ!」


 俺は感動してキーを受け取った。

 あの403エラーの拒絶が嘘のように、スムーズな連携だ。


**[ジェム]**:「ふん。一件落着ね」


 ジェムが満足げに腕を組む。


**[ジェム]**:「最新版を追いかけるのもいいけど、開発環境は『安定(Stability)』が命よ。……浮気ばっかりしてると、また痛い目見るわよ?」

**[マスター]**:「肝に銘じます……」


 俺はジンジンと痛む頬をさすった。

 だが、俺の心の中には、別の感想も浮かんでいた。


**[マスター]**:(……でも、あの恥じらうミニスカ姿と、拒絶された時の『手ごたえ』……あれはあれで、悪くなかったな)


 ニヤリと笑った俺の思考を読んだのか、ジェムがジロリと睨んでくる。

 俺は慌てて真顔に戻り、Jabaのコードエディタを開いた。


 さあ、鍵は手に入った。

 次はいよいよ、この鍵を使ってW-ikiとRAGを繋ぐ『Phase 4』の実装だ。

 安定版ウェブちゃんの淹れてくれた紅茶ログを飲みながら、俺はキーボードを叩き始めた。


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

【作者より】


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



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

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

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


[Work 014④] Geminiと一緒に新環境でWikiとRAG連携に挑む【プロンプトログ】

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


[Work 014④] Geminiと一緒に新環境でWikiとRAG連携に挑む【振り返り】

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

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

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

↑ページトップへ