OpenStreetMap Data Extracts からベクトルタイルを生産・配信・設計・最適化する工程を技術移転する naru の解説の1回目です。
今回は、最初のソフトウェア導入を行い、コードの全体像を説明してみます。
ソフトウェアの導入
国連ベクトルタイルツールキット(UNVT)の導入
まず、国連ベクトルタイルツールキット本体を導入します。今回はワンライナーインストーラの equinox を使用して、次のようにします。Raspberry Pi で動作している Raspbian で実行することを想定していますが、その他の Unix 環境でも結構動くかもしれません。
curl -sL https://unvt.github.io/equinox/install.sh | bash -
equinox が使えない場合には、例えば Docker コンテナイメージの nanban で代用することもできます。
技術移転教材(naru)の導入
ファイルを作って良いディレクトリ(例えばホーム)に移動して、次のコマンドを実行すると、教材が導入されます。
git clone https://github.com/unvt/naru.git
cd naru
rake inet:install
以下、技術移転中の作業は、この naru
というディレクトリの中で進めることになります。
rake
は、オブジェクト指向スクリプト言語 Ruby で書かれたビルドツールです。国連ベクトルタイルツールキットは、主に(1) C++ で書かれた Tippecanoe、(2) Node.js で書かれた budo や vt-optimizer を主要素とするのですが、ビルドツールについては、ポータビリティが高くて少ないストレスで書けるツールが C++ にも Node にもないように思ったので、 rake
を採用しています。
rake inet:install
の inet:install
は、あなたが実行したタスクの名前です。これは、この教材に必要なソフトウェアをダウンロードするタスクです。
このタスクは教材の一部として書かれています。具体的には naru のRakefile の最初の方 に次のとおり書いています。
task :install do
sh "yarn"
end
これは、 install という名前のタスクの中身を記述するもので、タスクの中身は sh "yarn"
です。これは「yarn というコマンドを実行する」という意味です。
yarn
は Node.js で書かれたパッケージマネージャです。コマンドラインオプションを付けずに yarn
と実行した場合、このディレクトリにあるプロジェクトのためのライブラリをダウンロードしてインストールします。
inet:
という接頭辞をつけるために、Rakefile
の中では namespace
を付けて次のようにしています。
namespace :inet do
desc 'install extra software for naru'
task :install do
sh "yarn"
end
naru
は原則としてインターネット接続なしに一通りの技術移転ができるように設計しています。ウェブ技術はインターネットなしでも利用可能なのです。しかし、インターネット上にあるライブラリを導入するタスクについては、どうしてもインターネット接続が必要です。このようにインターネット接続が必要なタスクについては、inet:
を接頭するようにして区別しています。
desc 'install extra software for naru'
は、inet:install
タスクに対する説明テキストとして install extra software for naru
というテキストを付加するものです。
コードの全体像
これから naru
を使って OSM ベクトルタイルを生産・提供・設計・最適化する技術移転を行いますが、まずは全体像をみていきましょう。
タスクの一覧
rake -T
を実行することで、現在準備されているタスクの一覧を見ることができます。
$ rake -T [~/naru]
rake host # host the site
rake inet:download # download source geospatial data to the place
rake inet:fonts # TODO: clone and build fonts, and copy to docs
rake inet:install # install extra software for naru
rake inet:mbgljs # TODO: clone and build mapbox-gl-js, and copy to docs
rake inet:sprite # TODO: clone and build maki, and copy to docs
rake js # TODO: build JavaScript code using rollup
rake optimizer # TODO: run vt-optimizer
rake style # build style.json from HOCON descriptions
rake tiles # build tiles from source data
これから使っていく順に解説していくと、次の通りです。
inet:download
これは、OpenStreetMap Data Extracts から、必要な地理空間情報をダウンロードするタスクです。
どこの地理空間情報をダウンロードするかは、Rakefile
の冒頭に書いてある REGION
及び AREA
を書き換えることで変更できます。
tiles
これは、ダウンロードした地理空間情報をベクトルタイルに変換するタスクです。
変換の設定は、modify.js及びosmium-export-config.jsonで変更できます。また、ソースデータの形式を osm.pbf から Shapefile などの形式に変更することも可能です。この場合には、呼び出すコマンドを osmium
から ogr2ogr
に変更することになります。
style
これは、hocon
ディレクトリに格納された、人間に扱いやすいように最適化されたスタイル記述を、Mapbox GL JS 用のスタイルファイルにコンパイルするタスクです。
host
これは、生産したタイルやコンパイルしたスタイルを、ライブラリやフォント、スプライトの情報を合わせてサイトとしてホストするタスクです。
その他
残るタスクである、inet:fonts
, inet:mbgljs
, inet:sprite
, js
, optimizer
については、naru
の中では 2020-05-06 時点では未実装です。これらのタスクの実行結果にあたるファイルは、 UNVT のこれまでの成果からコピーして置いてあります。
これらのタスクを実装することにより、naru
はより自己完結したものになりますが、当面は、inet:download
, tiles
, style
, host
の4つの基本タスクを分かりやすく伝えることに注力します。
naru の実装に当たって留意している原則
- パイプライン。UNVT は Unix のカルチャーへの敬意に基づいて実装しており、「1つだけの仕事をうまくやる、道具のようなソフトウェアをパイプで組み合わせる」ことをしています。