モデル ツールはジオプロセシング フレームワークに完全に統合され、すべてのシステム ツールまたはスクリプト ツールと同様に使用できます。他のすべてのジオプロセシング ツールと同様に、モデル ツールはダイアログ ボックスや Python スクリプトから実行することができ、別のモデルに追加して実行することもできます。
モデル ツールを別のモデルに追加して実行するという考え方は、サブモデル、ネストされたモデル、またはモデル内のモデルと呼ばれます。このようなモデル階層を使用する主な理由は、大規模で複雑なモデルを単純にすること、およびモデル イテレータをより高度に利用することの 2 つです。
大規模で複雑なモデルの単純化
モデル ツールを別のモデルに埋め込むことで、大規模で複雑なプロセスを、管理しやすく、別のモデルまたはスクリプトで再利用しやすい、小さなモデル単位に分割することができます。プロセス全体を再実行することなく、これらのサブモデルだけを変更および再実行できます。たとえば、あるサブモデルでエラーが発生した場合は、エラーが発生したモデルだけを修正し、プロセス全体をもう一度実行する代わりに、そのモデルだけを再実行します。
上の図に示すモデルは、4 つのサブモデルと 1 つのメイン モデルに分割できます。小さいサブモデルをメイン モデルに追加して、最終プロセスに接続できます。サブモデルを別のモデルに追加すると、サブモデルの最終出力が出力変数として追加されます。
モデル イテレータの高度な使用
モデル ツールを別のモデルに埋め込む場合は、モデル イテレータのより高度な利用も可能です。ワークフローでモデルの反復処理が必要な場合、2 回以上の実行が必要なツールまたはプロセスは、各ワークフローで一度しか実行する必要がないツールまたはプロセスと分離する必要があります。この場合、複数回の実行が必要なすべてのツールをモデル イテレータとともに 1 つのモデル内に配置して、サブモデルとして使用します。1 度しか実行する必要がないツールはメイン モデルに配置して、反復処理を行うサブモデルをメイン モデルから呼び出します。
次の例は、ジオデータベースからの入力セットをマージする自動化されたワークフローです。[マージ(Merge)] ツールは、複数のフィーチャクラスをマージ対象の入力として受け取りますが、特定のワークスペースにあるすべてのフィーチャクラスを自動的に追加する手段はありません。この場合は、[フィーチャクラスの反復(Iterate Feature Classes)] モデル イテレータと [値の収集(Collect Values)] ツールを組み合わせて、ワークスペースにあるすべてのフィーチャクラスを読み取り、これらを 1 つの変数に収集することができます。これらの 2 つのプロセスは、複数回実行する(反復処理を行う)必要があるためサブモデルに追加します。[マージ(Merge)] ツールは、1 度しか実行する必要がないためメイン モデルに追加して、[フィーチャクラスの反復(Iterate Feature Classes)] と [値の収集(Collect Values)] を追加したサブモデルの出力に接続します。
次に、上のワークフロー全体を作成する方法を、手順ごとに説明します。使用されている用語と手法については、「ModelBuilder の基本用語」をご参照ください。
- メイン モデルとサブモデルの 2 つのモデルを作成します。サブモデルはメイン モデル内にネストします。メイン モデルに [マージ(Merge)] ツールを追加し、サブモデルに [フィーチャクラスの反復(Iterate Feature Classes)] イテレータと [値の収集(Collect Values)] ツールを追加します。
- サブモデルで、マージ対象のフィーチャクラスを含むワークスペースを [フィーチャクラスの反復(Iterate Feature Classes)] イテレータの入力として設定します。ポイント フィーチャクラスだけを反復処理する場合は、[フィーチャクラスの反復(Iterate Feature Classes)] の [フィーチャ タイプ] パラメータを [POINT] に設定します。
- [フィーチャクラスの反復(Iterate Feature Classes)] の出力変数「出力フィーチャクラス」を [値の収集(Collect Values)] ツールに接続して、ワークスペース内の各ポイント フィーチャクラスのパスを反復処理して収集します。
- 入力ワークスペース変数と [値の収集(Collect Values)] ツールの出力を、モデル パラメータとして設定します。入力ワークスペース変数の「入力データセット」の名前を、変数の内容を表す、わかりやすい名前に変更します。
- サブモデルを保存して閉じ、メイン モデルにプロセスとして追加します。
- サブモデルの出力変数を、[マージ(Merge)] ツールの [入力データセット] として設定します。[マージ(Merge)] ツールの出力に、有効なパスが設定されていることを確認します。
- サブモデルの入力変数の名前を「入力データセット」に変更し、[マージ(Merge)] ツールの出力変数を「マージ出力」に変更します。「入力データセット」変数と「マージ出力」変数の両方を、モデル パラメータとして設定します。