2012-04-11

うちの会社ビルドシステムおかしい気がする

http://anond.hatelabo.jp/20120407162253 に便乗して。

それなりに大きなとある会社プログラマだけど、うちの会社ビルドシステムおかしい気がする

まりにも原始的なので違和感を感じるんだけど、自分ビルドシステムに対する知識が圧倒的に不足しているので、今やってる作業に本当に意味があるのかよく分からない。詳しい人に教えてもらいたい。

環境

でどんな方法ビルドしているかというと

  1. Subversion からファイルをチェックアウトしてくる
  2. バッチファイルを使ってワーキングディレクトリファイルを全部 C ドライブ直下ディレクトリファイルコピーする。 C:\PRODUCT とする。これは決められた名前以外では動かない
  3. メインのソースツリーを製品ハードごとのツリーにエクスプローラーコピーする
  4. 製品ハードごとの依存部分をさらに上書きする
  5. 10個ぐらいあるバッチファイルから必要なものを選んで実行し、ビルドする。スクラッチビルドしかできない

こんなこといちいちやるので、ビルドに数時間かかる

あとソース更新した時の手続きは

  1. 製品ごとのソースツリーで、同じファイルを使っているものには手動で上書きする
  2. 更新したファイルワーキングディレクトリに手動でコピーする
  3. ビルドしたバイナリごとチェックイン

手動でコピーするからよく事故が発生するし、同じファイルが複数箇所にあるので全然履歴が追えない。

あと、中間ファイルや実行ファイル(.o とか .so とか) も含めてごちゃまぜにチェックインされているので、もっと訳がわからなくなってる。

ビルド成功しないのが当たり前」とかいう人ばかりで、正直発狂しそうになる

フォルダツリーがわかりづらいと思うので図を書くと

 /
  Main/         -- 共通ファイルディレクトリ
       foo/
           bar.c
       driver/
           common.c
  ProductA/
       foo/
           bar.c -- ProductA 用の変更が入ってる
           baz.c -- ProductA 専用ファイル
       driver/
           common.c
  ProductA_Orig/ -- ProductA/ 内の ProductA用ファイルが丸々入ってる
       foo/
           bar.c
           baz.c
  ProductB/
       foo/
           bar.c -- Main と全く同じ
       driver/
           common.c
  ProductC/
       foo/
           bar.c
       driver/hoge.c
  ProductC_Orig/
       driver/hoge.c

こんな感じになっていて、共通部分は Main/ の中とそれぞれの ProductA, ProductB, ... ディレクトリの中にすべてコピーされている。

チェックインするときはすべてのファイル、例えば bar.c を更新したら Main, ProductA, ProductB, ProductC の bar.c を手動で更新する必要がある。

ビルドするときは Main/ のファイルを ProductA/ にコピーして、 ProductA_Orig/ の中の機種依存ファイルさらに ProductA/ にコピーする。これは、同名のファイルが Main にもあって、 ProductA のファイルが上書きされるかららしい。

こんな状況なので、ソースツリーは常にビルドが通らない状態

ビルドできないので、最後最後まで結合テストが出来ずに、みんなローカルPCで開発してる。誰かのPCが吹っ飛ぶとその人が開発していた差分消失する。

近々また製品バリエーションが増える...

「ツリーを共通部分と依存部分きちんと分けて、ビルド自動しましょうよ」って上長に提案したら「この会社はこれでやってる。むしろバイナリが入っているのでビルドできなくてもテストできる」という感じであまり真面目に取り合ってもらえなかった。

  • それなんて既視感。 だけど、俺も自分の家でバージョン管理すると自分一人なんでずさんになってちゃうんだよなぁ。 結局、その案件や、その会社のスタート時にやってた人たちがル...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん