モデルへのサブモデルの追加

ジオプロセシング モデルは、ツールボックスにモデル ツールとして保存されます。モデル ツールは、他のジオプロセシング ツールのように [ジオプロセシング] ウィンドウから実行したり、他のモデルや Python スクリプトで使用したりできます。

モデル ツールを別のモデルに追加して実行するという考え方は、サブモデル、ネストされたモデル、またはモデル内のモデルと呼ばれます。モデル内のモデルを使用すると、大規模なモデルを管理が容易で再利用できる小さなモデルに分割することができます。

サブモデルをモデルに追加するには、次の手順に従います。

  1. 他のモデルから呼び出す処理を実行するモデル (サブモデル) を作成します。このサブモデルは別のモデル内で実行されるため、モデル ツールのプロパティパラメーターの設定など、モデル ツールのベスト プラクティスに従ってサブモデルを作成する必要があります。

    サブモデルに組み込むモデルの一部がすでに存在する場合は、モデル変数およびプロセスをコピーして新しいモデルに貼り付けるか、それらをグループ化して [グループを新しいモデルとして保存] コマンドを使用できます。

  2. 上記の手順が完了し、モデルを別のモデルに追加する準備ができたら、必ず元のモデルを保存してください。
  3. 新しいメイン モデルを編集または作成します。
  4. いずれかの方法でツールをモデルに追加し、サブモデルをメイン モデルに追加します。サブモデルがプロジェクト ツールボックス内に存在しない場合は、[カタログ] ウィンドウでサブモデルを見つけてメイン モデル内にドラッグする必要があります。

    サブモデルの入力および出力データ パラメーターは、自動的にメイン モデルの変数になります。サブモデルを右クリックし、[変数の作成] > [パラメーターから] > <パラメーターを選択> の順にクリックすることで、サブモデルの追加パラメーターをモデルの変数として公開できます。

モデル内のモデルを使用する主な 2 つの理由は次のとおりです。

  • 大規模で複雑なモデルを、小さく管理しやすいモデルに単純化する。
  • 大規模なモデルの 1 つのエリア内で、モデル反復子を使用できるようになる。

大規模で複雑なモデルの単純化

モデル ツールを別のモデルに埋め込むことで、大規模で複雑なプロセスを、管理しやすく、別のモデルまたはスクリプトで再利用しやすい、小さなモデル単位に分割することができます。大規模で、潜在的に扱いにくいモデルを編集したり、プロセス全体を再実行したりすることなく、これらのサブモデルだけを変更および再実行できます。たとえば、あるサブモデルでエラーが発生した場合は、エラーが発生したモデルだけを修正し、プロセス全体をもう一度実行する代わりに、そのモデルだけを再実行します。

大規模なモデル
4 つのサブモデルに分割できる大規模なモデルと、4 つのサブモデルを実行する 1 つのメイン モデルの例を示します。

上の図に示すモデルは、4 つのサブモデルと 1 つのメイン モデルに分割できます。小さいサブモデルをメイン モデルに追加して、最終プロセスに接続できます。サブモデルを別のモデルに追加すると、サブモデルの出力パラメーターが出力変数として追加されます。

メイン モデルへのサブモデルの追加

モデル反復子の高度な使用

モデル ツールを別のモデルに埋め込む場合は、モデル反復子の高度な利用も可能です。ワークフローでモデルの反復処理が必要な場合、2 回以上の実行が必要なツールまたはプロセスは、各ワークフローで一度しか実行する必要がないツールまたはプロセスと分離する必要があります。

メモ:

モデル反復子の下流にあるツールだけが複数回実行されるというのは誤解です。実際には、モデルに反復子が含まれる場合、モデル内のすべてのプロセスが複数回実行されます。

複数回の実行が必要なすべてのツールをモデル反復子とともに 1 つのモデル内に配置して、サブモデルとして使用します。1 度しか実行する必要がないツールはメイン モデルに配置して、反復処理を行うサブモデルをメイン モデルから呼び出します。

次の例は、ジオデータベースからの入力セットをマージするワークフローです。[マージ (Merge)] ツールは、複数のフィーチャクラスをマージ対象の入力として受け取りますが、特定のワークスペースにあるすべてのフィーチャクラスを自動的に追加する手段はありません。この場合は、[フィーチャクラスの反復 (Iterate Feature Classes)] モデル反復子と [値の収集 (Collect Values)] ツールを組み合わせて、ワークスペースにあるすべてのフィーチャクラスを読み取り、これらを複数値の変数に収集することができます。これらの 2 つのプロセスは、複数回実行する (反復処理を行う) 必要があるためサブモデルに追加します。[マージ (Merge)] ツールは、1 度しか実行する必要がないためメイン モデルに追加して、反復子を含むサブモデルの出力に接続します。

メイン モデルとサブ モデル

次に、上のワークフロー全体を作成する方法を、手順ごとに説明します。使用されている用語と手法については、「ModelBuilder の用語」をご参照ください。

  1. メイン モデルとサブモデルの 2 つのモデルを作成します。サブモデルはメイン モデル内に追加します。メイン モデルに [マージ (Merge)] ツールを追加し、サブモデルに [フィーチャクラスの反復 (Iterate Feature Classes)] 反復子と [値の収集 (Collect Values)] ツールを追加します。
  2. サブモデルで、マージ対象のフィーチャクラスを含むワークスペースを [フィーチャクラスの反復 (Iterate Feature Classes)] 反復子の入力として設定します。ポイント フィーチャクラスだけを反復処理する場合は、[フィーチャクラスの反復 (Iterate Feature Classes)][フィーチャ タイプ] パラメーターを [POINT] に設定します。
  3. [フィーチャクラスの反復 (Iterate Feature Classes)] の出力変数「出力フィーチャクラス」を [値の収集 (Collect Values)] ツールに接続して、ワークスペース内の各ポイント フィーチャクラスのパスを反復処理して収集します。
  4. 入力ワークスペース変数と [値の収集 (Collect Values)] ツールの出力を、モデル パラメーターとして設定します。入力ワークスペース変数の「入力データセット」の名前を、変数の内容を表す、わかりやすい名前に変更します。
    サブモデルの設定
  5. サブモデルを保存して閉じ、メイン モデルにプロセスとして追加します。サブモデルをメイン モデルに追加すると、サブモデルのパラメーターが変数として自動的にメイン モデルに追加されます。
    サブモデルの追加
  6. サブモデルの出力変数を、[マージ (Merge)] ツールの [入力データセット] パラメーターとして接続します。[マージ (Merge)] ツールの出力に、有効なパスが設定されていることを確認します。