0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIにJavaScriptをコードレビューさせたら「.NETエンジニア臭が隠せていない」と言われた話

0
Last updated at Posted at 2026-06-30

はじめに

Chrome拡張で「定時退勤生存システム」というジョーク拡張を作りました。
なぜ作ったのかは私にも分かりません。


拡張機能の概要

実装している機能は以下の通りです。

  • 上司接近警報
  • メンタルゲージ
  • トイレ籠城
  • エナドリブースト
  • 推し凝視
  • 定時ダッシュ機能

動作イメージはこちらになります。
https://satosuzu.web.fc2.com/

我ながら何を作っているのだろうと思います。
作った後にAIへコードレビューを依頼したところ思いもよらない指摘を受けました。

JavaScriptとしては普通です。

ただしベースの.NETエンジニア臭が隠せていません。

な、なんだってー!

※本記事のレビューコメントはAIとのやり取りを元に再構成しています。


問題のコード

const state = {
  isBoredToDeath: false,
  mentalGauge: 100,
  isHomeProtocolExecuted: false,
  isBossAlerted: false,
  targetTime: { hours: 17, minutes: 45, seconds: 0 }
};

AI曰く

これはJavaScriptというより EmployeeState クラスの残骸です。

とのこと。

確かに見返してみると脳内ではこんなコードを書いていた気がします。

public class EmployeeState
{
    public bool IsBoredToDeath { get; set; }
    public int MentalGauge { get; set; }
    public bool IsHomeProtocolExecuted { get; set; }
    public bool IsBossAlerted { get; set; }
}

否定できない。


enumを我慢しているらしい

現在の実装では以下のように文字列を直接使っています。

document.getElementById('status').innerText = 'HOME_SAFE';

しかしAI曰く

この人はまだ enumを定義するのを我慢している段階です。

とのこと。

確かに今でも頭の中にはこれが見えている。

public enum EmployeeStatus
{
    Ready,
    WaitingForTeiji,
    HomeSafe,
    Crashed,
    ForceQuitted
}

メソッド名が完全にC#

さらに指摘されたのがこれ。

shutdownSystem();
updateMentalUI();
checkTimeReached();

JavaScriptとしては普通ですが.NETエンジニアが読むと脳内で自動変換されます。

ShutdownSystem();
UpdateMentalUI();
CheckTimeReached();

なぜバレた。


イベント駆動よりループ信仰

個人的に一番刺さったAIからの指摘がこちらです。
今回は以下のようなループでシステム全体を監視しています。

while (state.isBoredToDeath) {
  // ...
  await new Promise(r => setTimeout(r, 1000));
}

AI曰く

このコードはイベント駆動ではなく監視ループ文化で設計されています。

とのこと。

確かにJavaScript界隈だとsetInterval()addEventListener()などのイベント駆動で組むことが多い印象です。

心当たりしかない

言われてみると私の脳内ではたぶんこうなっていました。

while (_isBoredToDeath && !token.IsCancellationRequested)
{
    CheckBossDistance();
    await Task.Delay(1000);
}

あるいは

public async Task StartMonitoringAsync(CancellationToken token)
{
    while (!token.IsCancellationRequested)
    {
        Scan();
        await Task.Delay(1000, token);
    }
}

完全に業務アプリのバックグラウンド監視処理です。

AIによる診断

AIによると私は現在、以下のような発想でコードを書いているらしいです。

状態 ➔ ループ ➔ 監視 ➔ 判定 ➔ 状態更新

つまりJavaScriptを書いているつもりでも以下のあたりの影響がまだ強く残っているようです。

  • BackgroundService
  • Worker Thread
  • Task
  • CancellationToken

否定できません。


元ネタのC#

このChrome拡張には元ネタがあります。

それがこちら。

public class BossApproachException : Exception
{
    public double Distance { get; }

    public BossApproachException(double distance)
    {
        Distance = distance;
    }
}

そしてthrowで上司接近を通知します。

throw new BossApproachException(ScanBossDistance());

さらに catch で回避。

catch (BossApproachException ex)
{
    EmergencyRecovery();
}

冷静に考えると「上司をExceptionで表現する設計はどうなんだ?」という話ですが…


AIによる総評

レビュー結果を要約すると以下の通りでした。

  • JavaScriptとしては普通
  • state が実質DTO
  • enum欲が漏れている
  • class欲も漏れている
  • StatusManager を作りたそう
  • イベント駆動より監視ループが好き
  • 脳内ではWinFormsが動いている

まとめ

JavaScriptを書いているつもりだったのですが以下のような進化ルートが見えていました。

state ➔ enum ➔ class ➔ StatusManager ➔ DI ➔ Blazor

危うくChrome拡張がBlazorになるところだった。

結論として「.NETエンジニアはどこへ行っても.NETエンジニア」なのかもしれません。

最後にAIからいただいた一言を置いておきます。

「まだ enum を作るのを我慢している段階です」

図星でした😇

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?