「生成物だから ignore する」を、確かめずに決めるところだった

目次

何が起きたか

作っているアプリに、ツールが自動で生成するファイルがひとつあります。
開発サーバーを起動すると中身が書き換わる、いわゆる「生成物」です。

これがコード整形ツールのチェックに引っかかりました。原因は先頭の空行1つ

手順書にはこう書いてありました。

除外リストにこのファイルを足すかもここで判断(生成物なので整形対象から外すのが筋

自分で書いた行です。生成物 → 整形しても意味がない → 除外リストに入れる
という反射で書いていました。

実際に試したら、逆でした

除外せずに整形して、開発サーバーを起動し直してみました。書き換わりません。

生成する側のコードを読むと理由が分かりました。再生成するかどうかの判定が、
目印で囲まれたブロックの中身だけを比べていたんです。整形ツールが消すのは
ブロックのにある空行なので、判定にはまったく影響しません。

つまり整形してコミットすれば、それで終わりでした。除外リストに1行足す必要はなかった。

何を間違えていたか

「生成物」という分類だけで対処を決めていました。

  • 生成物は毎回変わる → だから除外する
  • 生成物は手で直しても戻る → だから除外する

どちらも一般論としては正しいと思います。ただ、今回は当てはまりませんでした。
このファイルは「毎回変わる」のではなく、「ブロックの中身が変わったときだけ」書き換わります。

分類の名前(生成物)に対処が紐づいていて、**そのファイルが実際にどう再生成されるかを
見ていなかった**、というのが正確なところです。

除外リストは、増えるだけで減らない

もし反射のまま足していたら、除外リストに恒久的な例外が1行増えていました。

除外リストの厄介なところは、足した理由が後から読めなくなることです。
半年後に見た人は「何か理由があったんだろう」と思って、そのまま残します。
不要だった1行が、ずっと残り続ける。

しかも今回は「試せば1分で分かる」ことでした。整形して、起動して、差分を見るだけです。

前に踏んだのと、向きが逆だった

前の工程で「整形ツールは git の除外設定を読まない」ことを踏んでいます。
git が無視しているファイルでも整形ツールには見えているので、
除外し忘れると整形の対象になるという話でした。

今回は同じファイル種別(生成物)の話なのに、除外しなくてよかった

同じ道具の同じ設定ファイルで、片方は入れ忘れが問題、もう片方は入れることが問題でした。
「除外設定は気をつける」だけでは、どちらにも対応できません。

気をつけるべきなのは設定ファイルではなく、「分類で決めていないか」のほうだったようです。

目次