ArcGIS API for Python のコアコンセプト その1:Python、API、そしてREST

Document created by hiromu_nakamuraesrij-esridist Employee on Jun 6, 2019Last modified by hiromu_nakamuraesrij-esridist Employee on Jun 6, 2019
Version 2Show Document
  • View in full screen mode

はじめに

皆さんは ArcGIS API for Python を既に利用されていますか?
これまで GeoNet 上で公開してきた ArcGIS API for Python に関わるブログでは、コードも交えて比較的具体的な利用方法についてご紹介してきました。しかし、ArcGIS API for Python とはそもそも何か、どのような仕組みで動作しているのか、利用する上でのベスト プラクティス等の根本的な話をする機会が無かったかもしれません。
先月、米国 Esri 社で「ArcGIS API for Python のコアコンセプト」と題して上記のような内容について紹介するブログが二回に分けて掲載されたので、今回は少し趣向を変えて当該ブログを翻訳した記事をご紹介したいと思います(翻訳版も二回に分けて掲載いたします)。
既に利用されている方も、これから利用することを検討している方も、是非参考にしてください。

 

 

※ 以降の文章は、米国 Esri 社のブログ記事「ArcGIS API for Python Core Concepts Part 1: Python, APIs, and REST」を翻訳したものです。

あなたは、ArcGIS OnlineやArcGIS Enterpriseのワークフローを自動化するためにArcGIS API for Python に興味を持っていますか?興味はあるけれど、いくつもの異なるコンポーネントとソフトウェアのオプションがあることを知り、ハードルが高いと感じていませんか?ArcGIS API for Python は複雑で、異なるPython 環境に加えていくつものインストールのオプションがあるため、難しそうに見えます。また、ArcGIS API for Python は Anaconda や Jupyter Notebook のような、多くの方にとっては初めてのサード パーティー製品と連携します。
しかし、ArcGIS API for Python は、特にベスト プラクティスに従った時は、とても便利で直感的なものになります。また、あなたのスクリプトを非常にシンプルにすることが可能です。このサンプル コードは、ArcGIS API for Python を使わずに、コンテンツの所有者をあるユーザーから別のユーザーに移す (reassigining)処理です。この処理のためには、あなたが実行したい全てのことに対して、URL リクエストを行うとても長いスクリプトを作成しないといけません。

 

とても長いスクリプトです

 

対象的に、同じワークフローを ArcGIS API for Python を用いて実行する場合、以下が必要なコードの全てです。

短く素晴らしいスクリプトになりました

 

ArcGIS API for Python が URL リクエストを生成してくれるため、使わなかった場合に比べて、よりシンプルなスクリプトを書いたり共有したりすることができます。上記の例では、ArcGIS API for Python を使うことで、同じタスクを実行するにあたり、 117 行のコードを 19 行に減らすことができました。あなたがArcGIS API for Python を使い始める前に、ArcGIS API for Python とは何かということと、いくつかのベスト プラクティスについてしっかりと把握しておくことは非常に良いことです。この二つのパートに別れたブログでは、各コンポーネントとArcGIS API for Python を使用するという概念、それらがどのように関連しているか、そしてベスト プラクティスについてブレイク ダウンしてご紹介します。

 

ArcGIS API for Python とは何か?

ArcGIS API for Python は「Esri により開発された、ArcGIS REST API を介して Web GIS を管理するための Python の API」と定義できます。
しかし、この定義はあなたが以下の事項全てについて知っていることを想定しています。

  • Python
  • API
  • ArcGIS REST API
  • Web GIS

あなたがこのブログを読んでいるということは、あなたはすでに Web GIS を理解しているのではないかと思います。しかし、読者全員の足並みを揃えるために説明すると、Web GIS とは、データの共有、編集または管理をWeb を用いて行う GIS データ管理システムを含むコンセプトです。Esri においては、ArcGIS Online または ArcGIS Enterprise (特に Portal for ArcGIS) のことを示す際に Web GIS という言葉を用います。ここからは、その他のコンセプトと、これらが Web GIS の管理にどのように関連しているのかについて掘り下げていきましょう。

 

Python のインストールについて理解する

