社内プロジェクトのtrunkにビルドが通らない状態でコミットするべきか

このQ&Aのポイント
  • 社内プロジェクトのtrunkにビルドが通らない状態でコミットするべきかについて疑問があります。
  • 先輩からは、trunkのビルドが通らないことは普通であるとの意見がありますが、私は違和感を感じています。
  • オープンソースプロジェクトと社内プロジェクトのtrunkは異なる意味合いがあると考えており、社内プロジェクトではビルドが通った状態でコミットすべきだと思っています。
回答を見る
  • ベストアンサー

trunkのビルドが通らないのは是か非か

社内でsubversion(アクセスするのは社内チームメンバーのみ)を用いて、 アプリケーションを開発しているのですが、 先輩の中に、ビルドが通らない状態でtrunkにコミットする方がいます。 もちろん、コミット漏れなどでビルドが通らなくなることはあるかと思いますし、 その際はJenkinsなどで通知もきますし、急いでいる場合は一言伝えるだけで解決するので、気にはしていません。 ただし、その先輩は新規モジュール作成や、リファクタリング時のsaveの意味で ビルドが通っていないことを認識した上でtrunkにコミットをします。 当然、他のメンバーのビルドに影響が出るため、私としては作業がしにくいと感じており、 先輩にその旨を伝えたところ、 「開発中にtrunkのビルドが通らなくなるのは普通。オープンソースプロジェクトでもtrunkのビルドが通らないのは当たり前」 と言われました。 つまり、先輩の認識では、trunkのビルドが通らないことは悪ではないということなのです。 確かに、オープンソースプロジェクトでtrunkのビルドが通らないのはよく見かけますが、 それは不特定のメンバーがコミット可能である以上、仕方のない面もあるのかなと思っています。 (オープンソースプロジェクトに参加したことはないので、trunkに直接コミットできるのかは確認していません。認識が間違っていたらすみません) 少なくとも、オープンソースプロジェクトのtrunkと 限定されたメンバーでの社内プロジェクトのtrunkは意味合いが異なり、 社内プロジェクトのtrunkはビルドが通った状態でコミットするべきではないかと考えています。 ビルドが通らない状態でセーブしたいのであれば、branchを切るか、svkやgitでローカルリポジトリにセーブするべきだと思っています。 私の認識は間違っているでしょうか? 皆様のtrunkの運用ポリシーを教えていただければ思います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

間違ってないと思いますよ。 trunkは全員が共通して使う最新のコードであることを想定し、まず、build可能なもの、そしてtestが通るものを置いておくべきです。buildすらできないものは無条件にrevertされても文句言えないと思います。そして、testがないもの、testが通らないものは理由がない限りは入れてはいけないと思います。 ある程度大きなOSSの場合、普通の開発者においそれとコミット権をくれないですよね。そして、普通の開発者が本体にプログラムを入れたい場合、デザインレビューからソースコードレビューまでの関門を通り抜けて、コミッターによってテストされた上でコミットされると思うんですが。 よく壊れているというのは何のプロジェクトでしょうか? まずは上司も含めたミーティングでtrunkのポリシーについて話しあってはいかがでしょうか。 リファクタリングの最中でも最低限buildが通る形で進化させていくことは可能だと思います。もちろん、その場合は今後どういう形にするというドキュメントがあったほうが好ましいです。 また、新規モジュールを作る場合は一緒にテストも作っておくことをお勧めします。テストがないとそれが期待する動作をするのか否か判定できず、バグが見つかった時にどのモジュールのせいなのか即座にわからないですからね。それに、テストコードはそのモジュールの期待される使い方、期待されない使い方を示しているのでそこを他人が理解するのにも役立ちます。

hiropon_su
質問者

お礼

