この
ここ |
ファイルの保存と管理に関するガイドラインを確立するには、アプリケーションがどのような構造になるか、機能をどのように分割するかについて事前に検討するとともに、ソースコードファイル以外にも変更の追跡が重要となるファイルタイプについて考察しておく必要があります。それには時間を十分に割いて、どのようにして機能のコードを分割するのかを決定し、ファイルの保存場所、追加ファイル、追加リソースについて開発者と一緒に検討して、これらを適切に機能させる必要があります。次のセクションでは、検討内容に基づいてディスク上でファイルを整理する際の基準を決定します。
ディスク上でファイルを整理する方法は、後になってから考えるのではなく、前もって検討する必要があります。大規模なアプリケーションでは、この点について十分に計画しておかないと、開発中にファイルの移動やファイル名の変更が生じて余分な時間がかかってしまいます。管理すべきファイルが多数あるときに、このようなファイル操作を繰り返すと、LabVIEW内部におけるリンクの整合性や、アプリケーションの動作に重大なリスクをもたらす可能性があることに留意してください。ファイルの整理方法をなるべく早い段階で確立しておけば、後日多数のファイルをまとめて移動するリスクが軽減され、ファイルの検索や新規ファイルの保存先の決定が容易になります。
ソフトウェア開発者の多くは、ファイルの保存場所を決定する手法とシステムをすでに実践しています。利用可能な手法と構造の組み合わせはたくさんありますが、以下にご紹介するのは、大規模なアプリケーションにも応用できることが証明されている、確立された一般的な手法です。ファイルを単一のルートディレクトリに格納すると、必要なファイルのすべてに簡単にアクセスできます。また、命名規則を定めることで、ファイルの検索場所や新規ファイルの保存場所がわかりやすくなります。ハードドライブ上のフォルダ構造を利用してファイルをグループ化し、分類する方法が一般的です。たとえば、サブVIと発呼者を分離します。これとは対照的に平坦なディレクトリ構造では、ファイルを検索することも、トップレベルVIを見つけることも難しく、たとえVIの数が少ない場合でも推奨されません。ファイルをグループ化するときには、通常、アプリケーション内におけるファイルの機能、タイプ、階層構造の組み合わせを基準にして検討します。実際には、アプリケーション内のファイルとコードの関係性を物理的に表すような形で、ディスクを整理する必要があります。
図1: LabVIEWプロジェクトエクスプローラを使用せずに、ディスク上でサンプルのアプリケーションを整理した例
図1では、すべてのファイルをルートディレクトリ内にまとめて整理し、トップレベルVIを依存項目から分離するなどのコンセプトと、各フォルダにファイルを仕分けするためのさまざまな基準が例示されています。
動的にロードされるファイルについては別の問題があり、しばしば特別な配慮を必要とします。動的にロードされるファイルには、アプリケーション内の発呼者との静的なリンクが一切存在しません。そのため、ファイルの格納場所を移動したとき、または何らかの形でファイルパスを変更したときに、その場所がどこかわからなくなったり、忘れ去られたりすることが起こりがちです。
このような問題をできる限り防いで、動的にアクセスされるファイルのすべてを正しい場所に保管するには、これらのファイルを別々のフォルダに仕分けして、相対パスで参照します。そうすれば、アプリケーションの移動や配布が必要になったときでも、そのフォルダを含めるだけで、必要なファイルを確保することができます。
大規模なアプリケーションでコードを共有する場合、動的にアクセスされるファイルの保管場所と、その変更によって他の発呼者に対して与える想定外の影響について留意することが重要です。完成済みのコードを活用して開発期間を短縮できることから、コードの再利用は一般的かつ奨励される手段です。類似する複数のアプリケーションで同様の機能性が必要とされたり、異なるブランチ (分岐) のコードで共通するVIのセットが参照されたりすることがあります。同じコードを参照する処理では、多くの場合、このようなファイルを少なくとも1つのアプリケーションのルートディレクトリの外部に置く必要があります。ただし、このような共通VIに変更を加える予定がある場合には、ローカルコピーを作成してテストを行い、後から統合します。
また、ソースコード管理ツールを利用すると、ソフトウェアの複数のバージョンを追跡して、改訂作業によって生じた変更箇所を比較することができます。ソース管理の詳細については、『LabVIEWでソース管理を使用する』を参照してください。
VIのサイズや数が増大しても問題なく開発規模を拡大できるようにするには、ディスク上のアプリケーションを整理することは欠かせません。ただし、これはプロセスの最初のステップに過ぎません。大規模開発特有の課題は他にもたくさんありますが、LabVIEWプロジェクトエクスプローラなど、さらに高度な手法と高機能のツールを用いることで対処できます。
プロジェクトエクスプローラはLabVIEW 8.0で導入され、これによって開発者はアプリケーションに必要なファイルをシステムレベルで確認できるようになりました。LabVIEWプロジェクトエクスプローラは、開発環境内部で簡単にファイルを検索し、整理できるように開発者を支援し、大規模LabVIEWアプリケーションの管理と開発という課題に対応するための機能を提供することを目的としています。LabVIEWプロジェクトエクスプローラの初回リリース以降、NIはお客様のご意見を基にして数々の新機能を実装してきました。プロジェクトエクスプローラウィンドウの最新バージョンに関する詳細は、『LabVIEWヘルプ』のトピック「Managing a Project in LabVIEW」を参照してください。
図2: 図1と同じアプリケーションをLabVIEWプロジェクトエクスプローラで整理した場合
LabVIEWプロジェクトを使用すると、LabVIEWファイルやその他のファイルをグループにまとめ、ビルド仕様を作成し、ファイルをターゲットにデプロイまたはダウンロードできます。LabVIEWプロジェクトを保存すると、.lvprojというファイルが作成されます。このファイルには、ディスク上のファイルへのリファレンス、変数、ハイパーリンク、構成情報、ビルド情報、デプロイメント情報などが格納されます。
LabVIEWプロジェクトエクスプローラによって、既存のファイルがディスク上の新しい場所へ複製またはコピーされることはありません。その代わり、ディスク上のファイルが新たな方法で表示されるほか、ディスク上のファイル格納場所へのショートカットが用意されます。LabVIEWプロジェクトエクスプローラを使用すると、以下のことが可能になります。
1このトピックは、この記事では取り上げません。
この記事で説明されている機能の一部は、LabVIEW 8.5以降でのみ利用できることにご注意ください。LabVIEW最新版の新機能については、「LabVIEWの新機能」を参照してください。
LabVIEWプロジェクトでは、項目ページとファイルページの2箇所にファイルが表示されます。
図3: ファイルページには、プロジェクト内のすべての項目がフィルタ処理されてディスク上の場所が表示され、コピーやファイル名の変更などのファイル操作も可能
デフォルトで表示されるのは項目ページです。このページでは、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 8.5では、LabVIEWプロジェクトで開発者がクロスリンクを検出して解決するために役に立つ新機能が複数導入されました。
図5: LabVIEWは競合を自動的に通知することができる
クロスリンク関連で最も便利な機能と言えるのは、VIが呼び出しているサブVIがLabVIEWプロジェクトに追加されたファイルと同じ名前であるかどうかを、LabVIEWプロジェクトで判別できる機能でしょう。LabVIEWは、ファイルアイコンに黄色の警告を表示して通知します。このとき、さらにファイル情報を確認して、どのファイルが正しいバージョンかを判断するには、以下の方法があります。
クロスリンクを確認してリンクの修正方法を決定したら、手作業で修正することも、LabVIEWプロジェクトエクスプローラのツールを使用して、その指示に沿って修正することもできます。
LabVIEWによって競合を検出した後、いくつかの方法を使ってその競合を解決することができます。以下の推奨事項に従うと、サブVIへのリンクを確実に保持しながら、必要な変更を行うことができます。
プロジェクトの競合を解決ダイアログボックスを使用すると、上記の推奨事項を自動で実行できます。プロジェクトエクスプローラウィンドウからプロジェクト→競合を解決を選択し、プロジェクトの競合を解決ダイアログボックスを表示します。競合を解決ツールバーボタンをクリックする、またはLabVIEWプロジェクトエクスプローラウィンドウで競合する項目を右クリックしてショートカットメニューから競合を解決を選択しても、このダイアログボックスを表示できます。
図6: 正しいサブVIを選択するよう促しているプロジェクトの競合を解決ダイアログボックス
このダイアログボックスに含まれるコンポーネントは、以下のとおりです。
このダイアログボックスを使用する場合、正しいパスから依存項目を呼び出すよう競合項目をリダイレクトすることで競合を解決します。
この記事の推奨事項を活用することで、確実にアプリケーション開発の規模を拡大するための開発およびアプリケーション管理のガイドラインを確立することができます。ディスク上のファイルを組織化する方法について十分に検討してから、ファイル分類の基準を確立してください。LabVIEWプロジェクトエクスプローラを使用してアプリケーションをシステムレベルで表示することで、ファイルへのアクセスが容易になるほか、クロスリンク検出ツールを最大限活用できるようになります。