IMI住所変換コンポーネントのコア、lgcodegeocodeを改善し、逆ジオコーディングに対応。
住所のジオコーディング、逆ジオコーディング(丁目レベル)」(src on GitHub)
JavaScriptのランタイム、Denoのキャラクターは、MIT Licenseのオープンデータ。背景に登場してもらったらぐっとかわいくなりました。

日本の地理への理解が深まりましたが、まだ奥が深いです。泊村(とまりむら)、北海道にふたつあるってご存知でしたか? 池田町が4箇所あるなど、都道府県を越えてのかぶりは把握していましたが、道内かぶりの想定も必要でした。北海道の場合、振興局という地方公共団体名が登場します。

geocodeでちょっと古い街区データからの変換時にエラー。最近名前が変わった、丹波篠山市と那珂川市への対応は、ひとまず手動対応しました。(makedata.mjs)

if (city2 === "篠山市") city2 = "丹波篠山市"; // v16は丹波篠山市に改名する前のデータ if (pref === "福岡県" || city2 === "筑紫郡那珂川町") city2 = "那珂川市"; // v16は那珂川市に改名する前のデータ

ただ、住所を正規化する際、古い住所を変換するニーズは割とありそうなので、古い市区町村との対応追加は実装したほうが良さそうです。(現在版は、現存する市区町村のみデータ化しています)