具体的な名前を出すのは控えますが、比較的小規模なOSSです。 先輩にも確認してみましたが、「大きなプロジェクトはしっかりしているからtrunkのビルドが通らないケースは少ない」といってました。(痛いところを突かれたようで苦笑いしてました) 結局チームとして、trunkのビルドは通る状態でコミットする方針にしていこうと思います。 大規模OSSのコミットの流れを教えていただいたので、ベストアンサーとさせていただきます。

その他の回答 (3)

回答No.4

会社としての開発時の規約は? 普通は、バージョン管理サーバにコミットするときは最低限、ビルドが通る物って決めているはずでけど その規約は存在する? まぁその手の規約には絶対にクラス名や関数の命名規約や変数名の命名規約はコーディングの規約(インデントをタグにするかスペースにするかなど)が絶対にあるはずですけど で、この手の開発時の規約を守らないと給与査定にも響くはずだし下手したら解雇。 >開発中にtrunkのビルドが通らなくなるのは普通。 誰がそのコードをいじっても良い状態のオープンソースならそれはアリだけど 仕事した場合そのコードを担当以外がいじるのは問題あるから 勝手に修正してビルドが通る状態にするだけでも大問題。だからこそビルドが通るソースをコミットするのが常識。 とりあえずブランチで対処する気すら無いならバージョン管理システムを切り替えるしか方法は無いのかな? gitあたりにでも(これなら開発中の部分は中央サーバにあげずに個人の環境だけでコミット作業できるわけですし) そういえば個人環境ではgitを使って中央サーバではsubversionを利用する方法ってあったね。 http://sourceforge.jp/magazine/09/03/26/0834222 こんな感じで

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.2

私のかかわったプロジェクトだと 最低限コンパイルできる事を確認した上でコミットするように お願いしています(私が運用ポリシーなど決める側でなくても)。 でないと他の人の開発に影響出過ぎますから。 その先輩は、それがどれだけ他の人を困らせる行為なのか わかってないんじゃないんですかね。 プロジェクトメンバーの集まるミーティングでの 議題とかにした方がよいのではないでしょうか。 >「開発中にtrunkのビルドが通らなくなるのは普通。オープンソースプロジェクトでもtrunkのビルドが通らないのは当たり前」 正直、その行為を正当化する理由にはまったくなってないと思いますが・・・ オープンソースプロジェクトが全てそうというわけでもないでしょうし。 その本人だけの常識って気が・・・

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

個人的には…不具合があるとしても最低限ビルドの通るモノを…と思いますね。 まして、他のメンバーに影響するのであれば。 まぁ、私の使っているリポジトリは私しか使用しないため、たまにビルド確認できないモノをコミットすることはありますが。 # それでも、コミットログに「ビルド未確認」とかコメント入れてますが。 # 後から「ビルド確認」したモノがコミットされることに…。 >新規モジュール作成や、リファクタリング時のsaveの意味で であれば、私なら最初からその為のブランチ切ります。 後でマージすれば済む話ですし。 # マージで衝突しない…とも限りませんけどね…。 社内でのプロジェクトなのですから、上長などに掛け合ってルール化するべき…かと思います。 その先輩は反対するでしょうが、事実他のメンバーに迷惑かけているのならば、なんらかの調整は必要でしょう。 その先輩が行ったコミットのせいで全体の進捗が遅れても責任とってくれる。というのなら、まぁ取って貰えばいいでしょうし。 # なんだかんだ言って逃げるでしょうけどねぇ。 過去のリビジョン取ってくればいいじゃないかとか…。 ちなみに、オープンソースのプロジェクトには参加したことの無い者の意見ですけどね。

