php-cs-fixerのようなツールで自動整形すると、全ファイルが揃ってきれいに見えるんだけど、疑問に思うことがあるんだよね
なになに?
自動整形して、見た目だけはきれいに揃えたほうがいいのか
自動整形しないで、見た目がイマイチ≒中身もイマイチをわかるようにしておいたほうがいいのか
どういうこと?
レストランのシェフで例えると
腕のいいシェフは、きれいに盛り付けて、料理もおいしい
腕の悪いシェフは、お皿のまわりを汚したままで、料理もおいしくない
そうね
自動車の整備士で例えると
腕のいい整備士は、分解した部品をきれいにしてから組み立て直し、使った工具もきれいにして元の場所に戻すけど
腕の悪い整備士は、分解した部品を汚れたまま組み立てるし、工具も汚れたまま
そうね
つまり、見た目がきれいなら、内容もよくって、
逆に、見た目がよくないなら、内容もよくないっていう関係があると思うんだ
自動整形する前に、インデントやスペースの使い方が乱れているコードは、いいコードのことはまずないんだよ。
悪いコードのインデントやスペースの乱れを自動整形してしまうから、いいコードなのか悪いコードなのか、わかりにくい気がするんだよ
少しわかってきたわ、でも
新人シェフがお皿のまわりを汚したとして、そのままお客さんにだすかしら?
んー、誰かがきれいにしてからお客さんにだすね
新人整備士はどうかしら?
部品や工具が汚れていたら、ベテラン整備士が注意するだろうね
それってレビューやペアプロ、自動整形に似ていると思うんだけど?
言われてみると、たしかにそうだね!
コードを納品するとき、書き方がばらばらなコード、自動整形したきれいなコードのどちらを納品するのがいいのかしら
きれいなコードのほうがいいのかな、よくわからないよ
だって、品質が悪いかもしれないコードにフタをしているような気がするんだ
コードの品質って、どう判断するのかしら?
もっと洗練された実装方法があるとか、かな
ずいぶん主観的な判断ね
客観的な判断ってできるの?
そのためにテストケースやphpmd、CodeSnifferなどのツールを使うのよ
たしかに!
そのコードが、テストケースを合格しているのなら、一定の品質を満たしていると言えるんじゃないかしら
あー、なるほどね
あなたのほうがいい実装方法を知っているかもしれないけど、それだけで、テストケースを合格したコードの品質が悪いと判断しないほうがいいわね
言っていることはわかるんだけど、なんかもやもやが残っているんだ。
じゃあテストケースがない場合は、自動整形しないほうがいいのかな?
そうじゃないの、まずテストケースを作るの
テストケースを作るのが難しそうで、誰も作らないんだよ
あー、一番の問題はそこね
つまり、こういうことね。テストケースがないのに、あやしそうなロジックがあるのね。でも、自動整形してあるから、きれいに見えてしまって、あやしさに誰も気づかない。時限爆弾のようにある日問題が表面化するかもしれないと不安を感じて、このまま放置でいいのかって、もやもやしているってことね。
そうそう!自分でもよくわかっていなかったよ
あやしそうに見えても、理由のあるロジックを含んでいることがあるから、テストケースを作らずにリファクタしないほうがいいわ。
じゃあ放置ってこと?
あなたが心配な箇所についてwikiに残しておいたらどう?重要な問題かもしれないから、開発メンバーと共有しておいたほうがいいわ。
たいがい放置されるけどね
(こうして、また、テストケースのない、あやしいコードが放置されるのであった、こころの声)