Denoくんがかわいいので、suzuriでTシャツを作ってみました。どう配置するか、バランスが難しい! Denoくんは、チンアナゴではなく恐竜です。
(出展、Deno 1.0リリース記念イラストを描きました - No Regrets in Bathing



Deno goods - suzuri
Denoグッズ、いろいろ作ってみたので、よかったらどうぞ!色やサイズは選べます。登録すれば、配置も自在に調整できますよ!

Denoへのもうひとつプルリクも無事マージ!
自分で使うツールのオープンソースに参加すると、何か合っても自分で解決できる感が高まってよいですね!

反響で散見された KEN_ALL とは、郵便番号データのこと。 郵便番号を扱う、様々なサービスを開発する際に幾度となく使われて来たのだろう。また、この「郵便番号データ」は、頻繁に更新もされるため定期的な運用も、それぞれに発生する。

こういう非効率の解決に、オープンデータとオープンソースが有効!


郵便番号から住所 - 郵便番号
シンプルなサンプルと共に、郵便番号ESモジュールを公開!(src on GitHub)
郵便番号を入れると、即座に対応する住所候補を表示する。プログラマーにうれしい JSON形式。

また、全角や半角や〒マークつきか否かも正規化するので、「半角でご入力ください」などの表記は不要! 早速、経産省の「全角半角統一コンポーネント IMIMojiConverter」を活用させていただきました。

IMI Tool Project
経産省もGitHubにオープンソース公開スタート!

オープンデータとオープンソースで、昭和を令和へ!

ブラウザやDenoでサクッと動く、法人番号からの検索するESモジュールができました。 好評な経産省によるオープンソース「IMIコンポーネントツール」の7つ道具、一通りできました!

IMIコンポーネントツール」法人種別名の抽出コンポーネント追加(src on GitHub)
サンプルとしていれている番号はどんな法人でしょう?
[変換]ボタンを押してみまてください。

使い方は簡単です。下記コードを main.html として保存して、ブラウザで開くだけ!

<script type="module"> import IMIEnrichmentHojin from "https://code4sabae.github.io/imi-enrichment-hojin-es/IMIEnrichmentHojin.mjs"; const main = async () => { const json = await IMIEnrichmentHojin("4000012090001"); alert(JSON.stringify(json, null, 2)); }; main(); </script>

トップレベルawaitに対応している Deno や、Node.js の --experimental-top-level-await 付き実行なら、main関数の定義も不要です。


国税庁法人番号公表サイト」にて、同様の検索ができますが、APIを使うとより柔軟に、より高速に処理できます。


法人番号システム Web-API|国税庁法人番号公表サイト
国税庁公式のAPI提供もありますが、申請から利用可能になるまで1週間。郵送(!)されてくる利用コードを受け取る必要があります。
(フォームに「全角」「半角」の文字。IMIコンポーネント全角半角変換モジュールの出番!)


全件データのダウンロード(各都道府県別)|国税庁法人番号公表サイト
1週間待ちはつらいので、元のコンポーネントのソースを見てみると、こちらから全件ダウンロードするように記述があります。ひとつひとつ手でダウンロードするのは大変なので、プログラムで全部ダウンロードし、展開したヘッダなしCSVファイルを末尾6桁別ファイルに書いていきます。(download.mjs on GitHub)

JSONにしてしまうとファイルサイズが増加し、検索スピードも落ちるのでCSV状態のまま data フォルダに格納。1ファイル最大3.7MB、ちょっと大きいですが、GitHub pages では、gzip圧縮されるので、そこそこいいサイズになっているはず。全部で3,542ファイル、総容量1.2GBほどになっているので、clone するときは容量にご注意ください。

links
- 経産省がソースコードを公開したソフトを配布、進む市民との連携:日経ビジネス電子版
- 日本政府発のJavaScriptライブラリを勝手にweb標準化するプロジェクト、全角-半角統一コンポーネントのESモジュール/Deno対応版公開
- Deno対応ESモジュール対応、IMIコンポーネントツールx4とDenoバッジ
- IMI住所変換コンポーネントをESモジュール化、まずはざっくり正常系だけ動作するβ版を公開

公共団体コードと丁目レベルのジオコーディングモジュールを使って、IMIコンポーネントツールの目玉、住所変換モジュールをESモジュール化しています。 内部構造をガラッと変えて、必要なデータのみを適宜ダウンロードするブラウザ上でも動作する軽量なESモジュールとして使えるようになりました!

IMIコンポーネントツール ESモジュール版」住所変換コンポーネントのβ版追加!
現在は、都道府県名からの住所表記に対応、緯度経度は丁目レベルまでなのはオリジナルと同様です。番地、号にも対応してほしいところですね。

使用は簡単!Denoで下記、実行するだけでOKです!

import IMIEnrichmentAddress from "https://code4sabae.github.io/imi-enrichment-address-es/IMIEnrichmentAddress.mjs"; console.log(await IMIEnrichmentAddress("福井県鯖江市新横江2-3-4"));

ネットアクセスするので --allow-net または -A 付きで、エラーがでた場合 geocode.mjs をアップデートするために -r も一度付けてください。

$ deno run -A -r main.mjs Download https://code4sabae.github.io/imi-enrichment-address-es/IMIEnrichmentAddress.mjs Download https://code4sabae.github.io/imi-enrichment-address-es/lib/find.mjs Download https://code4sabae.github.io/imi-enrichment-address-es/lib/bangou.mjs Download https://code4sabae.github.io/imi-enrichment-address-es/lib/util.mjs Download https://code4sabae.github.io/lgcode/lgcode.mjs Download https://code4sabae.github.io/geocode/geocode.mjs Download https://code4sabae.github.io/lgcode/lgcodemap.mjs [ { @context: "https://imi.go.jp/ns/core/context.jsonld", @type: "場所型", 住所: { @type: "住所型", 表記: "福井県鯖江市新横江2-3-4", 都道府県: "福井県", 都道府県コード: "http://data.e-stat.go.jp/lod/sac/C18000", 市区町村: "鯖江市", 市区町村コード: "http://data.e-stat.go.jp/lod/sac/C18207", 町名: "新横江", 丁目: "2", 番地: "3", 号: "4" }, 地理座標: { @type: "座標型", 緯度: "35.941043", 経度: "136.199640" } } ]

緯度経度、使えます!


住所変換コンポーネント (ES module ver.) on GitHub
データを扱う、公共団体コードや、ジオコードは別モジュールで管理しているので、住所の正規化に特化できたのでJavaScriptのプログラムとしては、下記4ファイルのみとシンプル!

IMIEnrichmentAddress.mjs メイン、文字列やJSON-LDを入力として、find.mjsを使って変換
lib/find.mjs - 住所表記を分解し、緯度経度を付加するコード、find.jsを大幅改定
lib/bangou.mjs - bangou.jsをESモジュール化、漢数字などの番地と号を正規化する
lib/util.mjs - util.js をESモジュール化、漢数字との変換などの便利関数群

施設や、店舗の住所からの変換など、web上の様々な住所表記に対応できるよう、使いながら育てていきたいと思います。 一緒に使ってみる方、バグや要望を送ってくれる方、精度アップのプログラムを書く方、大募集!
imi-enrichement-address src on GitHub by Code for Sabae

経産省のオープンソース「IMIコンポーネントツールESモジュール対応プロジェクト。 いよいよ住所変換コンポーネントに取り掛かるも、ファイルを使ったDB「LevelDB」のラッパー「levelup/leveldown」が使われていてるので、いままでのようなそのまま移植は無理でした。

そこで、ひとまず使用している「統計LOD」と「位置参照情報 ダウンロードサービス」を使った内部モジュールを開発。 ブラウザとDenoで使えるESモジュールができました。

code4sabae/lgcode: 地方公共団体コード ESモジュール

import { getLGCode } from "https://code4sabae.github.io/lgcode/lgcode.mjs"; console.log(getLGCode("東京都", "新宿区")); console.log(getLGCode("福井県", "鯖江市"));

こちらを main.mjs として保存して、deno run で、緯度経度が得られます。

% deno run main.mjs 13104 18207

この地方公共団体コードを住所ジオコーディングした際のデータ管理のIDとして使います。


code4sabae/geocode: 住所ジオコーディング

import { getLatLng } from "https://code4sabae.github.io/geocode/geocode.mjs"; console.log(await getLatLng("福井県", "鯖江市", "新横江2"));

上記、同様に main.mjs として保存して、deno run で、緯度経度が得られます。(geocodeのjsonデータをネットから取得するので、--allow-net オプションか -A 付きで実行してください)

% deno run --allow-net main.mjs 35.941043,136.199640

データの取得と加工方法は、それぞれと tools ディレクトリにまとめています。(参考、住所変換コンポーネント

どちらもシンプルで軽量なモジュールに仕上げました!ウェブでDenoで、ご活用ください。
GitHubを使ったオープンソース、issue、PR歓迎です。お気軽にどうぞ!

次は、こちらを使ったIMIコンポーネント移植にチャレンジです!


コーディング瞬発力を鍛える、Hana道場 x PCN仙台企画、IchigoJamプログラミング大喜利!


6月というお題に対する「かたつむり当てゲーム」!

小学6年生/中学1年生の参加したこどもたちの発想力と実装力に元気、もらいました!
Let's プログラミング!

経産省から7つ公開された「IMIコンポーネントツール」のESモジュール対応、全角半角変換に続き、4つ移植し、進捗5/7。

IMIコンポーネントツール ESモジュール版
ESモジュールなので、サーバーを使わず、ブラウザ上ですべて動作します。

IMIコンポーネントツール、ESモジュール対応状況
(1) 住所変換コンポーネント(対応予定 → 対応)
(2) 法人種別名の抽出コンポーネント(対応予定 → 対応)
(3) 全角-半角統一コンポーネント
(4) データバリデーションコンポーネント
(5) 電話番号正規化パッケージ一式
(6) 日付型正規化パッケージ一式
(7) 産業分類候補生成パッケージ一式

<script type="module"> import IMIMojiConverter from "https://code4sabae.github.io/imi-moji-converter-es/IMIMojiConverter.mjs"; import IMIEnrichmentContact from "https://code4sabae.github.io/imi-enrichment-contact-es/IMIEnrichmentContact.mjs"; import IMIEnrichmentDate from "https://code4sabae.github.io/imi-enrichment-date-es/IMIEnrichmentDate.mjs"; import IMIEnrichmentJSIC from "https://code4sabae.github.io/imi-enrichment-jsic-es/IMIEnrichmentJSIC.mjs"; import generateIMIDataValidator from "https://code4sabae.github.io/imi-data-validator-es/IMIDataValidator.mjs";

HTML内、type="module"と書くのがモジュール対応のJavaScriptの特徴。いろいろインポートして、サクッと使えます!

Denoをインスールし、JavaScript のファイル main.mjs を作って、

import IMIEnrichmentDate from "https://code4sabae.github.io/imi-enrichment-date-es/IMIEnrichmentDate.mjs"; console.log(IMIEnrichmentDate("令和二年12月1日"));

deno run で、すぐ実行できます。

$ deno run main.mjs { @context: "https://imi.go.jp/ns/core/context.jsonld", @type: "日付型", 表記: "令和二年12月1日", 標準型日付: "2020-12-01" }

各プロジェクト、コンソール上で使う cli.js を cli.mjs として、WebAPI提供する server.js を server.mjs として、それぞれ Deno 用に書き換えているので、参考にどうぞ。

同じコードが Deno を使うとコンソール上、サーバー上で動くので、クライアントとサーバーとの役割分担を柔軟に変更できるのがうれしい!

ESモジュール対応のバッジと、Denoでの動作バージョン確認のバッジ、作ってみました。


GitHub の README.md などで活用ください!

[![esmodules](https://taisukef.github.com/denolib/esmodulesbadge.svg)](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Modules) [![deno](https://taisukef.github.com/denolib/denobadge.svg)](https://deno.land/)

全角半角という言葉は、パソコン普及前夜のワープロ時代の遺物。「住所を全角で入れてください」など、優しくないお願いは排除し、必要な処理はプログラムでしましょう。

日本政府、経済産業省(経産省)から「IMI 情報共有基盤 コンポーネントツール」が発表されました。 5つ星オープンデータの語彙を定める「共通語彙基盤IMI」に関連したオープンソースなJavaScriptで作られたツール群です。

Node.js を前提に作られていますが、ブラウザや Deno で動かしたいので、ひとまず簡単そうな「全角-半角統一コンポーネント」を移植。インストール不要で下記のようにすっきり使えるものができました!(src on GitHub)

$ cat > main.mjs import IMIMojiConverter from "https://code4sabae.github.io/imi-moji-converter-es/IMIMojiConverter.mjs"; console.log(IMIMojiConverter.toHalfWidth("あかさたな0123456789")); console.log(IMIMojiConverter.toFullWidth("アカサタナ0123456789")); $ deno run main.mjs あかさたな0123456789 アカサタナ0123456789

ブラウザからはこの main.mjs をESモジュールとして読み込めば動きます

<script type="module" src="main.mjs"></script>

ブラウザ用の記述と、コンソール上のDeno、同じコードで動くのが、ESモジュールのいいところ!全角や半角という言葉をウェブサイト上で使っている方、利用者の登録率や利便性を向上させるためにご活用ください!

移植にあたって、imi-moji-converter が依存している Node.js 用の「半角全角変換ライブラリ」をDeno用に移植しました。(src on GitHub)

変換が必要ないので、srcフォルダが不要で、プログラムはすべてdocs内に置いています。ESモジュール以前の表記、require/export を import/export に変更し、testをDeno用に書き換えます。Node.jsっぽいテスト表記を実現する nodelikeassert.mjsdenolib に追加。
半角全角変換ライブラリ test
ライブラリはURLで読み込むだけなので、node_modules も不要、インストールも不要でとってもシンプルです!


オープンソース活用、加速しそうです!
→ 2020-05-30 対応拡大

links
- 経産省発の npm モジュール!住所や電話番号の正規化、ジオコーディングなどができる IMI コンポーネントツールを試した! - Geolonia developer's blog
- DenoとWebSocketで作る匿名チャットサーバー&webアプリ
- DenoとNodeとwebアプリの全対応、コンパクトに作り始めるLISPのS式風ライブラリ
- NodeからDenoへ、福井県で活用オープンソースのPUSHかんたんオープンデータ、バックエンド移行

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / RSS