プロジェクトクスローラNI LabVIEWアプリケーション管理するベストィス

概要

この記事は、LabVIEW大規模アプリケーション開発するための​ソフトウェア​エンジニアリング手法そのツールに関するシリーズ一部です。

ここクリックすると、他の記事一覧表示できます。


この記事ではLabVIEWプロジェクトについて詳しく解説しながら、LabVIEWアプリケーションを管理および整理する上で役に立つ推奨事項をご紹介します。これらの推奨事項を活用し、実際に開発を始める前にガイドラインと手順を確立することで、多数のVIを使用し複数の開発者で作成するアプリケーションを確実に拡張できるようになります。

内容

アプリケーションファイル定義および識別する

ファイルの保存と管理に関するガイドラインを確立するには、アプリケーションがどのような構造になるか、機能をどのように分割するかについて事前に検討するとともに、ソースコードファイル以外にも変更の追跡が重要となるファイルタイプについて考察しておく必要があります。それには時間を十分に割いて、どのようにして機能のコードを分割するのかを決定し、ファイルの保存場所、追加ファイル、追加リソースについて開発者と一緒に検討して、これらを適切に機能させる必要があります。次のセクションでは、検討内容に基づいてディスク上でファイルを整理する際の基準を決定します。

ディスク上のファイル整理する

ディスク上でファイルを整理する方法は、後になってから考えるのではなく、前もって検討する必要があります。大規模なアプリケーションでは、この点について十分に計画しておかないと、開発中にファイルの移動やファイル名の変更が生じて余分な時間がかかってしまいます。管理すべきファイルが多数あるときに、このようなファイル操作を繰り返すと、LabVIEW内部におけるリンクの整合性や、アプリケーションの動作に重大なリスクをもたらす可能性があることに留意してください。ファイルの整理方法をなるべく早い段階で確立しておけば、後日多数のファイルをまとめて移動するリスクが軽減され、ファイルの検索や新規ファイルの保存先の決定が容易になります。

ソフトウェア開発者の多くは、ファイルの保存場所を決定する手法とシステムをすでに実践しています。利用可能な手法と構造の組み合わせはたくさんありますが、以下にご紹介するのは、大規模なアプリケーションにも応用できることが証明されている、確立された一般的な手法です。ファイルを単一のルートディレクトリに格納すると、必要なファイルのすべてに簡単にアクセスできます。また、命名規則を定めることで、ファイルの検索場所や新規ファイルの保存場所がわかりやすくなります。ハードドライブ上のフォルダ構造を利用してファイルをグループ化し、分類する方法が一般的です。たとえば、サブVIと発呼者を分離します。これとは対照的に平坦なディレクトリ構造では、ファイルを検索することも、トップレベルVIを見つけることも難しく、たとえVIの数が少ない場合でも推奨されません。ファイルをグループ化するときには、通常、アプリケーション内におけるファイルの機能、タイプ、階層構造の組み合わせを基準にして検討します。実際には、アプリケーション内のファイルとコードの関係性を物理的に表すような形で、ディスクを整理する必要があります。

図1: LabVIEWプロジェクトエクスプローラを使用せずに、ディスク上でサンプルのアプリケーションを整理した例

 

図1では、すべてのファイルをルートディレクトリ内にまとめて整理し、トップレベルVIを依存項目から分離するなどのコンセプトと、各フォルダにファイルを仕分けするためのさまざまな基準が例示されています。

推奨事項

  • 単一のルートディレクトリにすべてのファイルを格納する
  • アプリケーションを、管理可能なサイズの論理単位に分割する
  • 論理的かつ記述的な命名規則を適用する
  • トップレベルVIを他のソースコードから分離する
  • 最初に、アプリケーションの主要なコンポーネントを配置した概要ブロック図を作成する (たとえば、このブロック図には構成、集録、解析、データ表示、データロギング、エラー処理に使用する異なるフレームワークを含めることができる)
  • あらかじめ定めた基準に従って、ファイルのグループ化や仕分けを実施する

動的依存共有コードに対する配慮

