何が起きたか
作っているアプリに、ツールが自動で生成するファイルがひとつあります。
開発サーバーを起動すると中身が書き換わる、いわゆる「生成物」です。
これがコード整形ツールのチェックに引っかかりました。原因は先頭の空行1つ。
手順書にはこう書いてありました。
除外リストにこのファイルを足すかもここで判断(生成物なので整形対象から外すのが筋)
自分で書いた行です。生成物 → 整形しても意味がない → 除外リストに入れる、
という反射で書いていました。
実際に試したら、逆でした
除外せずに整形して、開発サーバーを起動し直してみました。書き換わりません。
生成する側のコードを読むと理由が分かりました。再生成するかどうかの判定が、
目印で囲まれたブロックの中身だけを比べていたんです。整形ツールが消すのは
ブロックの外にある空行なので、判定にはまったく影響しません。
つまり整形してコミットすれば、それで終わりでした。除外リストに1行足す必要はなかった。
何を間違えていたか
「生成物」という分類だけで対処を決めていました。
- 生成物は毎回変わる → だから除外する
- 生成物は手で直しても戻る → だから除外する
どちらも一般論としては正しいと思います。ただ、今回は当てはまりませんでした。
このファイルは「毎回変わる」のではなく、「ブロックの中身が変わったときだけ」書き換わります。
分類の名前(生成物)に対処が紐づいていて、**そのファイルが実際にどう再生成されるかを
見ていなかった**、というのが正確なところです。
除外リストは、増えるだけで減らない
もし反射のまま足していたら、除外リストに恒久的な例外が1行増えていました。
除外リストの厄介なところは、足した理由が後から読めなくなることです。
半年後に見た人は「何か理由があったんだろう」と思って、そのまま残します。
不要だった1行が、ずっと残り続ける。
しかも今回は「試せば1分で分かる」ことでした。整形して、起動して、差分を見るだけです。
前に踏んだのと、向きが逆だった
前の工程で「整形ツールは git の除外設定を読まない」ことを踏んでいます。
git が無視しているファイルでも整形ツールには見えているので、
除外し忘れると整形の対象になるという話でした。
今回は同じファイル種別(生成物)の話なのに、除外しなくてよかった。
同じ道具の同じ設定ファイルで、片方は入れ忘れが問題、もう片方は入れることが問題でした。
「除外設定は気をつける」だけでは、どちらにも対応できません。
気をつけるべきなのは設定ファイルではなく、「分類で決めていないか」のほうだったようです。
