LoginSignup
1
1

More than 3 years have passed since last update.

naru Pt. 1: 最初の導入とコードの全体像

Posted at

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:installinet: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つだけの仕事をうまくやる、道具のようなソフトウェアをパイプで組み合わせる」ことをしています。
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1