20201025のNode.jsに関する記事は2件です。

オープンデータを使って住所検索ライブラリを作りました

オープンデータな住所データを使用して文字列と緯度経度で住所検索できるNode.jsのモジュールを作りました。

japan-address-search
https://github.com/uedayou/japan-address-search

従来、住所検索を行う場合、GoogleやYahooなど外部のWebサービス・Web APIと連携して検索するものが多いと思います。少数のデータを検索する場合は特に問題ないですが、大量のデータを検索したい場合には外部サービスの制限やレスポンスの問題など利用するには不向きです。

このモジュールは、モジュール内のデータについて検索するので、大量のデータでも外部サービスに影響なくローカルで検索することができます。

このモジュールは、経済産業省のIMIコンポーネントツールを元に作成していますので、住所表記の正規化も行えます。

npmリポジトリにも公開しているので、npmコマンドで手軽にインストールできます。

https://www.npmjs.com/package/japan-address-search

インストール方法

コマンドラインで使う場合は npm でグローバルにインストールしてください。

$ npm install -g japan-address-search

Node.js のコード内で利用したい場合はローカルにインストールします。

$ npm install japan-address-search

使い方

コマンドラインで、文字列検索したい場合は以下のように実行します。

$ japan-address-search -s 神保町

緯度経度による逆ジオコーディング検索は以下のようになります。

$ japan-address-search --lat 35.675551 --lng 139.750413

どちらもデフォルトで最大10件表示されます。任意の件数を得たい場合はパラメータに--limit 5のように追加してください。

コード内での利用は
https://github.com/uedayou/japan-address-search#readme
を参照してください。

出力結果

検索結果は、JSONで以下のように出力されます。
町・丁目レベルには代表点として緯度経度が得られます。

{
  "@context": "https://imi.go.jp/ns/core/context.jsonld",
  "場所": [
    {
      "@type": "場所型",
      "住所": [
        {
          "@type": "住所型",
          "表記": "神保町",
          "都道府県": "千葉県",
          "都道府県コード": "http://data.e-stat.go.jp/lod/sac/C12000",
          "市区町村": "船橋市",
          "市区町村コード": "http://data.e-stat.go.jp/lod/sac/C12204",
          "町名": "神保町",
          "種別": "位置参照情報"
        }
      ],
      "地理座標": {
        "@type": "座標型",
        "緯度": "35.762159",
        "経度": "140.051552"
      }
    },
    {
      "@type": "場所型",
      "住所": [
        {
          "@type": "住所型",
          "表記": "神保町",
          "都道府県": "新潟県",
          "都道府県コード": "http://data.e-stat.go.jp/lod/sac/C15000",
          "市区町村": "見附市",
          "市区町村コード": "http://data.e-stat.go.jp/lod/sac/C15211",
          "町名": "神保町",
          "種別": "位置参照情報"
        }
      ],
      "地理座標": {
        "@type": "座標型",
        "緯度": "37.500056",
        "経度": "138.970828"
      }
    },
    {
      "@type": "場所型",
      "住所": [
        {
          "@type": "住所型",
          "表記": "神保町",
          "都道府県": "千葉県",
          "都道府県コード": "http://data.e-stat.go.jp/lod/sac/C12000",
          "市区町村": "船橋市",
          "市区町村コード": "http://data.e-stat.go.jp/lod/sac/C12204",
          "町名": "大神保町",
          "種別": "位置参照情報"
        }
      ],
      "地理座標": {
        "@type": "座標型",
        "緯度": "35.773812",
        "経度": "140.061923"
      }
    },
    {
      "@type": "場所型",
      "住所": [
        {
          "@type": "住所型",
          "表記": "神保町",
          "都道府県": "東京都",
          "都道府県コード": "http://data.e-stat.go.jp/lod/sac/C13000",
          "市区町村": "千代田区",
          "市区町村コード": "http://data.e-stat.go.jp/lod/sac/C13101",
          "町名": "神田神保町",
          "種別": "位置参照情報"
        }
      ]
    }
  ]
}

その他の機能

japan-address-searchモジュールには、現在の住所以外に明治時代以前の地名についても、文字列と緯度経度で検索することができます。コマンドラインでは、--oldをつけると検索対象が明治時代以前の地名になります。

$ japan-address-search -s 神保町 --old
$ japan-address-search --lat 35.675551 --lng 139.750413 --old

japan-address-search について

japan-address-searchIMIコンポーネントツールを改修して作成したものです。改修の経緯は以下のQiitaの記事にまとめています。

  1. IMI住所変換コンポーネントでいろんな住所を正規化してみた
  2. IMI住所変換コンポーネントを改造してリバースジオコーディングに対応してみた
  3. IMI住所変換コンポーネントを魔改造して昔の地名を検索できるようにしてみた

また、オープンデータとして

を利用しています。
各ツール・データを公開していただいている皆様には深く感謝いたします。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerFileに最新のNode.jsを追加した話

他で作成していたイメージにNode.jsをインストールしたかったが、調べてもすぐには出てこなかったためメモ

前提

Rustでwasmを触ってみようとして必要だった。
busterベースのコンテナを使用。

結論

こちらを追加した

ENV NODE_VERSION 15.0.1

RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \
    && case "${dpkgArch##*-}" in \
    amd64) ARCH='x64';; \
    ppc64el) ARCH='ppc64le';; \
    s390x) ARCH='s390x';; \
    arm64) ARCH='arm64';; \
    armhf) ARCH='armv7l';; \
    i386) ARCH='x86';; \
    *) echo "unsupported architecture"; exit 1 ;; \
    esac \
    && set -ex \
    && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
    && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \
    && rm "node-v$NODE_VERSION-linux-$ARCH.tar.xz" \
    && ln -s /usr/local/bin/node /usr/local/bin/nodejs \
    && node --version \
    && npm --version

やっていることとしては
アーキテクチャを取得
公式サイトのurlを叩く
展開

ログに表示されたバージョン

+ node --version
v15.0.1
+ npm --version
7.0.3

考えたこと

最初はaptでインストールを行ったがバージョンが古く(10前後だった記憶)、せっかくなので最新にしようと考えた。しかし適当に調べても"正しい"方法が見つからないためDockerHubへ。
https://hub.docker.com/_/node

ここから自分の使っているイメージと似たようなOS(今回はbuster)をベースにしているイメージのDockerFileへ飛ぶ。
そこからnodeをインストールしている箇所を抜き出し、自分のDockerFileに適用。(本当はチェックサムやら何やらがあったが削除してしまった)

見事動いた。
以上。

出典

https://hub.docker.com/_/node
https://github.com/nodejs/docker-node/blob/d58d7e65c4f92ef22a190b0ca835ce62464ff3ba/15/buster/Dockerfile

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む