関連するQ&A

  • HEWでビルドができなくなった。

    社内の開発で使われていたソースのプロジェクトを自分のPCに入れてビルド作業を行おうとして拡張子”hws”のファイルをダブルクリックしてHEWを起動したのですが、なぜかビルドが無効になる現象がでてコンパイル作業ができない状況です。 また、メークファイルの更新のための依存関係の更新機能も無効になってしまいます。 解決する方法をご存知の方いらっしゃいませんでしょうか?

  • 一人でもGitする価値は?

    主に一人でソフト開発している者です。 現在は、Subversionを使ってソース管理していますが、Gitが良いという話をよく聞くので乗り換えを考えています。 リモートとローカルのリポジトリの使い分けをざっくり理解したところ(だと思う)ですが、一人での開発だとGitでもSubversionでもあまり変わらないのかな?、新しい操作やコマンドを覚えるだけで終わってしまうのかなと思うと、なかなか踏ん切りがつきません。 そこで、一人で使ってもGitだとこんなことが便利とか出来るという利点があれば教えて下さい。 ちなみに、現在は開発PCは2台あり、同じプロジェクトの違う部分を別々に同時進行で修正・追加することがあります。 また、コミットの周期は短いほうだと思います。コンパイルが通らない状態でも今日の変更点のバックアップをする感覚でコミットすることもありますし、一方のPCから他方のPCへ変更点を移すためだけにコミットすることもあります。 ですので、リポジトリは汚れ気味です。ホントは、修正・変更のキリの良いタイミングだけをリポジトリに残したいのですが、Gitならそういう運用が可能でしょうか? 識者の方、ご意見をよろしくお願いします。

  • C++ ビルドできません

    猫でもわかるWindowsプログラミングの本を買いました が・・・・今までのコンソールアプリと違って ビルドが全くできません(エラーがでてしまいます) 付属のCDのサンプルソースをコピペしてみたので 間違えはないはずなんですけど・・・・ なぜでしょうか? ちなみに環境は本に載ってた通りVisualStdioアカデミックエディションで開発言語C++→Win32プロジェクト→Windowsアプリケーション→空のプロジェクトでやってみました

  • ビルドから除外されたソースのコンパイル

    現在、Visual Studioを使用してある巨大なプロジェクトを開発しています。言語は C++です。 このプロジェクトには、ソースファイル(*.cpp)が全部で1000以上もありま す。百ではありません、千です。 そのため、プロジェクトをビルドするのに30分以上もかかり、開発効率が非常に悪 くなっています。 コンパイル・リンクとも相当の時間がかかっています。実感としては、cpp1ファイ ルにつきコンパイル1秒かかっています。 (なぜそんなに大量のcppが必要なのかというのはここでは置いといてください) そこで、次のような方法でビルド時間を短縮する方法を考案しました。 (1)ある一定数のソースファイルのプロパティで「ビルドから除外」とする。 (2) (1)でビルドから除外したソースファイルを全てインクルードしたソース ファイルを作成し、プロジェクトに追加する。 [1つにまとめたソースファイルのイメージ] #include "src001.cpp" #include "src002.cpp" #include "src003.cpp" ・・・ #include "src999.cpp" ソースファイルを1つにまとめてしまう事による弊害は全て解決したものとします。 以上により、プロジェクト内のソースファイル数を100以下にまで減らし、無事ビ ルド時間が大幅に短縮されました。 と、ここまでは良かったのですが、一つ問題があります。 それは、「ビルドから除外」したソースファイルを単独でコンパイル出来なくなって しまうのです。(ここでは、そういうことをしたいという要望があると思ってくださ い) ソリューションエクスプローラでソースファイルを右クリックし、出てくるメニュー リストの「コンパイル」が無効表示され選択できません。 もちろん、コンパイルコマンド(cl.exe)をコマンドラインから直接叩いてやればい くらでも出来ますが、出来ればIDEから簡単な操作で行いたいのです。 また、チームで開発しているため、コンパイルする時だけソースファイルの設定を変 更するというようなことはしたくないのです。 この問題に対して、何か良い手段はないでしょうか? プロジェクトを複数モジュールに分離して・・・ とか、 プリコンパイル済みヘッダを利用して・・・ とか、 リビルド時間を短縮するためソース間の依存関係を減らして・・・ というような、質問の内容を超える回答はご遠慮ください。 そのようなことは、十分ではないかも知れませんが検討済みです。

  • バージョン管理ソフトのタイムスタンプについて

    バージョン管理ソフト SubversionやGitなどを検討しています。 新規でプロジェクトを進める際はコミット時の時間が現在の時間で問題ありませんが、 他者からソースコードを受領した場合や既存のソースコードを管理し始める場合、 それらをコミットするとファイルの更新日時が現在の時間になってしまいます。 またプログラムをリリースする際にエクスポートするときも現在の日時に更新されてしまうようです。 これでは、ソースコートの内容自体は変わっていないにもかかわらず、更新日時が変わって いるために、他者から見ると整合性がとれなくなってしまいます。 Gitコミットの日時を設定可能のようですが、エクスポートの時に日時が変わってしまいます。 Subversionはインポートの際にコミットの日時に更新されるようです。 他者からもらったファイル/既存のファイルの内容変更が無い場合はファイルのタイムスタンプを 維持する方法はないでしょうか。 もしくはそのようなことが可能なソフトはありませんでしょうか。 ぜひ、ご助言をいただけますようお願いいたします。

  • Web Developerのビルドエラー

    エラー1: Encountered multiple versions of the assembly with GUID '05c4dde7-0c6b-42d2-bb71-460c3a69d075'. Try pre-importing one of these assemblies. D:\****\TlbImp エラー2: 'Context' は 'ASP.****_aspx' のメンバーではありません。 エラー3: '****' は宣言されていません。アクセスできない保護レベルになっています。 エラー4: 基本クラス '****.Global_asax' を含むアセンブリ '****, Version=1.0.0.0, Culture=****, PublicKeyToken=null' への参照が必要です。 参照をプロジェクトに追加してください。 エラー5: 型 '****' が定義されていません。 ビルドを行うと上記エラーが発生します。 経験のある方何かアドバイスをいただけますでしょうか? エラーの一部でも、また、参考サイトや調べ方を教えていただけるだけでも助かります。 <環境> 開発環境:Micrsoft Visual Web Developer 2010 Express OS:Windosw7 Proffesional ※稼働しているシステムのソースを新しい開発環境端末で改修するためにビルドしています。

  • mikroC pro for dsPICでのビルド

    現在mikroC pro for dsPICの有償版でdsPIC33FJ64GP706向けの開発を行っております。 順調に作業を進めておりましたが、たびたび挙動がおかしくなります。 それでも開発を進めておりましたが、本日急にビルドボタンを押してもメッセージ欄に何のメッセージも表示されなくなり、どうやらビルドが実行されていないようです。 以前、mikroC導入時にも同様の症状が生じたのですが、導入時以降はこのような症状は生じておりませんでした。 しかし再度ビルドが実行されていない状態に陥りました。 ただし、開発中のコードを含むプロジェクトをそのままほかのPCにコピーし、無償版ではありますが同ソフトでビルドしたところ、メッセージ欄に各種メッセージが流れ、無事にビルドされているようです。 (無償版なので、コードサイズが大きくてHEXファイルが作れないというエラーが最後に出ます。。。) このような状態が起こった経験がある方、そして解決された方がおりましたら原因と解決方法をご教授願えますでしょうか。 なお、ビルドできない方のPCのOSが古くスペックも低い(WinXP, Intel Pentium M: 1GHz, RAM: 752MB)のですが、関係ありますでしょうか?ビルドできる方はWin7, Intel Core i5 M520: 2.4GHz×2, RAM: 4GBです。 以上よろしくお願いいたします。

  • オープンソースで生計を立てる

    オープンソースプロジェクトに参加し 開発を進めていくことで生計を立てることは やはり難しいことなのでしょうか? 現実にそういった開発者はいますか?

  • subversionでコミットしたらftpなどしなくても即反映したい

    最近subversionを試験的に導入してみているのですが これがあればソースコードの一括管理などが出来き 趣味ですが1人で開発するにしても世代管理などがあっていいですね! そこで最近、このように出来ないのか?と悩んでおります。 ---------------------------------------------------------------- ■subversionが導入される前 1.Windows上のローカルで開発(127.0.0.1) ↓ 2.LinuxにあるFTPサーバー(192.168.0.50)へアップロード ↓ 3.Windows上のブラウザで表示の確認(http://192.168.0.50/) といったようなことをしていたのですが、ソースコードの世代管理と一元管理をしたいので FTPサーバーが立っているLinux(192.168.0.50)にsubversionをインストールしました。 ■subversionが導入された時(導入された今の現状) 1.Windows上のローカルで開発(127.0.0.1) ↓ 1b.Linuxにあるsubversionサーバー(192.168.0.50)へTortoiseSVNを使用してコミット ↓ 2.LinuxにあるFTPサーバー(192.168.0.50)へアップロード ↓ 3.Windows上のブラウザで表示の確認(http://192.168.0.50/) ですが、以下のような手順にならないでしょうか? ■subversionが導入された時(こんな風にはできないの?) 1.Windows上のローカルで開発(127.0.0.1) ↓ 2.Linuxにあるsubversionサーバー(192.168.0.50)へTortoiseSVNを使用してコミット ↓ 3.Windows上のブラウザで表示の確認(http://192.168.0.50/) ---------------------------------------------------------------- つまり具体的な開発のシーンケースはこのような感じです。 Windows上で開発をしています。 そこでチェックアウトされたファイルを作ったり変更したり作成を行いました。 そして、ある程度、ローカルで色々開発をしローカルで動作確認をした後、 TortoiseSVNでコミットをします。 そのコミット先は、subversionのリポジトリ(192.168.0.50)です。 その後、WindowsでFFFTPを使用して、(192.168.0.50)のサーバーにアップロードをします。 アップロード後、Windowsでhttp://192.168.0.50/ でアクセスをして確認をします。 この状況でも満足なのですが、 もっと欲を言えば、コミットの作業をしたら、ファイルが自動でftpなどがされ 即時反映しないのかな?と思うのです。 もしもこのような動作が無理であれば リポジトリになどに対して現在の最新のリビジョンのファイルって 持たせることはできないんでしょうか? なにぶんsubversionは(私ではノウハウが弱い) まだ具体的になにが出来てなにが出来ないといったことが 理解できてないので、そういうの出来ますよ。それは無理ですよ。 といった事柄でも助かります。 ただlinuxに対してもノウハウが弱いので、 もしこのようなことが可能であるならば そのようなサイトなどを紹介しているサイトか、詳細を教えていただきたいと思います。(linuxはredhatを使用しています)

  • Antでのビルドにエラー

    いつも参考にさせて頂いています。 表題の件ですが、現在Eclipse3.1・struts1.2.9を使用しています。 Antでのコンパイルをしてみたのですが、コンパイルエラーになります。 ■エラー内容 シンボルを解決できません。 [javac] シンボル: クラス LookupDispatchAction LookupDispatchActionを継承しているクラスでは確かにインポートしています。(インポートしていないとエラーになると思うのですが、ソース上でエラーは出ていません) ■build.xmlの中身 <?xml version="1.0" encoding="UTF-8" ?> <project name="aaa" default="compile" basedir="."> <property name="srcdir" value="JAR" /> <!-- JARディレクトリの作成--> <target name="mkdir"> <mkdir dir="${srcdir}" /> </target> <!-- コンパイル --> <target name="compile" depends="mkdir"> <javac srcdir="javaSource" destdir="${srcdir}" excludes="build.xml" /> </target> </project> 何かbuild.xml上でstrutsライブラリのパスとかを指定しないと認識してくれないのでしょうか? どうかご教授宜しくお願いします。

    • ベストアンサー
    • Java