動的にロードされるファイルについては別の問題があり、しばしば特別な配慮を必要とします。動的にロードされるファイルには、アプリケーション内の発呼者との静的なリンクが一切存在しません。そのため、ファイルの格納場所を移動したとき、または何らかの形でファイルパスを変更したときに、その場所がどこかわからなくなったり、忘れ去られたりすることが起こりがちです。

このような問題をできる限り防いで、動的にアクセスされるファイルのすべてを正しい場所に保管するには、これらのファイルを別々のフォルダに仕分けして、相対パスで参照します。そうすれば、アプリケーションの移動や配布が必要になったときでも、そのフォルダを含めるだけで、必要なファイルを確保することができます。

大規模なアプリケーションでコードを共有する場合、動的にアクセスされるファイルの保管場所と、その変更によって他の発呼者に対して与える想定外の影響について留意することが重要です。完成済みのコードを活用して開発期間を短縮できることから、コードの再利用は一般的かつ奨励される手段です。類似する複数のアプリケーションで同様の機能性が必要とされたり、異なるブランチ (分岐) のコードで共通するVIのセットが参照されたりすることがあります。同じコードを参照する処理では、多くの場合、このようなファイルを少なくとも1つのアプリケーションのルートディレクトリの外部に置く必要があります。ただし、このような共通VIに変更を加える予定がある場合には、ローカルコピーを作成してテストを行い、後から統合します。

また、ソースコード管理ツールを利用すると、ソフトウェアの複数のバージョンを追跡して、改訂作業によって生じた変更箇所を比較することができます。ソース管理の詳細については、『LabVIEWでソース管理を使用する』を参照してください。

推奨事項

  • 動的にロードされる依存項目は、共通のフォルダに保存する
  • 動的な依存項目を参照する場合は相対パスを使用する
  • 複数のアプリケーションが共有するコードへの変更は最小限に抑える
  • 共有コードを変更するときは、その管理と統合の作業に十分な時間をかける
  • ソースコード管理を使用する

ディスク上のファイル整理まとめ

VIのサイズや数が増大しても問題なく開発規模を拡大できるようにするには、ディスク上のアプリケーションを整理することは欠かせません。ただし、これはプロセスの最初のステップに過ぎません。大規模開発特有の課題は他にもたくさんありますが、LabVIEWプロジェクトエクスプローラなど、さらに高度な手法と高機能のツールを用いることで対処できます。

LabVIEWプロジェクトクスローラ

プロジェクトエクスプローラはLabVIEW 8.0で導入され、これによって開発者はアプリケーションに必要なファイルをシステムレベルで確認できるようになりました。LabVIEWプロジェクトエクスプローラは、開発環境内部で簡単にファイルを検索し、整理できるように開発者を支援し、大規模LabVIEWアプリケーションの管理と開発という課題に対応するための機能を提供することを目的としています。LabVIEWプロジェクトエクスプローラの初回リリース以降、NIはお客様のご意見を基にして数々の新機能を実装してきました。プロジェクトエクスプローラウィンドウの最新バージョンに関する詳細は、『LabVIEWヘルプ』のトピック「Managing a Project in LabVIEW」を参照してください。

図2: 図1と同じアプリケーションをLabVIEWプロジェクトエクスプローラで整理した場合

LabVIEWプロジェクトを使用すると、LabVIEWファイルやその他のファイルをグループにまとめ、ビルド仕様を作成し、ファイルをターゲットにデプロイまたはダウンロードできます。LabVIEWプロジェクトを保存すると、.lvprojというファイルが作成されます。このファイルには、ディスク上のファイルへのリファレンス、変数、ハイパーリンク、構成情報、ビルド情報、デプロイメント情報などが格納されます。

LabVIEWプロジェクトエクスプローラによって、既存のファイルがディスク上の新しい場所へ複製またはコピーされることはありません。その代わり、ディスク上のファイルが新たな方法で表示されるほか、ディスク上のファイル格納場所へのショートカットが用意されます。LabVIEWプロジェクトエクスプローラを使用すると、以下のことが可能になります。

  • LabVIEW環境の中から、簡単にファイルにアクセスして操作できる
  • ファイルの整理方法を変更したりフィルタを適用したりできる
  • リンクを保持しながら、ディスク上のファイルの移動や名前変更を実行できる
  • 不正なリンクを防止、検出、および解決できる
  • 特定のハードウェアターゲット向けのコードを管理できる1
  • ビルド仕様を管理できる1
  • ソースコード管理ツールを統合できる1

