VB.NETソースファイル退避

VB.NETソリューションの世代バックアップを行なうためのプログラムです。
何でこんなものが必要なのでしょう!?   VB.NETでプログラムを普段作成する方が見ているという前提でお話しますが、 作成したソリューションに対するメンテナンス(機能追加・変更や不具合修正)での世代管理を考慮しない場合はこのようなことの要求はないのかも知れません。



ここで紹介するものは「Visual Source Safe」、「Team Foundation Server」といった既製のソース管理ツールを使用しない開発環境で、 リリース段階でソリューションのソース部分を集めて退避させ、必要に応じてZIP形式などの圧縮ファイルを作成するユーティリティです。



単純にソリューションフォルダの「世代コピー」を作る方法でも同様の目的は果たせますが、大きなソリューションでは大きなリソースを消費してしまいます。 本ユーティリティはビルドでの生成物(再ビルドで復元できるもの)を除いて退避させるのでコンパクトなサイズで「世代コピー」が作成できます。

私がこの問題に直面していた環境は
私は以前に勤務していた会社で、社内での統合パッケージソフトでまかなえない個々の機能を束ねたMDIインタフェースのWindowsアプリケーションのソリューションを管理していました。



これには人事系データ、勤怠関連処理、稟議書や社内コンピュータ機器をはじめとする各種台帳、予実・予測を踏まえたPLレポート作成機能など20程度のサブシステム、300を超えるフォーム、100を超える帳票が、 サブシステムごとにクラスライブラリのプロジェクトで作成された状態で格納されており、さらに全体での共通なクラスライブラリもあるため、ソリューションをDebugReleaseの両方をビルドした状態の全体サイズは500MBを超えてしまいます。
全体の開発段階は終了しており、当初から少人数での対応であったため「チーム」を構成するようなソース管理プラグインの仕組みは導入していません。 現在では最新状態の単純バックアップであれば差分更新してくれるフリーソフトでも済んでしまう状態です。



ここで問題となったのが「世代バックアップ」です。単なる台帳関連以外に会社の会計(監査)に少なからず影響があるシステムが含まれるため、システム改訂に関する承認や改訂時の前後の証跡の保持が要求されることになり、 必然的にソースプログラムレベルの「世代バックアップ」が必要になったのです。 この「世代バックアップ」は各バージョンのリリース段階でその時点の開発環境(ソースプログラムの全体セット)を再現できるものでなければなりません。



バージョン管理レベルの話としては、各サブシステムでは絶えず機能要求があり、また、不具合修正の対応もあります。 ClickOnceで配給している関係上、ほんの一部でも修正があってリリースすればソリューション全体がバージョンは変更となりこの「世代バックアップ」を追加することになります。 「差分コピー」ではどこからの「差分」なのかの管理も発生してしまうし、「差分」からの「差分」としてしまうと再現の保証も難しくなってしまいます。



仮に月に一回のアップデートリリースを行なうとしたら、単純バックアップを世代で保持させるとすると500MB×12=6GBになってしまいます。 実際の現在の運用(各サブシステムで機能の改廃が頻繁にある)では年間30回以上のリリースがありますから15GBもの退避サイズになってしまいます。 最近のPCなら問題ないでしょうが、旧来のファイルサーバに保持させるとなると元々業務用途の共有域は領域が小さいことが多いのでこの「世代バックアップ」の要求に応えられなくなってしまいます。



ここで考えたのが「再ビルドで生成できるファイルを退避データに含めない」ということです。 ソリューションフォルダ全体では500MBになってしまうのですが、ClickOnceで配給する実行ファイルのフォルダは10MBを超える程度です。 各クラスライブラリのプロジェクトで生成されるbinobjのフォルダ配下を削除してしまえば圧縮できるわけですが、手作業だと30ものプロジェクトがあり、かなり面倒な作業になります。
また、現行のソリューションフォルダの中でbinobjのフォルダ配下を削除するとなると、次回のビルドでは全体の再生成になってしまうので時間が掛かってしまいます。