Python は、Esriやその他多くのソフトウェア プラットフォームが、処理ツールを作成する際に用いているオープンソースのプログラミング言語です。Python のインストールは、コアとなるコード(例えば python.exe と関連ファイル)に加えて、追加のツールや関数のパッケージが一緒にインストールされます。ユーザーはその他のパッケージを機能拡張のために追加することができます。

ArcGIS DesktopのPython インストール

 

例えば、ArcGIS Desktop とともにインストールされるPythonには、arcpy パッケージが付属します。arcpy には全てのArcGIS のジオプロセシング ツールが含まれています。その他の一般的なパッケージでは、数学的な関数を扱う NumPyや、URL の生成とリクエストの送信ができるurllib と requests が含まれています。NumPy は通常デフォルトで Python と一緒にインストールされますが、urllib と requests はユーザーがインストールする必要があります。
ArcGIS Desktop は Python と一緒にインストールされますが、全ての ArcGIS 製品が同じ Python をインストールするわけではありません。ArcMap と ArcGIS Pro の開発の間、いくつかの新しい Python のバージョンが発表されました。
そのため、ArcMap のインストールでは Python 2.7 と arcpy パッケージがインストールされます。

ArcMap と Python 2.7 のインストール


一方、ArcGIS Pro は Python 3.5 を用いて開発されました。ArcGIS Pro の arcpy パッケージには Python 3.5 のインストールが必要です。同様に、ArcGIS API for Python は Python 3.5 を使用しているクライアントにのみインストールすることができます(※ 訳注:厳密には Python 3.5 かそれ以上のバージョンがシステム要件となりますが、ここでは原文に従いました。要件の詳細はシステム要件のページ(英語)をご参照ください)。ArcGIS API for Python の Python パッケージは arcgis と呼ばれます。

ArcGIS Pro と Python 3.5 のインストール

 

「ちょっと待てよ」、と思われるかもしれません。「ArcGIS API for Python API なのに、なぜ Python パッケージと言っているの?」

良い質問ですね!

ArcGIS API for Python とは Python パッケージ、API 両方です。

Python パッケージは Python 環境にインストールすることができるツールで、これは正に ArcGIS API for Python のことです。

しかし、ArcGIS API for Python は同様に API でもあります。これは私達を次の質問へと導きます。APIとは何か?

 

API とは何か?

API とは「アプリケーション プログラミング インターフェイス (Application Programming Interface) 」を意味し、二つのアプリケーションが互いにやり取りできるようにするためのツールのライブラリのことです。例としては、Javascript API 、Silverlight API、そしてArcGIS REST APIが挙げられます (訳注:Javascript API は 正確には ArcGIS API for JavaScript、Silverlight API は正確には ArcGIS API for Silverlight と思われますが、ここでは原文に従いました)。
自動販売機から飲み物を買いたいと思っている同僚を想像してみてください。私達はサーバー (自動販売機) に対してリクエストを実行 (炭酸飲料を買う) しようとしている一つのアプリケーション (喉が渇いた同僚) を持っています。これを実行するためには、アプリケーションとサーバーの両者が理解でき、やり取りするためのインターフェイスが必要です。この場合、自動販売機のボタンがアプリケーションとサーバーの間のインターフェイスの役割を果たします。

アプリケーションがサーバーに対してリクエストを送る

 

現実世界の API の例は、ArcGIS REST APIです。ArcGIS REST API は、アプリケーションが ArcGIS Server サイトにリクエストするためのツール セットです。名前が示すとおり、ArcGIS REST API はアプリケーションがRESTful な ArcGIS Server サイトに REST リクエストを送るためのツールが含まれています。ArcGIS API for Python は ArcGIS REST API とやり取りをするため、サーバー サイトが RESTful とは何を意味するのかについて掘り下げてみましょう。

アプリケーションとArcGIS REST API の関係

 

REST とは何か?

リプレゼンテーショナル ステート トランスファー (Representational State Transfer) または REST は、人々がURLを読むことができるようにサイトを編成するアーキテクチャ スタイルです。
ArcGIS Server サイトは REST アーキテクチャ スタイルを使用して、コンピュータのフォルダーを移動するのと同じ方法で移動できるサイトを作成します。
以下のリンク先は SampleServer6 というサーバーの REST サイト上のサービス ディレクトリ です。

