
SE歴8年目のものです。
現在の仕事では、PHPで開発しており、Subversionで構成管理しています。
私はこれまでソースを修正する場合には、古いソースをコメントアウトし、さらに修正日付、修正者名、修正内容をコメントで入れるようにしてきました。
(例)
-----------------------------------
//090401 update [氏名] #1234のバグ改修 start
/*
[古いソース]
*/
[修正後のソース]
//090401 update [氏名] #1234のバグ改修 end
-----------------------------------
しかし、今一緒に開発している同僚のSEは、「古いソースをコメントアウトしたり、コメントに日付を入れたりするのは、構成管理ツールが無かった頃の古いやり方だ。今はむしろやってはいけない風潮になっているから、すべきではない。」といい、そのやり方に反対しています。
確かに私も商用リリース前のソースの修正に関してはこんなことはしないのですが、商用リリース済みのものに関しては慎重にやりたいので、情報をたくさん残すようにしています。
この同僚のSEの言う通り、このやり方は古くやらない方が良いのでしょうか?
皆様の開発現場はどうされてますか?

No.6ベストアンサー
- 回答日時:
SEやって16年目になるものです。
同僚の方の主張、何かの本で読んだような気が…と思っていろいろ調べてみたら、
「達人プログラマー」という有名な書籍の中にありました。
『変更管理はツールの仕事。ヘッダに日付と名前と概要だけ書けば良い』
というようなことが記述されています。
改修を重ねるとコメントでソースが読みにくくなるのは気分が悪いですよね~
生産性にも影響しているはずですしね。
「達人プログラマー」を読んで以降、その通りだな~と考えているのですが…
わが社もVSSで管理しているのに修正前のロジックをコメントアウトしてます。
分かっちゃいるけど、やめられない…(^^;
そういえば昔、チーム内でソースを「作品」と呼んでいたことがありました。
「このソース、誰の作品?」とか。
みんなで「ソースはアートだ」ぐらいのプライドを持って仕事をすると、
3Kとか7Kとか言われているこの業界も、少しは人気が回復するかな?
ソースを汚す"修正履歴のコメントアウト文化"は捨てるべきかも知れませんよ(笑
参考URL:http://www.amazon.co.jp/gp/product/4894712741/re …
No.4
- 回答日時:
>PHPで開発しており、Subversionで構成管理しています。
PHPってほかの言語に比べてバージョンアップに伴う機能拡張がある方だと思うけど
俺自身はPHP4系とPHP5系では使える関数などの違いにより
同じソース内にPHP4用とPHP5用とをコメントアウトで切り替えるレベルのことはよくやりますね。そこをSubversionで管理させるのは逆に非効率的だと思っていますから。
Subversionの枝分かれがすごいことになって分けわからなくなるので
また、一時的にソースを書き換えて挙動を検証する程度の時はソースをコメントアウトする程度ですね。
ついでにバージョン管理ツールもいくつもあるけど
今使っている物から別の物に変える事になったときに
基本的に今使っているバージョン管理ツールを情報を移管できないと
考えると質問者のやり方は間違ってはないけどこれだとソースが汚くなりますよね。
プログラム作るときには関数やクラスでソースファイルを個々に分けて
そのソースファイル毎にバージョンを設定してソースファイル毎差し替える形にして古いソースファイは手元にバックアップとして別の場所に残しておいて最新のソースファイルをコミットすればいいと思います。
修正する前のソースの全体ではなくて極一部が必要になる事って時々ありますよね。
そういう時ってバージョン管理システムだとめんどくさい時ってありますよね。
(全体を引っ張ってくるのは楽だけど)
それが数世代前の物で正確な世代がわからないとなおさら。
回答ありがとうございます。
>そのソースファイル毎にバージョンを設定してソースファイル毎差し替える形にして古いソースファイは手元にバックアップとして別の場所に残しておいて最新のソースファイルをコミットすればいいと思います。
古いソースに関してはSubversionを信頼してそこから引っ張ってこれば良いかと思っています。
気にしているのが、修正してデグレが発生した時に、該当ファイルを1つずつ履歴とcompareしなければいけないのが面倒だなと思っているのですが・・・。
ソースに書いてあればそこさえ見ればわかるので楽かなと思っていたのですが。
No.3
- 回答日時:
昔は軒並みソース内に残してました。
今でも外にソース提供してるもの(リポジトリが見れない前提)はコメントアウト(ifdef含む)もあります。
また、商用でないモックやテストコードなどはコメントアウトすることもあります。
そうでないもので、Subversion前提なら、
差分管理と修正コメントと修正者の記録はSubversionにやらせてます。
その方が見やすいですし、結果として誤りも少ないです。
また、コメントアウトが増えるとsvn diffを阻害するケースもありますし、
人間の目で見ても、修正コメントだらけのソースって結局保守性(特に可読性)低いと思ってます。
ソースの中にコメントアウトされてたところで、その内容を有効にしての実績はあるのか?とか、
いつの時点の修正だ?とかいうことになりますし、コメント内容も結局信頼できないのは大差ないですし。
(例えば、コピペミスがありえるコメント内の日時よりは、サーバ記録のsvnのcommit時間の方がまだ信頼できる)
いざって時のための修正前情報の保全は、tagsやexportによるsnapshotで完全に別にとってます。
(非常時用は原始的な手段の方が安心ということもありますが、
例えばTortoiseのdiffなら当該箇所だけ反映できたりとかしますし、
経験上、ソースのコメントアウトより便利な気もします)
> 例えば、複数の人が「同時に、A、B、Cの機能の修正を開始した」とします。影響のあるソースは数十ファイル以上あります。
> ここで、クライアントが「Bだけ元に戻して」と言った場合、差分ツールで「Bの機能が修正される前」に戻すと、AもCも修正される前に戻ります。
> こういう場合、ツールで何とかするには「Aだけ修正した差分」「Bだけ修正した差分」「Cだけ修正した差分」を持たねばなりません。
SubversionはVSS等と方式が異なり、ロックなしの同時編集を許します。
AとBとCの修正箇所が衝突するソースの同じ箇所でなければ、
commit前にupdateすれば他人の修正とマージできますので、
必ずしもAの修正にBとCを待つ必要はありません。
(AがBやCに依存してる/衝突する場合は別ですが、そういうものはいずれにせよ同時に直しようがありませんし、
Subversionからコンフリクトが通知されるでしょう)
また、Subversionのような版管理ソフトを正しく運用し、
A、B、Cなどの意味のある単位できちんとcommitしていれば、
commit単位でマージやリバートできますので、「Bだけを戻す」「B以外を戻す」等もできます。
人間が個別に直すより、機械的に直して人間が最終チェックの方が安全じゃないかと思います。
むしろ、個人的に「一つのプロジェクトで並行進行する」状況で、
完全に人力のマージとかロールバックとか、怖くてやりたくありません。
機械任せにしろといっているのではありませんが、人間×人間のクロスチェックよりは、観点の異なる人間×機械の方を信頼できると思ってます。
まぁ、開発環境によっては「常にSubversionに接続できるとは限らない」こともありますし万能だとはいう気もありませんが。
回答ありがとうございます。
>また、コメントアウトが増えるとsvn diffを阻害するケースもありますし、
>人間の目で見ても、修正コメントだらけのソースって結局保守性(特に可読性)低いと思ってます。
これは激しく同意です。
厳しい会社だと、「単体試験以降の修正はすべて元ソースを残す」っていうルールがあったりするので、改修・仕様変更が重なるとソースの9割コメントアウトとかになりますよね。
なので可読性が明らかに落ちるようなコメントアウトは反対なのですが、そうでないのであれば残しておいて損はないと思っているのですが・・・。
あとソースを自分の名前で検索すれば自分の修正箇所がすぐにわかるというのも便利なんですけどね。
No.2
- 回答日時:
>構成管理ツールが無かった頃の古いやり方だ
そうやって「すべてをツールに任せ、情報を残そうとしない人」は、後で泣く事になります。
ツールは万能ではないので、クライアントか「この部分の、この機能だけ、元に戻して欲しい」と言われた場合、ツールでは「すべての機能を、変更する前に戻す」のは可能ですが「特定の、指定の部分だけ、元に戻す」のは不可能です。
例えば、複数の人が「同時に、A、B、Cの機能の修正を開始した」とします。影響のあるソースは数十ファイル以上あります。
ここで、クライアントが「Bだけ元に戻して」と言った場合、差分ツールで「Bの機能が修正される前」に戻すと、AもCも修正される前に戻ります。
こういう場合、ツールで何とかするには「Aだけ修正した差分」「Bだけ修正した差分」「Cだけ修正した差分」を持たねばなりません。
A~Cの差分を個別に持つには「Aの修正が終るまで、B、Cの修正はしない」「Bの修正が終るまで、A、Cの修正はしない」「Cの修正が終るまで、A、Bの修正はしない」と言う「決まり」を作らなければなりません。そうしないと「A~Cの修正点の差分が、ゴチャゴチャに混ざって」しまいます。
通常、実際の作業現場では「Aの修正が終るまで、B、Cの担当者が、何もしないで待っている」って事は有り得ないので、A~Cは「同時進行」しますから「○だけ修正した差分」は作る事が出来ません。
そうなった時「ツールだけに頼る」と「全てを元の状態に戻す」か「記憶のみを頼りに、手作業で特定の修正部分のみを元に戻していく」しかありません。
>この同僚のSEの言う通り、このやり方は古くやらない方が良いのでしょうか?
「ツールのみに頼る」のも駄目ですし「古いやりかたをしてツールを使わない」のも駄目です。
質問者さんの言う事も、同僚さんの言う事も、どちらも「不十分」です。
正しいのは「ツールではカバー出来ない部分は、古いやりかたを踏襲し、ツールでカバー出来る部分はツールでカバーする」と言う方法です。
1つのプロジェクトで複数の修正を同時進行する場合は、必ず「何に関する修正なのかを分類出来る情報(つまり、ソース内に残すコメント)」と「初代に戻れるまでの差分の情報(つまり、差分ツール等による自動の履歴管理の情報)」の両方を持つようにしましょう。
どちらの情報も「1つだけ残して、あとの全部を元に戻す」とか「1つだけ元に戻して、あとの全部を残す」っていう場合に必要になります。
回答ありがとうございます。
「古いやりかたをしてツールを使わない」と言っているわけではなかったのですが・・・。
>1つのプロジェクトで複数の修正を同時進行する場合は、必ず「何に関する修正なのかを分類出来る情報(つまり、ソース内に残すコメント)」と「初代に戻れるまでの差分の情報(つまり、差分ツール等による自動の履歴管理の情報)」の両方を持つようにしましょう。
ここなのですが、要するに「修正内容のコメントと構成管理ツールを使いましょう」ということでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- アプリ 某クラウドソーシングサービスの請負契約のキャンセル後に請求された遅延損害金 1 2022/04/08 00:29
- Windows 10 数年前からWindows10 の Update ができないです。なぜですか? 7 2022/11/09 06:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Word(ワード) wordの修正履歴について 3 2023/01/05 23:50
- Java 助けでください!!!!!!!!!!!! 4月から働き始めた新人SEです。 皆さんの体験談等を教えてい 7 2022/07/28 23:50
- 知的財産権 CFWの入った改造ゲーム機の販売は商標違反で違法なんですよね?では改造中古車を売ったら違法ですか? 3 2022/06/17 17:03
- 政治 日本で訴訟件数が少ないのは、自民党とビッグモーターが詐欺組織だからですか? 2 2023/07/27 11:30
- iPhone(アイフォーン) iPhoneの修理のことでお聞きしたいです! 私は去年iPhoneを買い替え、現在新しいiPhone 3 2023/07/27 00:10
- 車検・修理・メンテナンス 正規ディーラーの営業マンはムキになって語気を強めた発言をしたのはもう来店するなと言ったのでしょうか? 11 2022/12/03 22:36
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
自作PCを製作中なのですが、電...
-
三菱 シーケンサープログラムに...
-
SESからの転職
-
地方から東京の会社でフルリモ...
-
皆さんのChatGPTの使い道を教え...
-
初級SE、中級SE、上級SEはどの...
-
今はAIで殆どできるから、 Exce...
-
ITパスポート
-
新卒で日立システムズ(SE)、TIS...
-
IT職について教えてください。 ...
-
SQLをExcelで書いている人を良...
-
IT業界の人間ならBIPROGY(日本...
-
WEBエンジニア(プログラマー)...
-
chatGPTやopenAIは、エンジニア...
-
プリセールスエンジニアからIT...
-
システムエンジニア プログラマ...
-
恥ずかしながらスキル詐称をし...
-
システムエンジニアどうしたら...
-
AI開発競争でアメリカがちょっ...
-
東北電力の社内SEに新卒で配属...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Zと2とか紛らわしいのがあるか...
-
三菱製PLC:ファイルレジスタ(...
-
テストについて
-
グーグルの障害者訓練プログラ...
-
三菱シーケンサーA1SHCPUとA1SJ...
-
東京でヨコイのソース買えますか?
-
インプットとアウトプット
-
オーバレイ方式と仮想記憶シス...
-
プログラムソースの値段
-
プログラム修正の際に古いソー...
-
ひな型ってなんですか?
-
初心者です。プログラムを作り...
-
フライに天つゆ
-
アフィリエイトプログラムについて
-
システムの世代管理
-
エントリーシート
-
3000行位の帳票作成プログラム...
-
自作プログラムの社内展開について
-
試験勉強の為の質問
-
ゲームプランナーのスクリプト...
おすすめ情報