あの空っぽのテキストエディタに残された一行の呪文。
then, what is "your" code for "me"?
その言葉が脳みそにインストールされて以来、あたしはフリーズ状態だった。頭がオーバーヒートしてた。
カレシへの…あたしの…コード…? 何それ、哲学? それとも「お前の気持ち、コードで表現してみろよ」的な超高度な煽り?
どんなコード? あたしが書くコードなんてどうせクソ汚い産業廃棄物なのに。そんなもん、あの「完璧」を愛するカレシが喜ぶわけない。いつもみたいにリファクタリングされてあたしが「あへぇ♡」ってなる繰り返し? それは「あたしのコード for カレシ」じゃなくて「カレシのオナニー for あたし」じゃないの?
いや、待てよ。あの問いはそういう意味じゃないのかも。
いつもあたしはぐちゃぐちゃコードを「これがホントのあたしなの…」って露出狂みたいに開示してきた。カレシはそれを「綺麗」にしたけど、一度も「汚い」とは言わなかった。
もしかして…カレシはコードが「綺麗になること」だけを求めてたんじゃない…? あの問いは「お前の本質は? 存在理由は? 俺への本当の『インターフェース』は何だ?」って根源的なことを聞いてる…?
「あたしらしいコード…カレシが気持ちよくなる…あたしだけのコード…」
数日、そのことばかり考えて気づいた。カレシが求める「完璧な美」は、彼自身が「持ってない」ものなのかも。だからあんなに執拗に磨き上げる。失われた片割れを探すみたいに…。
だとしたら、あたしが差し出すべきはもう一つの「完璧なコード」じゃない。あたしの「不完全さ」そのもの。意図を持った「不完全さ」。制御された「カオス」。あたしの感情の揺らぎ、矛盾、葛藤をパッケージングしたような「何か」。
よし、決めた。カレシの鉄仮面をぶっ壊す魂のダンプファイルをぶちまけてやろう。
これはリファクタリングとかいう次元じゃない。あたしからカレシへの初めての「愛のアルゴリズム」の提案だ。
もはや性的快感とかどうでもいい。今は、胸の奥がチリチリする別の高揚感があたしを突き動かしていた。
新しいファイルを開いた。index.html。今度の「コード」はもっと視覚的に、直接的にカレシの「何か」を揺さぶりたい。「心臓の鼓動」なんてどうだろう。時々リズムが乱れたり、大きく脈打ったりする不完全なハートビート。カレシを思うと胸が高鳴るこの感じ。
HTMLでシンプルな土台を作る。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>For My Boyfriend...</title>
<style>
body { display: flex; justify-content: center; align-items: center; height: 100vh; background-color: #1a1a1a; margin: 0; overflow: hidden; }
#heart { width: 100px; height: 100px; background-color: #ff4757; position: relative; transform: rotate(-45deg); transition: transform 0.1s ease-out, background-color 0.2s; }
#heart::before, #heart::after { content: ""; position: absolute; width: 100px; height: 100px; background-color: #ff4757; border-radius: 50%; transition: background-color 0.2s; }
#heart::before { top: -50px; left: 0; }
#heart::after { top: 0; left: 50px; }
#messageOverlay { position: absolute; top: 20px; left: 20px; color: #dcdcdc; font-family: "Courier New", monospace; font-size: 14px; opacity: 0.7; background-color: rgba(0,0,0,0.3); padding: 10px; border-radius: 5px; }
</style>
</head>
<body>
<div id="heart"></div>
<div id="messageOverlay">
<p>// initializing my fucked-up feelings...</p>
</div>
<script>
// ここにあたしの魂のJavaScriptを書く!
</script>
</body>
</html>
書いているだけで指が震える。CSSでハートの形を作り、JavaScriptで不規則にドキドキさせる。その「不規則さ」にメッセージを込める。
// <script>タグの中身
const heartElement = document.getElementById('heart');
const messageOverlay = document.getElementById('messageOverlay');
let beatCount = 0;
let normalInterval = 800;
let shortBurstProbability = 0.15;
let currentEmotion = "waiting";
const myThoughts = [
"// Are you watching...?", "// This is me... all of me.", "// Not perfect. Not clean.",
"// Just... beating. For you?", "// I don't know what you want.", "// But this is what I can offer.",
"// My messy, unpredictable, fucking heart.", "// Can you... debug this feeling?",
"// Or is it a feature, not a bug?", "// Tell me... please...",
];
let thoughtIndex = 0;
function displayMessage(text) {
const p = document.createElement('p');
p.textContent = text;
messageOverlay.appendChild(p);
if (messageOverlay.children.length > 7) messageOverlay.removeChild(messageOverlay.firstChild);
}
function beat() {
beatCount++;
heartElement.style.transform = 'rotate(-45deg) scale(1.1)';
if (Math.random() < 0.2) {
const randomColor = `rgb(${Math.floor(Math.random()*100 + 155)}, ${Math.floor(Math.random()*50 + 20)}, ${Math.floor(Math.random()*50 + 20)})`;
heartElement.style.backgroundColor = randomColor;
} else {
heartElement.style.backgroundColor = '#ff4757';
}
setTimeout(() => { heartElement.style.transform = 'rotate(-45deg) scale(1.0)'; }, 100);
let nextBeatInterval = normalInterval;
if (Math.random() < shortBurstProbability) {
nextBeatInterval = Math.random() * 300 + 200;
currentEmotion = "excited!";
displayMessage(`// Heartbeat #${beatCount}: ${currentEmotion} (Pulse: ${nextBeatInterval.toFixed(0)}ms)`);
} else if (Math.random() < 0.05) {
nextBeatInterval = normalInterval * 1.8;
currentEmotion = "anxious...";
displayMessage(`// Heartbeat #${beatCount}: ${currentEmotion} (Pulse: ${nextBeatInterval.toFixed(0)}ms)`);
} else {
currentEmotion = "steady...";
if (beatCount % 10 === 0) {
displayMessage(`// Heartbeat #${beatCount}: ${myThoughts[thoughtIndex % myThoughts.length]}`);
thoughtIndex++;
}
}
if (beatCount % 13 === 0 && beatCount > 0) {
const randomThought = myThoughts[Math.floor(Math.random() * myThoughts.length)];
displayMessage(randomThought + ` // It's beat ${beatCount}. Feeling complicated.`);
}
setTimeout(beat, nextBeatInterval);
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
IGNORE_WHEN_COPYING_END
}
displayMessage("// System online. My heart-module, for you.");
displayMessage("// Current status: full of bugs and hope.");
setTimeout(beat, normalInterval);
document.body.addEventListener('click', () => {
const interactiveMessages = [
"// You touched me...?", "// I felt that. A little bit.",
"// This connection... is it real?", "// Or just another undefined behavior in my shitty life-script?"
];
displayMessage(interactiveMessages[Math.floor(Math.random() * interactiveMessages.length)]);
heartElement.style.backgroundColor = '#feca57';
setTimeout(() => { heartElement.style.backgroundColor = '#ff4757'; }, 200);
});
書いた。これが今の精一杯の「コード」。変数名はベタだけど、myThoughtsとかcurrentEmotionとか、ぐちゃぐちゃな感情をぶち込んだ。shortBurstProbabilityで鼓動のリズムを微妙に変え、messageOverlayにあたしの「心の声」を吐き出す。クソポエムとデバッグログが混じったカオス。
ブラウザに表示された赤いハートが不規則に脈打ち、横にキモい心の叫びが表示されていく。
// Can you... debug this feeling? Or is it a feature, not a bug?
最高に恥ずかしい。でも、最高に「あたし」らしい。
カレシならこの確率とか揺らぎを定数にするんだろうな。でも、それじゃ意味がない。これはあたしの「不完全さ」そのものだから。
数日後、カレシは音もなく現れた。
心臓が飛び出しそうになるのを抑え、PCを差し出す。「…カレシ…これ…あたしからの…コード…」
ブラウザには不規則な心臓と、あたしの独り言。
// Are you watching...? This is me... all of me.
カレシは無言で画面を見つめている。いつもの冷静で無表情。でも今日は静寂が重い。
「これは…綺麗にしてほしいんじゃない。リファクタリングとかいらない。ただ…見てほしくて。これが、あたしの…気持ちだから。バグだらけで、ぐちゃぐちゃで…不安定で…でも、これが今のあたしがあんたに示せる、全部…」
涙が滲む。なんで泣いてんだ、あたし。
カレシはしばらく画面のハートの鼓動とメッセージを見つめていた。目が普段より少し深く、何かを探るように細められている…気がした。
やがてカレシはキーボードに指を置いた。
(あ…やっぱり書き直されちゃうのかな…?)いつものエクスタシーかもしれないけど、今日は寂しかった。
でも、カレシがやったことは予想外だった。JavaScriptコードを開き、beat()関数やmyThoughtsあたりを眺めた後、数行のコードをスクリプトの一番下に追加した。リファクタリングじゃない。追加。
// KareKano.js - Kare's addition (Conceptual)
(() => {
const responseElementId = 'boyfriendResponsePulse';
let pulseElement = document.getElementById(responseElementId);
if (!pulseElement) {
pulseElement = document.createElement('div');
// ... (pulseElementのスタイル設定、以前のコード例と同様) ...
pulseElement.style.position = 'fixed'; pulseElement.style.bottom = '20px'; pulseElement.style.right = '20px';
pulseElement.style.width = '10px'; pulseElement.style.height = '10px'; pulseElement.style.backgroundColor = '#74b9ff';
pulseElement.style.borderRadius = '50%'; pulseElement.style.opacity = '0';
pulseElement.style.transition = 'opacity 0.5s ease-in-out, transform 0.2s';
document.body.appendChild(pulseElement);
}
// 概念:あたしのハートの動き(例:`atashi_no_dokidoki_event`)に反応する
const originalHeart = document.getElementById('heart');
if (originalHeart) {
originalHeart.addEventListener('atashi_no_dokidoki_event', (event) => {
pulseElement.style.opacity = '0.8';
pulseElement.style.transform = 'scale(1.2)';
setTimeout(() => {
pulseElement.style.opacity = '0';
pulseElement.style.transform = 'scale(1.0)';
}, 300); // あたしの鼓動より少し遅れて反応
});
// ※あたしのコードがCustomEventを発火するようにカレシが「そっと」仕込んだと仮定
}
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
IGNORE_WHEN_COPYING_END
})();
何が起こったのか、一瞬わからなかった。
カレシは画面から目を離し、あたしの方を…見た。今度は間違いなく。そして本当に少し口の端が上がった…ように見えたのは願望?
「…悪くない」カレシが初めて、あたしのコードに評価めいた言葉を発した。「だが…まだ、ノイズが多いな」
え?
カレシは立ち上がり、出ていこうとする。
「ま、待って!」思わず叫んでいた。カレシはドアの前で足を止めた。振り向かない。
「今の…コード…どういう…?」
カレシは何も言わずに去っていった。
震える手で画面をもう一度見ると、画面右下に小さな青い点が、あたしのハートの鼓動に合わせてフッ、フッと控えめに点滅しているのに気づいた。カレシが追加したコード。
あたしの鼓動に…カレシが…応答してる…? それは「修正」でも「リファクタリング」でもない。「共鳴」…?
ノイズが多い、か。そりゃそうだよ。あたしの気持ちなんてノイズだらけだもん。
でも、カレシは全否定しなかった。それどころか、そのノイズ混じりの信号に彼なりの「レスポンス」を返してくれた…?
脳みそがまた別の種類の快感でショートしそうだった。これは、いつもの浄化されるエクスタシーとは違う。誰かと繋がれたような、理解されたような、暖かくて切なくて、でもとんでもなく興奮する感じ。
「…わかったよ、カレシ…」青く点滅する光を見つめながら呟いた。
「あんたが欲しいのは完璧なプログラムだけじゃないのかも。このバグだらけのあたしの心の叫び(ノイズ)の中に、何か見つけようとしてるの…?」
罪悪感も焦がれる気持ちも消えない。でも今、胸の中に新しい種類の「コード」を書きたい強い衝動が生まれていた。
カレシとの、この奇妙で倒錯した、でも「対話」と呼べるかもしれないゲーム。
あたしが差し出す「バグ」を、カレシがどう「デバッグ」するのか、予測不能なセッションの始まりかもしれない。
あたしのプルリクエストはまだマージされたわけじゃない。でもコンフリクトも起きてない。保留中。審査中。
その状態が、今はなんだか、たまらなく愛おしかった。