結果として本プログラムで行なうことは、指定のソリューションフォルダを一旦別の領域にコピーすることとし、 そのコピー動作の中で「配下のbinobjのフォルダ以下のコピーは行なわない」という動作を行なう仕掛けにしています。
この仕掛けで先ほど説明した500MBを超えるソリューションを退避させた結果はZIP形式に圧縮した状態で15MBにも達しません。
ソリューションの中の全てのソースプログラムがその世代の分としてセットされた状態でZIP形式ファイルで圧縮されますから、後はバージョンを表意したフォルダを作成してそこに保存させるだけです。 復旧が必要ならその対象のZIP形式ファイルを解凍させて、起動プロジェクトの*.slnを起動させればVisualStudioでそのまま開かれるという「快適さ」なのです。
実行ファイルや中間生成ファイルを一切省いた状態ですが、ここから再ビルドできることはこちらでは確認できているので、ご利用いただく場合は確認してみて下さい。

起動画面はこのようになっています。

VB.NETソースファイル退避(画面)

このような起動画面です。

各項目は以下のような機能になっています。

画面項目 説明
システムタイトル 当該ソリューションのタイトルを任意に指定できます。 システムタイトル別にフォルダ設定などは設定に保持されて2回目の利用以降はプルダウンで選択するだけで再現されるようになっています。
コピー元フォルダ 指定したシステムタイトルでコピーを行なうルートフォルダを指定します。右端の「-」ボタンでフォルダ検索フォームが現われて指定できますが、多くの場合はフォルダウィンドウ(エクスプローラ)からドラッグ&ドロップで指定する方が簡単です。
通常はソリューションのルートフォルダを指定するものです。
コピー先フォルダ 退避させる先のフォルダを指定します。右端の「-」ボタンでフォルダ検索フォームが現われて指定できますが、多くの場合はフォルダウィンドウ(エクスプローラ)からドラッグ&ドロップで指定する方が簡単です。
ソリューション名(またはコピー元最下層)のフォルダはこの中に作成されるのでその上位フォルダを指定するものです。
コピーを除外するフォルダ コピー元のルートフォルダの配下で全くコピーする必要がないサブフォルダがあれば指定します。右端の「-」ボタンでフォルダ検索フォームが現われて指定できますが、多くの場合はフォルダウィンドウ(エクスプローラ)からドラッグ&ドロップで指定する方が簡単です。どちらの方法でも複数のフォルダが一度に指定でき、一旦指定してから再度ほかのフォルダを指定する場合は追加なのか置き換えなのかの確認が行なわれるようになっています。
各プロジェクト配下の「bin」「obj」フォルダ以下は元々コピーしない仕様になっています。 開発プロジェクト担当者の側でこれら以外に一時利用などでコピー不要なフォルダを作成している場合でコピー不要なフォルダがある場合は指定して下さい。
コピーを除外するフォルダは複数指定できます。
objフォルダはコピー除外しない(オプション) 本ソフトではビルドで再生成可能なファイルは退避側にコピーしないことが主旨なのですが、大きなソリューションでない場合はリソース上での効果があまりないことがあり、 単なるバックアップツールとしての利用もあることから、本項を用意しています。
binフォルダはコピー除外しない(オプション) 本ソフトではビルドで再生成可能なファイルは退避側にコピーしないことが主旨なのですが、大きなソリューションでない場合はリソース上での効果があまりないことがあり、 単なるバックアップツールとしての利用もあることから、本項を用意しています。
ZIP型式で圧縮
(コピー後の処置)
コピー元フォルダ名がファイル名となってZIP型式で圧縮されます。コピー先フォルダ自体はそのまま残ります。
ZIP型式での圧縮には「7-ZIP32.dll」が必要です。
LHA型式で圧縮
(コピー後の処置)
コピー元フォルダ名がファイル名となってLHA型式で圧縮されます。コピー先フォルダ自体はそのまま残ります。
LHA型式での圧縮には「UNLHA32.dll」が必要です。
圧縮ファイルは作成しない
(コピー後の処置)
圧縮ファイルは作成されずにフォルダのコピーのみとなります。
圧縮ファイル名に処理日の日付を表意
(コピー後の処置)
ZIP、LHA型式圧縮ファイルを作成する場合にファイル名の後ろにYYYYMMDD型式で日付を表意させます。
世代で退避させる場合に以前に作成した圧縮ファイルを上書きしてしまうことがなくなるので便利です。
パスワード使用
(コピー後の処置)
ZIP型式で圧縮」を指定した時のみパスワードの指定ができます。
チェックを付けると右のパスワード項目が入力できるようになります。
圧縮ファイル名 通常はコピー元フォルダ名がそのまま圧縮ファイル名になりますが、任意に変更したい場合はここで指定できます。
指定する場合はフォルダ構成や拡張子を含まないファイル名文字列を指定します。
新規システム
(メニュー)
表示中の内容を消去する(登録済みのプルダウンリストのテーブルは維持)
システムタイトルの削除
(メニュー)
プルダウンリストから選択されている現在表示中のリスト要素を削除する。
除外サブフォルダを消去
(メニュー)
表示中の除外サブフォルダを消去する。
概要説明
(メニュー)
概要説明のテキストを表示します。