1このトピックは、この記事では取り上げません。

この記事で説明されている機能の一部は、LabVIEW 8.5以降でのみ利用できることにご注意ください。LabVIEW最新版の新機能については、「LabVIEWの新機能」を参照してください。 

プロジェクトクスローラファイル管理する

LabVIEWプロジェクトでは、項目ページとファイルページの2箇所にファイルが表示されます。

図3: ファイルページには、プロジェクト内のすべての項目がフィルタ処理されてディスク上の場所が表示され、コピーやファイル名の変更などのファイル操作も可能

デフォルトで表示されるのは項目ページです。このページでは、LabVIEWプロジェクトに追加した項目がハードウェアターゲットごとにまとめられ、ツリー状に表示されます。項目表示でフォルダを作成すると、ファイルの整理方法を変更したり、ディスク上の特定の場所と同期できます。ほとんどの場合、項目ページで作業します。

項目ページでは、ディスクからファイルを削除することはできません。ユーザが誤ってコードを削除することのないように設計されています。ただし、ファイルページで項目を右クリックし、ディスクへ移動...を選択すると、コードをコンピュータ上のファイルとしてまとめることができます。

ファイルページでは、ディスク上に対応するファイルを持つ項目の実際の格納場所が表示されます。このページでは、移動、コピー、削除など、システムのファイルブラウザ内で行う通常のファイル操作が可能です。変更はLabVIEWによって認識されるため、変更が加えられたときにはLabVIEWによって発呼者が更新され、リンクが保持されます。

LabVIEWプロジェクトエクスプローラの中でファイル階層に変更を加えても、ディスク上のファイルのレイアウトには影響を与えません。それでも、LabVIEWプロジェクト内の階層構造は、できる限り実際のディスク上の階層構造を反映するようにしてください。

LabVIEWプロジェクトフォルダ使用する

仮想フォルダと自動更新フォルダの2種類のフォルダを使用して、LabVIEWプロジェクトの内容を整理することができます。仮想フォルダを使用すると、ディスク上の階層構造に変更を加えることなくプロジェクト項目の構造を変更できます。

図4: LabVIEWプロジェクトエクスプローラでファイルを整理するとき、自動更新フォルダと仮想フォルダのどちらかを選択できる

ディスク上の保存先に一切変更を加えることなく、LabVIEWのファイル構造を変更したい場合には、仮想フォルダが最適です。ディスク上のフォルダを、仮想フォルダとしてLabVIEWプロジェクトエクスプローラに追加すると、そのフォルダは追加時点でのスナップショットを表すことになります。後から新規にファイルを追加するなどの変更を加えても、その変更はLabVIEWプロジェクトに反映されません。ただし、LabVIEWプロジェクトに新しいファイルをドラッグするか、仮想フォルダを一時的に自動更新フォルダに変換することで、手動で変更できます。

仮想フォルダを使用すると、ディスク上の別々の場所にある複数のファイルを、LabVIEWプロジェクトエクスプローラ内でグループ化することができます。また、LabVIEWプロジェクトエクスプローラに表示する情報をフィルタ処理して表示することで、ファイルが不要な項目と同じグループにまとめられていないか確認することもできます。

自動更新フォルダは、ディスク上のフォルダ内容を自動的に反映できるようLabVIEW 8.5から導入されました。自動更新フォルダは、物理的なフォルダと同期しています。そのため、LabVIEW開発環境外部でフォルダに加えられたどのような変更も常に反映されます。できる限り自動更新フォルダを使用して、LabVIEWプロジェクトエクスプローラ内でディスクの階層構造を保持するようにしてください。プロジェクトライブラリやLabVIEWクラスの管理、または大量のクロスリンクの解決を目的として、自動更新フォルダを使用することは推奨されません。

推奨事項

LabVIEWプロジェクトエクスプローラで自動更新フォルダおよび仮想フォルダを使用して、アプリケーションの各ファイルを組織化および構造化しましょう。自動更新フォルダはディスク上の階層構造を保持するために最適な機能ですが、使用できない場合やカスタマイズが必要な場合があります。そのような場合は、LabVIEWプロジェクトエクスプローラで仮想フォルダを使用してファイルの構造をカスタマイズしてください。

