受け取っただけでは、何も変わらなかった

前の日に「戻り値を受け取っていなかった」というミスをしました。
次の日、同じ場所で「受け取ったのに見ていなかった」というミスをしました。
2日続けて、同じ形の別バージョンを踏んだ話です。

目次

1日目: 受け取っていなかった

データベースから1件を読む処理を、こう書いていました。

const { data: item } = await supabase.from('items')...

エラーの情報を受け取っていません。
そのせいで、正常な結果も、コードのバグも、URLの形式の間違いも、
全部が同じ「404」の画面になっていました。

console.error を1行足したら、その場でエラーコードが出ました。
足すまで、何かが起きていること自体に気づけていませんでした。

2日目: 受け取ったのに、見ていなかった

翌日は、更新の処理で「0行だったこと」を検知する必要が出てきました。
それで、結果を受け取るようにコードを足しました。

const { data, error } = await supabase.from('items').update(...)...
  .select('id').maybeSingle()

前日の反省が効いていて、errordata も受け取っています。
これで直った、と思いました。
思っただけでした。

if (!data) を書いていませんでした。

受け取った値を誰も見ていないので、足す前と挙動が1ミリも変わっていません。
0行でも、これまでどおり成功として通り抜けます。
素通りです。

「対応したつもり」の度合いは2日目のほうが高かった

振り返って怖いのは、2日目のほうです。

1日目は、そもそも受け取っていませんでした。抜けているので、指摘されれば分かります。
2日目は、コードに data という文字が増えています。
変更した実感があるぶん、確認しようと思いませんでした。

手を動かした量でいえば、2日目のほうが多い。
結果は、何もしていないのと同じでした。

機械はちゃんと言っていた

エディタは、正しく指摘していました。

'data' is declared but its value is never read

「受け取ったのに使っていない」と、そのままの言葉で出ています。
読めなかったのは、そのとき警告が13件あったからでした。

13件並んでいると、全体が「いつもの表示」になります。
1件増えても見た目が変わらないので、新しく出た警告として認識できません。
警告を0件に保つ意味が、このとき初めて実感として分かりました。
0件なら、1件出た瞬間に目に入ります。
13件だと入りません。

受け取ることと、見ることは別の作業だった

言葉にすると当たり前なのですが、自分の中では1つの作業になっていました。
「エラー処理を書く」と考えていて、その中身が
「受け取る」と「見る」の2工程に分かれていることを意識していませんでした。

いまは、値を受け取る行を書いたら、その場で見る行も書くようにしています。
あとで足す、にすると、足した実感のほうだけが残るので。
実感は当てになりませんでした。

目次