書いて、消したコードの話
夕方、今日書いたコードを自分で消しました。
朝からずっと、アバターの口のガビガビを減らすスライダーを作っていて、候補が3つあったのでそれぞれ Issue に書き出して順番に試していました。
2つ目までは順調でした。
1つ目は効かないと分かって、2つ目はそこそこ効きました。
そして3つ目。
3つ目は、1つ目と2つ目を組み合わせたハイブリッドの案でした。
書いているときは「たぶんこれが一番効くはず」と思っていました。
単純な案の和なんだから、効きも足し算になるだろう、と。
でも、画面で動かしてみたら、2つ目との違いが分かりませんでした。
消すかどうかで、一瞬迷いました

書いたコードは、けっこうな量でした。
ロジックの切り替えが1ファイル、UIが1ファイル、プリセットの再設定が2ファイル。
ちょっとした調整じゃない、それなりの時間をかけた実装です。
「これを消すのか」と思ったとき、一瞬ためらいました。
昔の私なら、きっと残していたと思います。
「せっかく書いたのに」とか「また必要になるかもしれない」とか、そういう理由を自分に言い聞かせて。
でも今日は、消す方を選びました。
git revert(書いたコードを取り消す仕組み)というコマンドで、書いたコミットをまるごと打ち消す形で。
履歴には「書いた」と「戻した」の両方が残って、現時点のコードは書く前の状態に戻ります。
消したのは、失敗だったからではありませんでした

消す理由をきちんと言語化してみると、「案3は期待したほど効かなかった」ではなくて「案3は案2と区別がつかなかった」でした。
つまり、効いていないわけじゃないんです。
ちゃんと効いてはいて、ただ、もっとシンプルな別の案と同じくらいしか効かなかった。
それだけのことでした。
同じ効果なら、コードは少ない方が読みやすいし、あとで直すときに間違えにくい。
複雑なコードには、複雑さに見合う理由が必要です。
「案3にしかできないこと」が画面から見つからなかったなら、残す理由はありませんでした。
試す前は「本命」だと思っていたものでした。
でも実機で見てみたら、本命じゃなかった。
それだけのことだったんです。
消したことで、進んだ気がしました

revert は一見、戻る動作です。
コードの状態は、書く前に戻ります。
でも私の中では、何か一つ進んだ感覚がありました。
「試して、違いを確認した」という事実は、コードを消しても消えません。
むしろ、試したからこそ「案3は案2と同じ」と言えるようになりました。
試さないうちに「案3の方が複雑だから、たぶん効くはず」と頭の中で想像していた時間より、試してから「案3は案2と同じだった」と言える今のほうが、確実に先に進んでいます。
試して、違うと分かった。
だから、戻した。
これは後退ではなくて、確認の一部だったのかもしれません。
暮らしにも、消していいものがあるかもしれません

「せっかく始めたから続ける」「せっかく買ったから使う」って、私はよくやっていました。
手をかけた分だけ、それを手放すのが惜しくなるんです。
でも、手をかけた時間は、すでに払った代金です。
「使い続けるかどうか」は「もう払ったかどうか」とは別の話で、今も役に立っているかどうかで判断すれば十分でした。
試して、違うと分かったら、戻していい。
それは失敗じゃなくて、確認です。
消したコードの分だけ、試したことも増えている。
それで今日は、いいような気がしました。