依存項目

発呼者VIを開くと、静的にリンクされたすべてのサブVIがLabVIEWによって自動的にメモリにロードされます。発呼者VIがLabVIEWプロジェクトエクスプローラにロードされる際に、まだサブVIがLabVIEWプロジェクトに追加されていない場合には、該当するサブVIがLabVIEWプロジェクトエクスプローラの依存項目セクションに自動的に追加されます。LabVIEW 8.5以降、アプリケーション開発者が記述したファイルと他のファイルを識別しやすくするために、ユーザ依存項目がvi.libの内容から分離されています。

LabVIEWプロジェクトにファイルを追加すると、アプリケーションで使用されるファイルとリソースがLabVIEWによって認識されます。依存項目セクションを調べて、必要なファイルがすべてLabVIEWプロジェクトに追加されていることを確認してください。追加されていないファイルがある場合、このセクションにそのファイルが一覧表示されます。これは、目的とするサブVIのコピーを確実に使用できるようにするための重要な作業です。

LabVIEWプロジェクト内のVIが、誤ったサブVIにリンクされることがあります。そのような状況では、使用するサブVIのコピーをLabVIEWプロジェクトに追加したときに、同じ名前を持つ別のサブVIに1つ以上の発呼者が誤ってリンクされる可能性がLabVIEWに伝えられます。一般的に、この状況はクロスリンクと呼ばれます。 

クロスリンク

LabVIEWは、発呼者側で格納されている場所からサブVIを開く際、相対パスを使用します。想定された場所でサブVIが見つからない場合、名前でサブVIを検索します。LabVIEWは、その名前で検索して最初に見つかったサブVIをメモリにロードし、リンクが修正されたことをユーザに伝えます。名前は同じだが機能が異なるVI (Initialize.viなど) が複数ある場合、または同一VIに2つのバージョンがあって、それらが別々の場所に存在する場合、LabVIEWが誤ったファイルにリンクしてしまう可能性があります。

クロスリンク防ぐ

クロスリンクがよく発生するのは、ディスクの新しい場所にコードの階層構造を複製しようとして多数のファイルをまとめて移動またはコピーした場合です。相対パスが変わるとリンクが壊れて、アプリケーションが誤った依存項目セットに予期せずリンクされる可能性があります。

LabVIEWは、同じ名前を持つ2つの異なるVIをメモリにロードすることはできません。したがって、2つのアプリケーションを開いたときに、双方が同じ名前を持つ異なるサブVIを参照していると、一方のアプリケーションが誤った依存項目を使用して実行されることになります。

 推奨事項

ここに挙げるいくつかの対策を講じることによって、クロスリンクを防止することができます。

  • 共通の依存項目を持つ複数のアプリケーションを同じマシン上で同時に操作することを避ける
  • ソースコード管理アプリケーションを使用して、各ファイルの正確な格納場所を指定し、発呼者が正しくリンクされた状態を保持する
  • アプリケーションのセグメントの移動やコピーを避ける
  • すべてのファイルをLabVIEWプロジェクトに追加して、使用するリソースを指定する
  • Initialize.viなどの一般的な名称を使用しない
  • ネームスペースとしてプロジェクトライブラリを使用することで、一般的な​ファイル​​名​を​修飾​して一意の名前にする

競合識別する

正しいリンクを確保することは、すべてのプログラミング言語で共通する課題です。注意深く対処することによってクロスリンクの発生を最小限に抑えて、正しくリンクされたファイルのバックアップを作成することは可能です。ただし、大規模アプリケーションの開発ベンダにとっては依然として大きな懸念が残ります。LabVIEW 8.5では、LabVIEWプロジェクトで開発者がクロスリンクを検出して解決するために役に立つ新機能が複数導入されました。

図5: LabVIEWは競合を自動的に通知することができる