https://sampleserver6.arcgisonline.com/arcgis/rest/services 

SampleServer 6 の REST エンドポイント

 

もし私がこのサービス ディレクトリの Energy フォルダーを開いたら、Windows Explorerのように、「/Energy」が URL に追加されます(https://sampleserver6.arcgisonline.com/arcgis/rest/services/Energy)。ここから、私はGeology フィーチャ サービスを開くことができ、URL には「Geology/FeatureServer」が追加されるでしょう。
もし私が特定のサービス レイヤー (例えば、Fault レイヤー) を操作したい場合、レイヤーの番号 (0) が以下のように追加されます。
https://sampleserver6.arcgisonline.com/arcgis/rest/services/Energy/Geology/FeatureServer/0
特定のサービスまたはサービス レイヤーの URL が開かれると、URL の最後に、そのサービスまたはレイヤーに対して実行したいオペレーションを追加できます。例えば、もしあなたが Geology サービス の Fault (0) レイヤーから、特定のフィーチャを ObjectID でクエリしたい場合、ArcGIS REST API から「query?」オペレーションと任意のパラメーター (例えば、「objectIds=41568」) を追加し実行することができます。あなたが URL リクエストを送ると、SampleServer6 は Geology フィーチャ サービスの最初のレイヤーにあるフィーチャ 41568 の情報を返します。URL リクエストは、以下のようなものになるでしょう。
https://sampleserver6.arcgisonline.com/arcgis/rest/services/Energy/Geology/FeatureServer/0/query?objectIds=41568
ArcGIS REST API は、ArcGIS Server サイトに対して、あなた(もしくはアプリケーション)が実行できる全てのオペレーションのリストです。これらのオペレーションは URL リクエストの REST アーキテクチャを通じてサービスに適用されます。


ArcGIS API for Python vs ArcGIS REST API

もし API が二つのアプリケーション間のインターフェイスならば、そして ArcGIS REST API がアプリケーションと ArcGIS Server サイト間のインターフェイスならば、ArcGIS API for Python は何のインターフェイスなのでしょう?
このことについて考えるには二通りの方法があります。
ArcGIS API for Python は、Python スクリプトと ArcGIS REST API のインターフェイスとして考えることができます。そして、ArcGIS REST API が ArcGIS API for Python と ArcGIS Server サイトとの間のインターフェイスとなります。

ArcGIS API for Python は Python スクリプトと ArcGIS REST API の間のインターフェイス


もう一つの考え方は、ArcGIS API for Python は ArcGIS REST API の Python ベースのラッパーであり、両者がともにスクリプトと ArcGIS Server サイトの間のインターフェイスとして働くというものです。

ArcGIS REST API のラッパーとしての ArcGIS API for Python

 

ArcGIS API for Python ArcGIS REST API URL 生成を Python ベースの関数でラップしているため、URLをスクリプト内にマニュアルで書く代わりに、関数を呼び出すことで、バックエンドで URL が生成されます。

同じオペレーションで ArcGIS API for Python を使わなかった場合 (上) と使った場合 (下)


ArcGIS API for Python とは何か?

私達はここまでで Python、Python パッケージ、API、そして ArcGIS REST API を詳細に見てきました。ここで元の定義を振り返ってみて、最終版の定義にするためにもう少し詳細な形にしてみましょう。
「ArcGIS API for Python は、API と Python パッケージの両方です。これは、Python スクリプトと ArcGIS REST API を手助けするツール、つまり ArcGIS Server のサービスへのリクエストを作るためのツールを含んでいます。したがって、ArcGIS API for Python は、 WebGIS のコンテンツやユーザーを管理するための Python スクリプトを作ることを手助けします。」
さらに ArcGIS API for Python について学びたいですか?続編のブログも是非チェックしてください。


※ 続編は翻訳後に別途公開いたします。

 

 

関連リンク集

米国 Esri 社ブログ

ArcGIS 関連ページ

ArcGIS 開発リソース集

Attachments

    Outcomes