Posts Tagged ‘お仕事’

Subversion, Git, Redmine, Hudson – 今考えている連携

2月 21st, 2010


これからが本番、検索エンジンから来た方は先にSubversion, Git, Redmine, Hudson – 現状の連携 » tune webを読むことをおすすめします。上記が週末考えていた「こういう連携なら今の問題点を解消できるかな」と思えるフローです。「こうしたほうがいいよ」とかコメントありましたらお待ちしています。

1番のポイントはバージョン管理システムとしてGitを中心に据えました。社内はSubversionで統一するという規則があるので残すとして、開発チーム内ではgit svnを使ってGit化し、Subversionを直接触らないようにします。協力会社はSubversion縛りが無いのでGitで統一してもらいます。これまでは差分ファイルを送り合っていましたが、Gitを使えばパッチをうまく作り、修正単位でパッチファイルをやり取りすることが出来るでしょう。これまでは複数の修正がまとめて送られてきてましたが、パッチ単位ならレビューもやりやすく、「こうした方がいい」とか「こうして欲しい」というやりとりもやりやすくなります。

リポジトリがプロジェクト専用になるので、フックスクリプトも仕掛けやすくなります。現状は「空メッセージのコミットは禁止」程度の緩めのものですが、コミットメッセージに Issue ID を含むことを強制させる Git のフックスクリプトを書きました|SNS構築の手嶋屋を参考にすればRedmineのチケットが無いコミットは禁止できます。これで闇コミットがなくなるはず。