いかがでしょうか?
動作が保証されている大きなソース管理の仕組みがあって、リリース時点のスナップショットも問題ないのであれば、この仕組みは必要ありませんが、 まず、サーバにソースを置いた状態での開発はクライアントのIDEでビルドするのが時間が掛かるし、 クライアントを切り離してサーバ上でビルドするのでは「昔のホスト系」のような開発になってしまうような気がします。
(いろいろ調べていないので最新の開発スタイルを理解してはいません)
また、開発を終えたサブシステムについても仕様変更等が随時入るのでDLL参照に切り替えることもしていません。
少人数での開発に大きな仕組みを持ち込めないこともあって、考えたのがこの方法なのです。

どのファイルをコピーしたかなどの処理ログは処理の終了時に専用メッセージボックスで表示されます。 このメッセージボックスはドラッグで大きさを変えたり、右クリックで文面をコピーすることもできるようになっています。

インストールについて
下記の「ダウンロード」からインストーラが収容されたZIP形式の圧縮ファイルがダウンロードできます。



動作環境はMicrosoft .NET Framework 4.*(4.5~4.8)です。
本アプリケーションは32ビット版ですが、Windows64ビット版でも問題ありません。



当然ながら、Microsoft Excel(32ビット版のみ対応)がインストールされていることが利用の前提条件となります。

解凍してから「VBCopySourceFiles1_Setup.exe」を起動することでインストールが行なわれます。インストール後はスタートメニューの「すべてのプログラム」から「Excelでお仕事!VisualStudioツール」の中にある「VB.NETソースファイル退避」を起動して下さい。 なお、デジタル証明書は搭載していないので、インストール中の確認画面で発行元は「不明」と表示されます。

アンインストールを行なう場合は、コントロールパネルの「プログラムと機能(プログラムの追加と削除)」から「VB.NETソースファイル退避」を選択して「削除」を実行します。
本ソフトではレジストリは使用していません。画面モードの設定保存はMicrosoft .NET Frameworkの設定保持機能を使っています。

著作権等について
本ソフトの著作権は「Excelでお仕事!(井上 治)」が所有しています。
フリーソフトですのでご自由にダウンロードしてご利用いただけます。 但し、動作確認は充分に行なっておりますが、このソフトを使ったことによって損害が発生しても一切の責任は負えません。

本記事内容の転載についてはアーカイブに変更を加えないことを条件に、転載は自由にして頂いて構いませんが、必ずご連絡いただくようにお願いします。 連絡については当サイトの「意見・質問」ペ-ジが利用できます。
また、不具合や改善点などについてもご連絡いただけると幸いです。

バージョン情報

