この記事で扱っていること
- ビルドしたファイルをビルドバージョンごとに自動でフォルダ管理する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWで作成したプログラム、アプリケーションは、ビルドしてEXE形式にすることで、LabVIEWの開発環境がないPCでも実行できるようになります(開発環境はいりませんが、対応するLabVIEWランタイムエンジンは必要です)。
ただ、アプリケーションの開発は一度ですんなり終わる場合もあれば、何度もバグ修正や改善を重ねることもあり、内容によってバージョン変更を行うことになります。
プログラムのソースコードのバージョン管理しかり、ビルドして生成したEXEファイルのバージョン管理も重要ですが、これを手動で行うとなると、ヒューマンエラーの危険性(?)がつきまとい、正しい管理ができなくなる恐れがあります。
そこで、ビルドして生成されたファイルをバージョンごとにフォルダに移動するところまでを自動的に行わせるような仕組みを用意します。
この仕組みは、ビルド仕様のカテゴリで、ビルド後の動作を指定することで実現できます。
どんな結果になるか
ビルドのバージョンは、デフォルトの状態でも「自動更新」されるので、特に意識してバージョン情報を編集しなくてもビルドするごとに変わっていきます。
ビルド仕様の「バージョン情報」カテゴリで、今何のバージョンかを知ったうえで、ビルドしてみます。
ビルドしこれが特にエラーなく終了すると、そのビルドのバージョンの数字が付いたフォルダが自動的に作成され、そこに生成されたEXEファイル(およびiniファイル等)が入ります。
例えばビルドバージョンが0.0.0.1であれば、XXX\0\0\0\1のフォルダに入る、という感じです。(XXXの部分はプログラムで指定します)
次にビルドすると、新しいバージョンになりますが、そのバージョンのフォルダが自動的に作成されていきます。
プログラムの構造
この仕組みを作るためには、「ビルド後の動作」を用意します。
これは、ビルド操作によってEXEが作成された後に特定の処理を実行したいときに設定するもので、実体としてはviなのですが、テンプレートから作成していきます。
テンプレートを入手するためには、ビルド仕様の「ビルド前/後の動作」カテゴリに進み、ビルド後の動作用に「VIを生成」ボタンをクリックするだけです。
ボタンをクリックするとテンプレートviをどこに保存するか聞かれますが、このテンプレートはプロジェクトエクスプローラに追加されるため、そのプロジェクトエクスプローラに近いパスを指定し保存、その後ビルド仕様のウィンドウを「OK」で閉じます。(閉じることでプロジェクトエクスプローラに追加されます)
デフォルトの名前はPost Build Action.viとなっていて、これはこれでわかりやすい名前なので変更せず使っていきます。
テンプレートviにはいくつか制御器や表示器が既にありますが、これらは消さないで、必要なものだけプログラムで使用していきます。
今回は以下のようなプログラムを書きました。
テンプレートviにあらかじめ用意されているFiles Generated by Buildのパス制御器配列をForループに配線し、この配列の中で拡張子がexeになっているものを抜き出し、そのexeファイルの情報(今回はバージョン)を使ってフォルダを生成していきます。
EXEファイルからバージョンの情報を取得するために、今回はインボークノードを使用して.NETクラスのFileVersionInfoを指定しリファレンスを取得しています。
バージョンの数値から都度都度フォルダを作成していくという手もありますが、一気にパスの情報を作ってから「再帰ディレクトリを作成」関数(ファイルI/Oパレットの上級ファイル関数にあります)を使うのが便利です。
以下の図では、最初の「パス作成」に対してDestination Path(これもテンプレートviにあらかじめあるパス制御器)を配線していますが、必ずしもこのパスでなくてはいけないということはありません。
このFileVersionInfoは.NETクラスから参照していきます。
まずインボークノードを選択し、ブロックダイアグラムに配置後右クリックして、クラスを選択する中で.NETクラスを選びます。
参照ウィンドウにてアセンブリとしてSystemを選択し、ここからSystem.Diagnosticsを選んでその中のFileVerisionInfoを選びます。
メソッド名はGetVersionInfoになります。
バージョンごとにメモ書きを残す
フォルダを分けて各バージョンを分けるのに加えて、それぞれのバージョンごとに簡単なメモを残すようにしておくとなお便利です。
ビルド後のアクションで、ユーザーが入力できるようにし、そのメモファイルも一緒のフォルダに入れておくようにしておくことができます。
以下の図は実装の例で、(バージョン情報の文字列)+memo.txtというファイルを追加する場合にはこのように処理させることができます。
上のブロックダイアグラムで使っているmemo input.viの中身は以下の通りで、シンプルに文字列制御器(と表示器、ただし表示器はフロントパネルのウィンドウ外に配置)とブール制御器のボタンがあるだけとしています。
memo input.viを開いた状態でCtrl + IでVIプロパティを開き、「ウィンドウの外観」カテゴリにてダイアログの設定をしておくと、実行時にそれっぽい見た目のウィンドウになるので今回はこの見た目を採用しています。
本記事では、ビルドしたファイルをビルドバージョンごとに自動でフォルダ管理する方法を紹介しました。
なるべく人の手が入らず自動化できるところは自動化するようにすることで、快適な開発環境を用意するための参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント