キッカケ

ほぼ毎日に近い間隔でプロジェクトのソースをビルドしているのですが、

ソースをコミットした後に、.csprojのコミットし忘れが結構あったりして、Exeでのテスト時に正常に動作しなかったりして手戻りになることが結構あったんですよね。

だったら、ビルド前にソースの構成をひと通りチェックできれば便利かなと。

.csprojの設定内容と、実際にフォルダ内に存在するソースを突き合わせてプロジェクトに追加されていない新規プログラムを探し出します。

中身

ロジック的には大したことはやっていなくて、指定したディレクトリ以下に存在する.csprojから、Compileタグの値を取り出した配列と、csprojの存在するディレクトリにいる.csファイルの一覧の差分を「-」してるだけです。

.csprojには存在するけど実ソースが無い場合と、実ソースはあるけどcsprojに登録されていない場合の2パターンが起こりうるので、前後を入れ替えて2回引き算してます。

使ったGem

ocra, rails-timeout

実行方法

何を血迷ったか2通り用意しています。

(社内の開発環境が100%Windowsかつ、使用言語がC#かPowerBuilderなので)Rubyをインストールしなくても実行できるよう、Ocraを使ってExe形式にコンパイルしました。

>ocra project_contains_checker.rb

Exe実行の場合は、引数に検証したいプロジェクトのルートディレクトリのパスを渡してあげます。

>project_contains_checker.exe C:/CSharpProject

もう1つはSinatraを使ってWebブラウザから実行できるようにしてみました。

まとめ

まぁ、こんな感じでサクッと作ってみました。

あとはいつものビルドタスク中でこのExeを実行するようにして作業終了。

でもまだまだRuby使いこなせてないなーと思いますね。壁にぶつかりながらコーナリングしてる感じ。正しい道がすぐにはわからない。

Github

ProjectContainsCheck