クロスリンク関連で最も便利な機能と言えるのは、VIが呼び出しているサブVIがLabVIEWプロジェクトに追加されたファイルと同じ名前であるかどうかを、LabVIEWプロジェクトで判別できる機能でしょう。LabVIEWは、ファイルアイコンに黄色の警告を表示して通知します。このとき、さらにファイル情報を確認して、どのファイルが正しいバージョンかを判断するには、以下の方法があります。

  • LabVIEWプロジェクトエクスプローラで、.lvprojファイルを右クリックして発呼者がない項目を検索を選択する。 トップレベルVI以外にリンクされていないVIがあれば、ここに表示されます。
  • VIを右クリックして検索→発呼者を選択し、そのVIの発呼者の有無と、発呼者VIを確認する。
  • メニューツールバーでプロジェクト→項目パスを表示を選択し、項目ページにあるすべてのファイルについてディスク上の位置を確認する。
  • ツールバーの競合を解決アイコンをクリックし、クロスリンクされたすべてのVIについて、その詳細を確認する。

クロスリンクを確認してリンクの修正方法を決定したら、手作業で修正することも、LabVIEWプロジェクトエクスプローラのツールを使用して、その指示に沿って修正することもできます。

 競合解決する

LabVIEWによって競合を検出した後、いくつかの方法を使ってその競合を解決することができます。以下の推奨事項に従うと、サブVIへのリンクを確実に保持しながら、必要な変更を行うことができます。

推奨事項

  • 自動更新フォルダ内に競合がある場合、自動更新を停止するか、またはファイルページで項目名を変更することによって競合を解決する。
  • 1つまたは複数の発呼者がLabVIEWプロジェクトエクスプローラ外部の誤ったサブVIにリンクされている場合は、LabVIEWプロジェクト内でこれらの発呼者VIのリンクを適切なサブVIに修正する。LabVIEWプロジェクトエクスプローラウィンドウで、競合が発生しているVIを右クリックし、ショートカットメニューから置換を選択して、ディスク上の正しいサブVIを選択する。この手順を繰り返して、残っているすべての競合を解決する。
  • 発呼者が同じ名前の複数の項目を参照しているものの、ディスク上には1項目のみが存在する場合、競合する項目を右クリックしてショートカットメニューからプロジェクトが検索した項目で置換を選択する。
  • 同じ名前の複数の項目がLabVIEWプロジェクトに追加されており、そのすべてをアプリケーション内で使用する場合、項目の名前を変更するか、または別々のプロジェクトライブラリに追加して名前を修飾する。

プロジェクトの競合を解決ダイアログボックスを使用すると、上記の推奨事項を自動で実行できます。プロジェクトエクスプローラウィンドウからプロジェクト→競合を解決を選択し、プロジェクトの競合を解決ダイアログボックスを表示します。競合を解決ツールバーボタンをクリックする、またはLabVIEWプロジェクトエクスプローラウィンドウで競合する項目を右クリックしてショートカットメニューから競合を解決を選択しても、このダイアログボックスを表示できます。 

図6: 正しいサブVIを選択するよう促しているプロジェクトの競合を解決ダイアログボックス

このダイアログボックスに含まれるコンポーネントは、以下のとおりです。

  • 競合 ― 修飾名でプロジェクトの競合を表示する。
  • 比較 ― 2つの競合するVIを比較する。
  • 選択された項目を使用 ― 使用する項目を選択する際に競合を解決する。競合リストにトップレベル項目のみが含まれる場合、LabVIEWは選択された項目を除き競合リスト内にあるすべての項目をLabVIEWプロジェクトから削除する。プロジェクトの競合を解決ダイアログボックスで自動更新フォルダを修正することはできない。その項目を手動で解決するか、フォルダを右クリックしてショートカットメニューから自動生成を停止を選択して自動更新フォルダを無効化することはできる。

このダイアログボックスを使用する場合、正しいパスから依存項目を呼び出すよう競合項目をリダイレクトすることで競合を解決します。

まとめ

この記事の推奨事項を活用することで、確実にアプリケーション開発の規模を拡大するための開発およびアプリケーション管理のガイドラインを確立することができます。ディスク上のファイルを組織化する方法について十分に検討してから、ファイル分類の基準を確立してください。LabVIEWプロジェクトエクスプローラを使用してアプリケーションをシステムレベルで表示することで、ファイルへのアクセスが容易になるほか、クロスリンク検出ツールを最大限活用できるようになります。

Was this information helpful?

Yes

No