こちらは、ArcGIS アドベント カレンダー 2025 の 4 日目の記事です。他の記事もぜひご覧ください。
以前、Esri Community ブログ記事や開発リソース集にて、clone_items() メソッドを使った Web GIS (ArcGIS Online / ArcGIS Enterprise) の組織間でアイテムを複製する方法や便利な情報についてご紹介しました。ArcGIS API for Python のバージョン 2.4.1 以降では、従来の clone_items() に加え、新たにアイテムの複製やバックアップを作成することができる、OfflineContentManager クラスが追加されました。本記事ではこの OfflineContentManager クラスの概要や使い方についてご紹介します。
これまでは、組織間でアイテムを複製する際には、clone_items() メソッドが使用されていました。このメソッドは複数の GIS 接続を必要とし、各呼び出し内でアイテムを分解し、再構築します。
バージョン 2.4.1 で新たに追加された OfflineContentManager は、アイテムの複製や再構築する機能に加え、複製プロセス中にアイテムの圧縮バックアップを作成し、複製対象のアイテムすべての依存関係も含めてファイルとしてエクスポートすることができます。
OfflineContentManager は以下の 3 つのメソッドで構成されています。
それぞれの使い方について紹介していきます。
Note:バージョン 2.4.2 時点では import_content() が以下のアイテム タイプには対応していません。
export_items() メソッドを使用して、複製元の組織でオフライン パッケージを作成します。複製やバックアップしたいアイテムを export_items() メソッドにリスト型で渡すことで、依存関係を含めたアイテムのオフライン パッケージがファイルとして出力されます。
まずは複製元の組織サイトのユーザーでサイン インします。
# 複製元組織のユーザーでサイン イン
from arcgis.gis import GIS
gis = GIS("https://arcgis.com","<ユーザー名>", "<パスワード>")
次にバックアップ / 複製したいアイテムを取得します。下記では get() メソッドでアイテム IDを指定し取得していますが、search() メソッドでアイテム名や所有者などの条件から検索して取得することも可能です。
# 複製対象のアイテムを取得
item = gis.content.get("<アイテムID>")次に対象のアイテムをパッケージ化してエクスポートします。
まず、gis.content.offline で OfflineContentManager オブジェクトを取得した後に、export_items() メソッドを使用します。引数には上記で取得した複製対象のアイテムをリスト型で設定します。またその他にもオプションで以下のパラメーターで詳細を設定することができます。
# OfflineContentManager オブジェクトを取得
ocm = gis.content.offline
# エクスポート
export = ocm.export_items(items=[item],
output_folder=r"C:\output",
package_name="オフラインパッケージ",
service_format="Shapefile")
export_items() の実行が完了すると、指定したアイテムとそのすべての依存関係が拡張子 “.contentexport” の形式でエクスポートされます。このファイルには依存関係を含むアイテムに関するメタデータが含まれています。エクスポートしたファイルはアイテムのバックアップとして保存しておくことができます。ファイルの内容は、以下のように list_items() メソッドを使用して確認できます。パラメーターにエクスポートした .contentexport のファイル パスを指定することで、パッケージに含まれるアイテム ID をキーとして、各アイテムのメタデータを含む辞書型で返却されます。
# エクスポートしたパッケージの内容を確認
ocm.list_items(export)今回は Web マップを指定したので、Web マップと Web マップが参照するフィーチャ レイヤーとフィーチャ レイヤーに紐づくシェープファイルがエクスポートされています。
export_items() でパッケージ ファイルへのエクスポートが完了したら、import_content() メソッドを使用して複製先の組織にファイルをインポートすることができます。
まず複製先組織のユーザーでサイン インします。
# 複製先組織のユーザーでサイン イン
gis2 = GIS("https://arcgis.com","<ユーザー名>", "<パスワード>")
次にインポート先の組織で同様に OfflineContentManager オブジェクトを取得した後に、import_content() メソッドを使用します。引数には対象のパッケージ ファイルのパスを指定します。今回は本記事の前半でエクスポートしたパッケージ ファイルを指定しています。
import_content() は他にも以下のようなオプションのパラメーターを設定することも可能です。各パラメーターの詳細は API リファレンスをご参照ください。
※ search_existing_items についてはアイテムのクローン Tips 情報で詳しくご紹介していますのであわせてご参照ください。
# インポート先の組織で OfflineContentManager オブジェクトを取得
ocm2 = gis2.content.offline
# インポート
imported = ocm2.import_content(package_path=export,
folder="OfflineContentManager",
failure_rollback=False,
search_existing_items=True)
実行が完了すると対象のアイテムがインポートされます。
本記事では、ArcGIS API for Python 2.4.1 以降で新たに追加された OfflineContentManagerクラスの使い方についてご紹介しました。アイテムの複製には、従来の clone_items() に加えて OfflineContentManager も使用することができるようになりました。さらに、OfflineContentManager はアイテムの依存関係を含めたパッケージとして保存しておくことができ、バックアップの用途にも有効ですので、ぜひご活用ください。
ESRIジャパン Web サイト:
Esri Community ブログ:
米国 Esri 社 Web サイト:
米国 Esri 社 ArcGIS Blog: