日々常々

ふつうのプログラマがあたりまえにしたいこと。

変更前をコメントアウトして残す習慣は未だ根強い (2012年現在)

2020-03-11追記: タイトルの「未だ」がいつなのかわかりづらいので「2012年現在」を追加しました。

バカバカしい話ですが、ソースコードSubversionなどでバージョン管理しているにもかかわらず、未だ修正前をコメントアウトして残す習慣は残っているところも多々あります。こういうのです。

// 2012/08/15 irof 修正開始
// hoge = fuga(1);
hoge = fuga(2);
// 2012/08/15 irof 修正終了

見た事無い方は、そのまま見ないままで生きていかれることを切に願います。

コメントの修正がある場合

2012/07/21にあった、SCMBCでこんなツイートがありまして。

この時点でお見せしたのはこんな感じ。

// 2012/07/21 削除開始
// // 間違ったコメント
// 2012/07/21 削除終了
someMethod(arg);

さて、指摘がありました。


そう。冒頭で見せたように、修正者の名前を書く慣習もあります。どうやらここ*1ではそう言うお決まりのようです。

と言うことで、この指摘に対応したものは以下になります。*2

// 2012/08/15 irof 修正開始
//// 2012/07/21 削除開始
//// // 間違ったコメント
//// 2012/07/21 削除終了
// 2012/07/21 irof 削除開始
// // 間違ったコメント
// 2012/07/21 irof 削除終了
// 2012/08/15 irof 修正終了
someMethod(arg);

……わかります?
「// 2012/07/21 削除xx」を「// 2012/07/21 irof 削除xx」に修正するために、「// 2012/08/15 irof 修正xx」で修正箇所をわかるように囲っています。これで修正が誰でも追えるようになるらしいです。そんなばかな。

コメントアウト履歴化なんてしてはいけない

コメントのコメントアウト履歴化、バカバカしさが際立って伝わると思います。さすがにあまり見た事は無いですが、実際に無くはないです。コメントを含んでのコメントアウト履歴化はザラにあります。
コメントアウトして履歴を残すことで変更を追うのなんて至難の業です。一つ前の一本のソースの一カ所を数行しか変更しないとかならまだなんとかなるでしょうが、それ以上となるともうアレです。特に複数のソースに跨がったりすると目も当てられません。*3
バージョン管理ツールを適切に使いましょう。凝った使い方が出来なくても、変更の都度突っ込んでおけば、差分を取得する事は容易いです。容易いんです。少なくともコメントアウトされたコードを紐解くよりは、よっぽど。
「バージョン管理ツールが使えない人にもわかるように」とか言われたこともありますが、そんなのに対して聞く耳を持ったら何も出来なくなるので放置でいいと思います。正直どうしたらいいかわかりませんでした……。

*1:架空であって欲しいプロジェクト

*2:gistでは同じ日付でしたが、わかりづらいので変更しています。

*3:一個の変更が複数箇所に影響を与えるのはどうなのよと言うのは、この場では置いといてください。