更新日 Ver 内容
2013/01/08 1.2.0.0 初回リリース
2013/02/12 1.2.1.0 ZIP圧縮時にパスワードの設定機能を追加
2013/02/14 1.2.1.1 ステータスバーの表示可能文字長(Bytes)算出不具合を修正
2013/02/28 1.2.1.2 フォームの位置の退避・復旧で複数スクリーン環境に対応
2013/03/28 1.2.1.3 独自メッセージボックスがEscキーで閉じてしまう件の対応
2013/05/28 1.2.1.4 ボタンやメニューアイテムのダブルクリック対策を適用
2013/09/04 1.2.1.5 単一インスタンスAPPへの変更
2014/04/23 1.2.1.5 本ドキュメントのメールアドレスを変更
2014/08/11 1.2.1.6 インストーラを自動インストール書庫形式に変更
2014/08/31 1.2.1.7 DPI制御をフォーム変倍方式に変更
2015/09/04 1.2.1.8 グループボックスの境界の見にくさを改善
2015/09/08 1.2.1.9 システムタイトル(コンボ)でのイベント動作を修正
2015/11/10 1.2.1.10 パス名接合不具合の修正対応、終了時に結果ログを表示させる対応
1.2.1.11 除外フォルダの右\除去対応を追加
2016/01/17 1.2.1.11 Windows10での動作確認を行なったので記載を変更
2016/03/06 1.2.1.12 メニューのToolTipガイドを追加
2018/10/06 1.2.2.0 DPI環境で起動時フォーム位置がスクリーン領域外になってしまうことが発生する件の対応
2018/11/04 1.2.2.1 画面位置保持機能について複数画面時の個別DPI指定に対応する修正②
2018/11/23 1.2.3.0 圧縮ファイル名の指定機能を追加
.vs」フォルダを退避アイテムから除外する対応
「新規システム」時にコピー先フォルダはクリアしない対応
2021/12/06 1.3.0.0 開発環境を「Microsoft Visual Studio 2010」から「Microsoft Visual Studio 2019」に変更
2021/12/06 1.3.0.0 フレームワーク環境を「.NET Framework4.x」に変更
(ターゲットフレームワークは「.NET Framework4.5」に設定)
2022/05/14 1.3.0.2 ・開発環境を「Microsoft Visual Studio 2022」に変更
Windowsスタートメニューメンバの整理(概要説明リンクの削除⇒本体メニューから呼び出し可能)
2022/12/18 1.3.0.3 圧縮ファイル名指定機能の動作不具合を修正
2022/12/25 1.4.0.0 bin,objフォルダのコピー可否をオプション指定可能とする変更
2023/01/15 1.4.1.0 独自メッセージボックス変更(マウス既定ボタンモード対応)

※バージョンアップでのインストール時に動作上は正常にインストールされるものの、EXEファイルが置き換わらない現象があるようです。 起動させるとステータスバーの右方にバージョンが表示されるので、新しいバージョンになっていない場合は一旦アンインストールさせてから再度インストールさせて下さい。

ダウンロードはこちら。

←VBCopySourceFiles1_Setup.zip
      (816KB)

VectorからもVB.NETソースファイル退避」でダウンロードできます。


.NET Frameworkの変更について   PCに搭載されている.NET Frameworkのバージョンはその有無を含めてWindows側の環境に依存します。
本プログラムは従来、古いWindowsへの対応から、.NET Framework2.0~3.5をターゲットとしていましたが、 現在では逆に.NET Framework3.5をインストールすることが必要となって余分な作業負荷となってしまってきているため、 Ver1.1.0.0より.NET Framework4.xに変更しました。



本プログラムを新規にインストールされる場合は必要な.NET Framework環境の確認だけでご利用いただけますが、 以前の.NET Frameworkバージョンから.NET Framework4.xにバージョンアップされる場合のみ設定やデータが引き継がれないのでご注意下さい。



手動作業での設定引き継ぎ(設定ファイルのコピー作業)バージョンアップ時の不具合については、こちらで説明しています。



一旦、.NET Framework4.x環境に移行した後の今後のバージョンアップについての設定内容は、自動的に引き継がれるようになります。