ArcGIS 開発リソース集にて公開している「アイテムのクローン」ページではアイテムのクローンについて基本的な内容を紹介し、前回投稿した「Python を使って他のArcGIS アカウントにアイテムを複製してみよう!」では様々なアイテムのクローンについて紹介しました。
本記事ではアイテムのクローンの延長として、Esri Developer の ドキュメントで紹介されている clone_items() の search_existing_items と owner パラメーターに焦点を当てて紹介したいと思います。
目次
1. sarch_existing_items パラメーター
2. owner パラメーター
3. ArcGIS Assistant と clone_items() の違い
search_existing_items パラメーターについて
clone_items() を使う際に、既に存在するアイテムを再度クローンするかどうかを決定する search_existing_items というパラメーターを設定することができます。デフォルトの値は True です。
このパラメーターを理解するためには、アイテム内部に存在するアイテムの特性を表す typekeywords という要素についても知る必要があります。
アイテムをクローンする際に、クローンされたアイテムにはアイテムが作成される時に自動的に作成される typekeywords に加えて source-<クローン元のアイテム ID> という typekeywords が追加されます。search_existing_items が True のとき、clone_items() によって実際にクローンが実行される前にそのパターンに一致する typekeywords を持つアイテムがクローン先に存在するかを検索します。存在した場合は再度クローンするのでなく、そのアイテムを参照するようにします。
search_existing_items が False のときは同じアイテムの有無にかかわらずクローンします。
Web マップのクローンを例に詳しく見ていきましょう。Instant Apps のアプリをクローンした後に、このクローンで登場したフィーチャ レイヤー「インスタント用レイヤー」を参照して作成された Web マップが存在する状況を想定します。

図 1-1
Web マップのみを対象とし、search_existing_items を True に設定してクローンをすると、Web マップのみがクローンされ、フィーチャ レイヤーはクローンされません。以下の図のような動きになります。

図 1-2
これは、クローンする際に source-<Web マップの ID> という typekeywords が含まれるアイテムが無いことから同一の Web マップが存在しないことを確認します。フィーチャ レイヤーについては Instant Apps のアプリのクローンによって既にソースが同一のアイテムが存在しているのでクローンはされずに、Web マップ側の参照ソースが同一であるアイテムを参照するように変更されます。

図 1-3
もう少し詳しく見てみましょう。 クローン元のある Web マップを JSON として見るとこのようになります。

図 1-4
操作レイヤーとして「インスタント用レイヤー」が参照されています。

図 1-5
操作レイヤーである「インスタント用レイヤー」を JSON で見てみましょう。

図 1-6
今度は、クローンされた Web マップを見てみましょう。source-ID としてクローン元のアイテム ID が入っていることがわかります。

図 1-7
Web マップの操作レイヤーが記載されている部分です。

図 1-8
クローン先で参照されているフィーチャ レイヤーです。

図 1-9
これら図 1-4 から図 1-9 までの 6 枚の JSON の図と先ほどのクローンの概念図を合わせてこの章の冒頭の説明と照らし合わせていきます。
- クローンを行うと source-<Web Map ID> という形で typekeywords に説明が追加される (ここでは Web マップの ID 9c~ がクローン先で source-9c~として書かれている)
- clone_items() を実行する際に 参照しているインスタント用レイヤー (ID 3044~) がクローン先アカウントでsource-3044~として存在するかどうかを検索して同一アイテムの存在を判定する
- 今回は既に Instant Apps でレイヤーをクローンしているので、そのアイテムが同一アイテムとして判定されている (図 1-9 typekeywords を参照)
今回の例ではこのようにして同一アイテムの存在を確認し、 search_existing_items を True にした場合にクローンをしないようにしています。
owner パラメーター
clone_items() には owner パラメーターが存在し、アイテムをクローンする対象を設定することができます。この記事では以下の図のように、ある組織のユーザーが別の組織の管理者アカウントにログインし、別の組織の管理者でない特定のユーザーに向けてアイテムをクローンする流れを想定して実行します。

図 2-1
まずは図 2-2のように owner パラメーターを設定しないでクローンをしてみます。クローンする対象は フィーチャ レイヤーを参照している Web マップです。

図 2-2
図 2-3 はクローン先としている ArcGIS Enterprise の管理者アカウントのコンテンツです。このように宛先を指定しないとターゲットとしてログインしているユーザーのコンテンツへクローンされます。

図 2-3
次に、owner パラメーターを設定して実行してみます。owner パラメーターにクローン先の組織にいる公開者のアカウントのユーザー名を指定し、folder パラメーターにはユーザーが所有するフォルダ名を指定します。

図 2-4
実行後のユーザーでログインした時のマイ コンテンツの画面が以下になります。

図 2-5
また、公開者側でアイテムを確認するとアイテムのオーナーが管理者でなく、公開者となっていることがわかります。

図 2-6
ArcGIS Assistant の Copy Item との違い
ArcGIS Assistant(国内未サポート)には、Copy Item というアイテムを他のアカウントにコピーできる機能があります。 clone_items と比べて、Copy Item は UI 上で一つ一つアイテムを別アカウントにコピーできる特徴があります。 Copy Item は ArcGIS Online や ArcGIS Enterprise と同じような UI からアテムを扱うことができること、そしてコードを書かずに UI 操作のみでアイテムのコピーができることがメリットです。

図 3-1
ただし、Copy Item は clone_items() と異なり、アイテムの参照関係は考慮されずにコピーされてしまうデメリットがあるので、使う対象には注意が必要です。 従って、次のような場面では ArcGIS Assistant の Copy Item が有効な場合があります。
・フィーチャ レイヤーや CSV ファイルのような参照を持たないアイテムの場合
・Web マップなど参照がアイテム内に存在するが、参照先アイテムがパブリックになっている場合

図 3-2
ここでは、有効である一例として ArcGIS StoryMaps を紹介します。 題材となる ストーリー マップは次の画像のようにエクスプレス マップを利用し、多くのポイントや画像が含まれています。

図 3-3
このストーリー マップはエクスプレス マップを利用しているので、他アイテムの参照がありません。 アイテム ID の参照の崩れを心配する必要がないので ArcGIS Assistant の Copy Item を使うこともできます。
もちろん clone_items() はこれまでに紹介してきたすべてのコンテンツに対して実行できますが、クローン対象がフィーチャ レイヤーやストーリー マップで、なるべく UI で操作を行いたいといった場合には Copy Item でアイテムの移行を行うことも可能です。Web マップや ArcGIS Experience Builder などのアプリケーションがクローンの対象になった場合は clone_items() を使用するようにしてください。
さいごに
本記事では、「アイテムのクローン」、「Python を使って他のArcGIS アカウントにアイテムを複製してみよう!」の 2 記事に続いて、clone_items() を扱ってきました。 search_exisiting_items パラメーターを利用すると既に存在するアイテムについて参照のみ変更しクローンをしないようにするか、アイテムの重複を許可し、クローンを作成するかを選択できます。 owner パラメーターを利用すると、ログインしている管理者自身でないユーザーに向けてクローンを送ることができます。
関連リンク
アイテムのクローン
Python を使って他のArcGIS アカウントにアイテムを複製してみよう!
Cloning Content