2015/01/19

コードを削除したら喜ぶべき。知らない人がみたら意味不明なコードが残っていませんか?

昔はよくわかっていなくて、今は身にしみてよくわかっていることの一つは、追加した行数がマイナスのパッチは素晴らしいということだ。コードは削除できるなら消したいし、自分の書いたコードであれ、誰かが消してくれたらとてもよいことだと思う。

昔はがんばって書いたコードはなるべく「活用」したいと思っていた。活用というのはつまり、捨てるのはなんとなくもったいないから、そのコードをなるべく消さずにすませたいということだ。

しかし無理にコードを生かしておくことの意味など何もない。

コードの履歴などは全部いったん置いておいて、ある時点のソースコードを初めて見たものとしよう。そのソースコードが、そのプログラムが実装するべき機能を実装するために十分かつ最小限のコードであるのと、十分かつ最小限のコードに加えて何かよくわからないコードのどちらかであるとしたら、どちらのほうがいいコードだと思うだろうか? 前者のほうがいいコードに違いない。何かよくわからないコードというのは余計な混乱を引き起こすだけだからだ。

履歴を考慮してみると、本来はばっさり削っても問題がない蛇足のコードに愛着を感じるのはわからないでもない。しかし、フレッシュな目で見てみると、そういうコードは率直に言って意味がよくわからないはずだ。コードの健全性のためにそういうものは思い切って跡形もなく消すのがよい。

Gitのようなソースコード管理システムを使っていれば、削除したコードを復活させるのはわりと簡単だ。これはコードをばっさり削除することの心理的障壁を下げる理由にはなる。ただし僕は、ばっさり削除されたコードがやっぱり必要だからということで復活させられた例はほとんど見たことがない。つまりそもそもが杞憂というか非合理的な執着心なのだ。経済学でサンクコスト(埋没費用)といっているものと同じだと思う。

僕の参加しているプロジェクトでは、どのプロジェクトであれコードを削除すると歓迎される。昔は何千行とか何万行とか削除するパッチを誰かが投げると、みんながよってたかってCongratulations!とかWoohoo!などと言うので、自分の書いたコードが最初から存在しなかったみたいになってしまって一抹の寂しさなどを感じないのだろうか? などと思っていたのだけど、いまではすっかり僕もGreat!などと返信するようになってしまった。ちょっと考え方を改めるだけなのだ。コードは簡潔でわかりやすいのが一番だし、変なコードがあると変更が無駄に難しくなるので、無駄なコードは消してくれると大変ありがたい。コードは変化し続けるものだ。単調増加などしていたら誰にも理解できないものになってしまう。

あなたのプロジェクトは変なコードが残っていないだろうか? 変更履歴を知らない人が見たら意味不明なコメントアウトされたコードとか、使われていない関数とかクラスとか、あとで使うだろうと思ったけど結局使っていない無駄な抽象化されたコードとか、もういらない機能とか、そういうものはないだろうか? そういうものがあったら消したほうがいいと思う。ソースコードは基本的に現時点が常に「完成品」、つまりフレッシュな目でみてキレイで、変なものがついていなくて、全体的に素直になっているように保つのがよいと思う。

Rui Ueyama @rui314