つい先日、業務でコードを書いていたときのことです。
正直に言います。

自分でも驚くレベルの凡ミスを3つ連続でやりました😭
しかも全部、基礎中の基礎です。

① 変数名「taxAll」の悲劇

ある処理で 売り上げ金額の合計値に、taxAll という変数を使っていました。
ところが、どこかで

taxAlll

l が1つ多い スペルを書いていたのです。
最初は当然、

ロジックがおかしいのでは?
どこかで値が書き換わっているのでは?

と、処理の流れを一から全部見直しました。

配列も確認。
条件分岐も確認。
その他全てのロジックを確認。

それでも「合っている」。

なぜ???

40分ほど経ってから、念のためAIに聞いてみました。
すると即答。

スペルが間違っていますよ。

……。

All と Alll。

たった1文字。
でもそれだけで40分消えました。

② div に value はない

次はHTML。
JavaScriptから値を操作しようとしていました。

<div id="price"></div>

これに対して、

document.getElementById("price").value = 10000;

と書いていました。
でも反映されない。

なぜ?
AIに聞いてみると、

div 要素に value 属性はありません。
使用するなら textContent です。

……確かに。

document.getElementById("price").textContent = 100;

そうです。

value があるのは input や textarea。
div にはありません。
完全に思い込みでした。

③ load と DOMContentLoaded のタイミングの違い

さらにもう一つ。
JavaScriptで要素を操作するためにイベントを設定していました。

とある変数名.addEventListener("load", とある関数名);

でもうまくいかない。

なぜ?

これもAIに聞いてみると即答。

DOMの構造だけを扱うなら
DOMContentLoaded を使う方が適切です。

そう。

  • load → 画像など すべてのリソースが読み込まれてから発火
  • DOMContentLoadedHTML構造の読み込み完了時に発火

タイミングが違うんです。

自分は「要素を読み込んだら実行」と思っていたのに、
実際は「全部読み込んでから実行」になっていました。

「そんな凡ミスするの?」と思った人へ

この記事を読んで、

そんなミスするなんて大丈夫?

と思った人もいるかもしれません。
しかもこれ、すべてCrebitのレッスンで扱っている内容です..。

では、なぜこんな凡ミスをしてしまうのか。
理由はいくつかありますが、その一つが「複数の言語を扱っていること」による影響です。
僕は普段、JavaScriptだけを使っているわけではありません。
他の言語にも触れています。

そうすると、頭の中で無意識のうちに別の言語のルールを適用してしまうことがあります。

その結果、思い込みによる不具合を生んでしまう。
そんなことが、実際に起きるのです。

でも、これでいいと思っています

正直、少し恥ずかしいです。
でも同時にこうも思っています。

間違えたことは、記憶に残る。

  • スペルミス → もう二度と忘れない(Allみたいにlが連続するような単語はなるべく書かない)
  • div に value → 体が覚えた(不用意にvalue属性を使わない、一旦確認)
  • load と DOMContentLoaded → 完全に整理された(注意ポイントとして気にする)

これは逆にラッキーです。

人は、苦い経験のほうが強く記憶に残ります。

失敗は、成長のログ

だから僕は今回のミスを、

「なかったこと」にしません。
こうして記事に書いて、自分のためにも残しておきます。

エンジニアは、

  • ミスしない人
    ではなく、
  • ミスを資産にできる人

だと思っています。

みなさんへ

いっぱい失敗してください。
いっぱいハマってください。

そして、
「なんで動かないんだ…」と悩んでください。

その時間は無駄ではありません。
確実に、力になります。
そして基礎って大切だと痛感するはずです。

今日の凡ミス3連発も、未来の自分への投資でした。
一緒に、強くなっていきましょう。