わかってる。こんなの、絶対おかしいってことくらい。フツーじゃない、ってやつ? でも、ダメなんだ。やめられない。あの瞬間が、あたしの全部を、ぐっちゃぐちゃにかき混ぜて、脳みそを直接シェイクされてるみたいに、とろけさせちゃうんだから。
例えるなら、普段は清楚系OLを演じる超絶汚部屋の住人が、ゴミとヨレヨレパンツまみれの部屋、シンクの謎物体Xを、大好きなカレシに涙目で「…見て…これが、ホントのあたしなの…キモイでしょ…でも、全部なの…」とカミングアウトする瞬間。あの羞恥心と罪悪感、そして微かな期待感が混じるカオスな感情。
あたしにとっての「汚部屋」であり「緑色の謎物体X」は、あたしが書くプログラムのソースコード。
もうね、自分でも目眩がするくらい、ひどい。スパゲッティ? そんな生易しいもんじゃない。下水管に詰まったヘドロと髪の毛と虫の死骸が絡み合った代物。専門家が見たら卒倒するレベル。変数名はaとかhogeとか、良くてtemp1, temp2のオンパレード。関数? 全部メインにベタ書きじゃコラァ! コメントなんて書くわけないじゃん、未来のあたしが苦しむのは、それはそれでちょっとウケるし。
で、そんな呪物レベルのクソコードを、あたしはカレシに見せる。
カレシは、いつも無言。隣に座って、あたしが差し出したノートPCの画面を、じーっと見つめるだけ。感情が欠落しているみたい。でも、わかる。カレシの指先が、キーボードに触れる直前、ほんの僅かに、ピクって震えるのを。それは、憐憫か、それとも…期待か。
「…カレシ…これ、昨日、仕事で書いたやつ…またクレームきてさ…なんか、時々、変なデータが混じるって…もう、わかんない…」
おずおずと、Pythonコードの断片を指差す。顧客リストから特定条件のユーザーを抽出して表示するだけの、本来なら3分で書けるクソ簡単な処理のはずだった。
でも、あたしが書いたのはこれだ。
これが問題のクソコード by あたし
user_data_list = [{"name":"A子", "age":20, "city":"Tokyo", "active":True, "point":100},
{"name":"B郎", "age":30, "city":"Osaka", "active":False, "point":0},
{"name":"C美", "age":25, "city":"Tokyo", "active":True, "point":500},
{"name":"D子", "age":22, "city":"Kyoto", "active":True, "point":20}, # あれ?京都…
{"name":"E介", "age":28, "city":"Tokyo", "active":True, "point":0},
{"name":"F香", "age":None, "city":"Tokyo", "active":True, "point":1000} # 年齢がNone…
]
result_names = []
for i in range(len(user_data_list)): # まず、インデックスで回す時点でアウトらしい
temp_user = user_data_list[i]
if temp_user["city"] == "Tokyo": # ネスト!ネスト!地獄のネスト!
if temp_user["active"] == True: # 3항 연산자? 知るか!
# ↓ここの条件分岐がなんかおかしいってクレームきた
if temp_user["age"] != None and temp_user["age"] < 26: # Noneチェックが甘い、って言われても…
result_names.append(temp_user["name"] + "様はピチピチのヤング!")
elif temp_user["age"] == None: # こういうの、どう扱えばいいかわかんない…
result_names.append(temp_user["name"] + "様(年齢不詳ミステリアス枠)")
for n in result_names:
print(n)
書いてるそばから、アソコが、じわって湿ってくるのがわかる。キモい? うん、あたしもそう思う。でも、このどうしようもない汚物が、カレシの指先で生まれ変わる――その過程が、あたしを狂わせるんだ。
カレシは、何も言わず、その綺麗な指をキーボードに置く。魔法が始まる。
temp_userがuserに変わり、三重ネストが手品みたいに解体される。if文の条件式がシュッ、シュッと短く明確に。途方に暮れたageがNoneの場合の処理も、getメソッドとかいうのでスマートに解決。
カレシの華麗なるリファクタリング(途中経過のイメージ)
TARGET_CITY = "Tokyo"
TARGET_STATUS_ACTIVE = True
AGE_THRESHOLD_UPPER_EXCLUSIVE = 26
def extract_young_active_tokyo_users(users):
"""
指定されたユーザーリストから、東京在住でアクティブ、
かつ指定年齢未満のユーザー名を抽出する。
年齢が不明なユーザーは「年齢不詳」として扱う。
"""
extracted_names = []
for user in users:
is_tokyo_resident = (user.get("city") == TARGET_CITY)
is_active_user = (user.get("active") is TARGET_STATUS_ACTIVE)
user_age = user.get("age")
if is_tokyo_resident and is_active_user:
if user_age is None:
extracted_names.append(f"{user.get('name', '不明なユーザー')}様(年齢不祥ミステリアス枠)")
elif isinstance(user_age, (int, float)) and user_age < AGE_THRESHOLD_UPPER_EXCLUSIVE: # 型チェックも追加!
extracted_names.append(f"{user.get('name', '不明なユーザー')}様はピチピチのヤング!")
return extracted_names
さっきのデータで実行
user_data_list = [...]
final_results = extract_young_active_tokyo_users(user_data_list)
for name in final_results:
print(name)
「あ…あっ…んんっ!」
思わず、声が漏れる。見てるだけで体中の細胞が泡立ち、背筋を電流が駆け上る。カレシのタイプ音、カタカタカタ…ターン!のリズムが、鼓膜を愛撫して脳の奥の変なスイッチを押す。
汚くて意味不明だったコードが、整理され、論理的で、美しく、完璧なものに近づいていく。あたしの汚れた魂が浄化され、あたし自身も価値のある人間になっていくような、そんな錯覚。
「はぁっ…はぁっ…カレシぃ…すご…いぃ…」
息も絶え絶えにあえぐあたしを無視し、カレシは作業を続ける。最後には、あのコードは信じられないくらいシンプルで、エレガントで、バグのない芸術品に変わっていた。
「…できた」
カレシが呟く。それが「イってよし」の合図。
「あ゛あ゛あ゛あ゛ーーーーーーッ!!!」
強烈なエクスタシーの波に飲み込まれる。脳みそが真っ白になり、思考は吹っ飛び、純粋な快感だけが全身を支配する。どんなセックスよりも、ずっと、ずっと、キモチイイ…。あたしの「存在」そのものが肯定され、磨かれ、輝きを放つ瞬間だから。少なくとも、あたしはそう「感じて」しまう。
…でも、最近、少し違和感を覚え始めてる。
あの快感は麻薬だ。あたしはカレシに、もっと汚くて複雑で絶望的なクソコードを差し出すようになった。彼はそれを完璧な芸術品に変え、あたしは天にも昇る快感を味わう。
でもある日、カレシが完璧にリファクタリングしたJavaScriptを眺めながら思った。インデント一文字まで計算され尽くした美しさ。変数名は詩的で、関数の分割は神の創造のよう。
その完璧すぎるコードを前に、少し息苦しさを感じた。
// カレシが書いた完璧すぎるDOM操作の例(イメージ)
// HTML: <ul id="itemList"></ul> <button id="addItemButton">Add Item</button>
(() => {
'use strict';
const itemListElement = document.getElementById('itemList');
const addItemButton = document.getElementById('addItemButton');
let itemIdCounter = 0;
const state = {
items: []
};
const createListItemElement = (item) => {
const li = document.createElement('li');
li.dataset.id = item.id;
li.textContent = item.text;
const deleteButton = document.createElement('button');
deleteButton.textContent = 'Delete';
deleteButton.classList.add('delete-btn');
deleteButton.addEventListener('click', () => removeItem(item.id));
li.appendChild(deleteButton);
return li;
};
const addItem = (text) => {
const newItem = { id: `item-${itemIdCounter++}`, text };
state.items = [...state.items, newItem];
render();
};
const removeItem = (id) => {
state.items = state.items.filter(item => item.id !== id);
render();
};
const render = () => {
while (itemListElement.firstChild) {
itemListElement.removeChild(itemListElement.firstChild);
}
const fragment = document.createDocumentFragment();
state.items.map(createListItemElement).forEach(el => fragment.appendChild(el));
itemListElement.appendChild(fragment);
};
addItemButton.addEventListener('click', () => {
const newItemText = `Item ${itemIdCounter}`;
addItem(newItemText);
});
addItem('Initial Item 1');
addItem('Initial Item 2');
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
IGNORE_WHEN_COPYING_END
})(); // 即時関数でスコープを汚さない徹底ぶり
「…ねえ、カレシ」と、あたし。「こんなに綺麗じゃなくても…別に、動けばよくない?」
あたしが書いた、グローバル変数汚しまくりのクソJSだって、なんとか動いてた。バグはあったけど、直せばいい。ここまでピッカピカじゃなくてもいいんじゃないか。
カレシは何も言わず、次の「汚物」を待つように静かにあたしを見つめていた。
その時思った。プログラムだけじゃない。あたし自身もそうだ。
完璧じゃなくても、人間的な魅力があればいいんじゃない? 無理して自分を商品みたいに磨き上げなくても。あたしのぐちゃぐちゃな髪、太めの二の腕、変なエクボ。全部「バグ」や「欠点」でも、それがあたしなんじゃないの?
…なんて高尚なことを考えても、結局カレシの神フィンガーが、あたしの次のクソコード――意味不明な正規表現とビット演算が闇鍋になったPerlワンライナーもどき――に触れた瞬間、脳みそは「あへぇ、おにい゛ぢゃん゛!」状態。抗えない。
あたしはカレシの作り出す「完璧な美」に犯され続ける中毒患者なんだ。
でも最近、カレシのこともよくわからなくなってきた。彼は何者? いつもどこかから現れて、コードを綺麗にしたら消える。名前も知らない。人間なのかすら怪しい。
彼は「修正」するけど、「教え」ない。アドバイスもダメ出しも一切なし。それが彼の「使命」かのよう。
もしかして、カレシはあたしの歪んだ欲望が生み出した幻覚…? それともコードを糧にするデジタル生命体…? アンタ、誰なの?
あたし自身もわかんない。なんでこんな変態的なことに快感覚えるのか。こんな自分おかしいのに、身体は正直でカレシのリファクタリングを求めてしまう。どうしてクソコードが綺麗になることに性的興奮を覚えるんだろう?
ぐちゃぐちゃだ。あたしの頭の中も、カレシとの関係も、人生も。エラーだらけのスパゲッティプログラム。
でも…それでも、カレシのことをもっと知りたい。このわけのわからない「絆」みたいなものの正体を突き止めたい。
そのためには…。今度は、あたしから何かを「提供」しなきゃ。
カレシの方をまっすぐ見た。相変わらずガラス玉みたいな瞳。
「ねえ、カレシ…」声が震える。「い、いつも…汚いコードを綺麗にしてくれて…ありがとう…。で、あのさ…いつもあたし『ばっかり』気持ちよくなっちゃってて…なんか、申し訳ないっていうか…」
言葉がうまく出ない。
「だから…その…もしよかったら…なんだけど…」唾を飲み込んだ。顔が熱い。
「今度は、あたしが、カレシに…何か、『気持ちいいこと』…してあげたいんだけど…どう、かな…?」
言っちゃった。
カレシの完璧な無表情が、ほんの少し、ピクリと動いた気がした。
あたしの、生まれて初めての「プルリクエスト」だったのかもしれない。
カレシという謎のシステムへの「機能追加」の提案。あるいは致命的な「バグ」の指摘。
…返事は、まだ、ない。