さらにGitを使えば「歴史を書き換えて」テストが通らないコミットをなかった事にも出来るはずです。コミット前にテストをする機能がTeamCityにはありますが、Hudsonにはありません。[#HUDSON-1682] Pre-tested commit feature – Hudson JIRAとして要望が挙げられていますが実現はまだ先になるでしょう。HudsonのGit Pluginのページにpushされた変更をテストして、成功したらmaster/stableにマージする設定手順がありましたが、リリースブランチを持ったときにも同じように出来るかは不明です。

というのをtwitterにつぶやいていたところ、@bleisさんと@masanobuimaiさんから情報をもらえました。Gitのフックスクリプトですが

  1. pre-receiveでpush前の状態をタグ付けする設定を追加
  2. post-receiveでHudsonの複数ジョブをキックして起動。
    1. テスト結果を取得して全て成功したらタグを消してgit svn dcommitを実行
    2. 1つでも失敗していたらpre-receiveでタグ付けしたバージョンに戻してpushをなかった事にする。

とすることでいけそうです。Hudsonのジョブ実行結果を知る方法は複数あると@masanobuimaiさんに教えてもらったのがPlugins – hudson – Hudson Wikiのページです。プラグイン無しでもリモートAPIを使っても出来るのかもしれません。
自前でフックスクリプトを用意する必要がありますが、出来ないことはなさそうです。
post-receiveでのテストに多少の時間がかかることを踏まえ、Redmineで参照するリポジトリはGitではなくSubversionにするのが良さそうです。

あとはRedmineのメール経由のチケット登録機能を有効にして、HudsonのナイトリーテストでこけたらカスタマイズしたメールをRedmine指定のアドレスに送ればOKですね。上の絵には「静的解析とメトリクス集計」が入ってますが、これは内製ツールです。リポジトリを集中管理してもらえるとこういうこともやってもらいやすくなりますね。

上記構成に3月中に取り組む予定です。うまく行くといいんだけど。

Subversion, Git, Redmine, Hudson – 現状の連携

2月 21st, 2010


会社の仕事を「Gitを中心に据えた開発ワークフロー」に変えたいなとこの週末ぼんやりと考えていたんですが、現状を整理して残しておくのも、あとで振り返った時も参考になるかもしれないと思って残しておきます。

開発しているものは画像処理ライブラリで、言語はC言語。プラットフォームはWindowsとLinux両方に対応していて、32bitと64bitどちらでも動くようにしたいのが前提。ほとんどのソースは共用出来るようにしています。開発者はWindowsを使ってVisualStudioで開発し、自動テストやリリース時はLinuxでMakefileを使ってビルドします。

バージョン管理は課で管理しているSubversionを使い、他のプロジェクトともリポジトリを共用しています。他に使っているツールはテスト自動化にHudsonとタスク管理と障害管理でRedmineがあります。Hudsonは2種類のテストを管理していて、コミットの度に動くビルドのテストとCUnitを使った単体テストと、毎晩複数枚の画像入力を処理するストレステストの実行を制御しています。Redmineはチケット駆動開発(TiDD)を意識し、コミットはチケットに関連付けるようにしています。あとは開発者の1人(自分です)がgit svnを使ってローカル開発をgitにしているぐらいです。

開発メンバは社内に2人、あとは社外の協力会社に手伝ってもらっています。両者の間にはネットワーク的に「超えられない壁」があり、リポジトリを参照させることができません。ということで双方でSubversionリポジトリを持ち、同期は定期的(1〜2週間おき)に差分ソースを送り合って手動で実行しています。

ここまでが現状の紹介、以下は上記フローによる問題点です。
問題1 双方でのソースの同期を取るのが大変
一週間から二週間に一度差分ファイルを送り合ってるけど、マージに時間がかかる上、複数の変更がごっちゃになっておくられてくるためレビューしたくても途中で断念してしまう。

問題2 単体テストが通らないコミットが履歴に残り消せない
ちょっとしたミスがあってビルドに失敗してもsvnの履歴が消せない。Windows上での単体テストはコミット前に確認するけどLinuxで毎回やるのが面倒になったり、32bitと64bitを全組み合わせでやるのは面倒だったりする。動くだろうと思ってコミットすると壊れていたりとか。
あとはgccでは警告をエラー扱いしているので、使われてない変数があるとかその程度のことでエラー扱いされてしまう。

問題3 闇コミット
RedmineでTiDDに近いことをしているが、闇コミットが結構ある。スタイル直しただけとか、変数名リファクタリングしたとか。複数プロジェクトでリポジトリを共用してるからチケットIDが無いコミットを弾くのが難しい

問題4 Redmine上でチケットとコミットの関連付けを直せない
テストで問題が見つかってもRedmineのチケットとコミットの関係を直すことが出来ない。間違ってるfixesが残ってしまい、何とも出来ない

問題5 HudsonでビルドにコケてもRedmineのチケットに自動登録されない
Hudsonでコミットごとの単体テストとは別にストレステストを含むナイトリーテストを設定しているが、テストに失敗した時にRedmineのチケットが自動登録されない

問題6 TortoiseSVNのパッチ機能が腐ってる
外注からパッチで差分を送ってもらうことも考えたが、TortoiseSVNの文字コード認識がおかしく、一度エディタで開いて文字コードを保存し直す必要があった。(ちなみにソースはUTF-8)

問題7 機能ブランチの管理が大変。
一度切るとなかなか戻ってこない。戻すにも準備がかなり必要になる。試しに作ったけどいらなかったブランチも扱いに困る。

問題だけ見ると「何でこんなフローにしたんだ」と自分でも思ってしまうけど、少しずつプラクティスを取り入れた結果うまく連携できてない現状になってしまった。近々Subversionのリポジトリを課管理から本部管理に移行するお仕事があるのでこれを機にこれまでの問題点を解消しようと思っています。

詳細は後半で → Subversion, Git, Redmine, Hudson – 今考えている連携 » tune web

会社でgitを使い始めたのでWEB+DB Press Vol.50を読み直した

9月 22nd, 2009

今年のはじめからちょくちょくチャレンジしては壁に跳ね返されていたGitですが、先週あたりからようやくまともに使えるようになってきました。前提条件はこんな感じ

  • 共有リポジトリはSubversion、今後もずっとSubversion
  • プログラムはWindowsとLinuxで動くように作ってる、ソースは1種類
  • エンコーディングはBOM有のUTF-8、改行コードはLFCR
  • LinuxのgccはBOM有だと受け付けてくれないのでビルド前に文字コード変換を挟んでいる
  • Subversionのリポジトリは複数プロジェクト共同で、古いリビジョンだと存在しないパスがあったり、パスが途中で変わったりしている

何回かチャレンジしたときはmsysgitを使ってgit svnでのチェックアウトを試みたのですが、昔のリポジトリに同じパスのデータが無いのがまずいのかエラー終了してしまうところであきらめていました。
今回は出たばかりのTortoiseGitのバージョン1系を使い、TortoiseGitで(実際にはmsysgitなんだけど)svnリポジトリからのチェックアウトを試みて、昔のリビジョンだとエラー終了するのを指定リビジョン以降のチェックアウトに限定することで回避しました。

修正や機能追加の際にトピックブランチを作って平行開発、終わったらmasterにマージしてsvn dcommitして共有リポジトリにアップ。こんな流れで周囲の和を乱すことなく開発を進められる所まで来ました。途中gitの意味不明なエラーに遭遇したものの、TortoseGitのバージョンがこなれていくに従って徐々に減っていくでしょう。

gitの使い方はWebとWEB+DB Press Vol.50のgit特集と、オーム社の入門gitを使って勉強しました。Webの情報は古いのが引っかかったり、そもそもズバリな悩みの解決法がまだ見つかりにくく、オーム社の入門gitはリファレンスとしては有用そうに見えるのですが、git stashなど基本的なコマンドの解説が無く、WEB+DB PRESSのが一番使えることに間違いなさそうです。

gitのコミッターが書いた秀和システムの入門gitが先週土曜日に発売されましたが、Amazonからまだ発送されてきません。内容はWEB DB Pressをさらに深くしたものらしいので、日本ではこれが決定版になりそうな気がしています。

WEB+DB PRESS Vol.50 (大型本)
477413838X 入門git (単行本(ソフトカバー))
427406767X 入門Git (単行本)
4798023809

最近学んだシステム管理系の話

7月 22nd, 2008

最近現実逃避に会社のシステム周りのメンテナンスをする時間が多いので新たに学んだことをメモしておきます。

○dar
tar+gzよりも優れたバックアップシステムのようです。差分バックアップ機能やディスクに焼くのを考慮した分割機能に惹かれます。

○Unison
ファイルの同期を双方向に行ってくれるソフトウェア。LinuxでもBSDでもWindowsでも動作するらしい。OSを問わず動いてくれるのでLinuxとWindowsのフォルダ同期に最適なソフトです。rsyncとの違いは設定が簡単なことと双方向で同期できることでしょうか。

日本語情報は少なめです。

○svnsync
Subversioリポジトリは”svnadmin dump”でのバックアップよりホットコピーの方が優れているようです。ほっとコピーのやり方はいくつかあるようですが、Subversion 1.4以降であればsvnsyncを使うのが簡単そうです。

○buildbot
Continuous IntegrationツールとしてはCruiseControlが有名ですが、C言語で使うには新たに設定する項目が多そうなので(Makeの設定をAntに書き直さなくちゃ行けない?)、代わりに探したCIツールです。Python製で柔軟な設定ができそうです。まだ調べてる段階で使い物になるかどうかはもうちょっと試さないと分かりません。

カルガモ

6月 18th, 2008

○○の裏事情Part2より(リンク先読めばすぐわかるんだけど一応伏せ字)

778 :かるがも:2008/06/09(月) 17:50:32 ID:1Q8B/6jj0
わたしは今日G.CIPに動画までのせて頂いた丸子のカモでございます。
厚い待遇感謝しております。社員は社宅制度まで廃止されたのに、
私には無償で持家までいただき申しわけなく思っております。
私以下の待遇の社員が毎日がんばっている事に後ろめたささえ
感じる日々でございます。

会社の敷地内の池に住み着き、池に家まで作ってもらったカルガモが今日NHKのテレビ取材を受けてました。

たまたま通りがかって自分もインタビューを受けたのですがカットされたようで放送では見れませんでした、残念。

OCRと誤植

3月 18th, 2008

会社で調べ物をしていたたまたま見つけた面白い読み物。

誤植 – Wikipedia
一つ目はWikipediaの”誤植”にまつわる独自研究。ゴキブリの名称が誤植から定着したなんて知らなかった、話のタネにはならなそうだけど。あと聖書の誤訳のところが読んでて面白かったかも。

大量の画像をOCRしてるんですが、だんだんうんざりしてきました。特に校正作業が大変で、ちょう飽きてきた。 それでそういう経験をした事がある人の体験談を聞きたいと思い.. – 人力検索はてな
2つめがはてなの質問回答。OCRソフトって誤植多いよね~
回答者も面白いなと思ってみてみたら ノッフ!の人だった。

学会聴講のため外出

2月 27th, 2008

この日は学会聴講のため終日外出。2月はデブサミも見に行かせてもらえたし、外出が多くていい感じ。もっとも仕事はたまり気味だからしわ寄せができて困るんだけど・・・

学会で新しい知見を得られるメリットもありますが、いつもと違う平日を過ごせる気持ちの面でのリフレッシュが自分には大きいですね。この日の学会会場は東京タワーのすぐそばでした。展望台に上りはしませんでしたが下からの眺めもよかったですよ。

Vista Business 64bitをインストール

12月 27th, 2007

といっても会社の話。

年末で時間がとれたので開発環境の整備を午後から行い、Windows XP 64bit EditionのワークステーションをVista Businessの64bit Editionに変えてみました。来年以降はこのPCを事務業務・開発業務の両方で使っていくつもりです。

PCのスペックは以下のような感じ

CPU: Core2Duo 2.6GHz
メモリ:4GB
HDD: 500GB

ソフトウェアで動かないものがあって躓くかと思っていましたが今のところ大きな問題はなさそうです。

次に開発環境を差し替えるときはどんなスペックになってるんでしょう、3年後・・・Windows7かな。

2007年12月29日追記
VMware Serverが動かなかった。VMWare Server2(β)なら対応してるみたいなんだけどIFがWebベースになってて使い方がよく分からないのであきらめ。VMWare PlayerかVirtualPC2007が良さそう。

ISOイメージのマウントは Alcohol 52% Free Editionが動いた。

品川プリンスでパーティー

12月 13th, 2007

自分の所属する部署が今年社長賞を受賞して、記念パーティーが品川プリンスホテルでありました。寿司や天ぷら、ステーキなどおいしそうな料理が数多くありましたがカメラマンをやっていたのでどれも食べれなかったのが残念です。入社前の面談などを含めても会社関係で一番豪華な食事でした。

32階の”函館”という会場だったんですが、そういえば外の眺めを見なかったような・・・せっかく眺めが良さそうだったのに残念。

オーストラリアからのお客様

10月 31st, 2007

今週の火曜日・水曜日はオーストラリアの研究所からお客様が来ていて、その応対で終わりました。7月頃から引き継いだ業務に関連する来日で、実際にお会いしてお話しするのは初めてでした。これまでも隔週でテレビ会議は行ってきたものの、自分にとってもいろいろと刺激になった2日間でした。

英語力は特に問題にならなかったものの、自分の語彙力のなさはもうちょっと何とかならないかなと思いました。英会話スクールに通う必要があるとは思いませんが、外国の方ともっと積極的に話すようにした方が良さそうです。次回からは気心も知れたし、テレビ会議でももっと積極的に話してみようかなぁ・・・