jp-address-romaji v0.1.7

「東京都新宿区西新宿二丁目8番1号」と「2-8-1 Nishishinjuku, Shinjuku-ku, Tokyo, Japan」を双方向に変換します。そして読みを推測しません——データに裏付けが無ければ、それらしい綴りを返さずに理由つきで断ります。

このページで、住所はどこまで外に出るか

変換そのものはすべてこのページの中で行われます。ただしデータの取得だけは通信します。ブラウザにはファイルシステムが無いので、住所データはこのページ自身が配信しているものを取りに行きます。

その結果、都道府県と市区町村は、リクエスト URL に現れます…/data/ja/東京都/新宿区.json のような形で、GitHub Pages のアクセスログに残ります)。それより後——番地・建物名・宛名は、どこにも送信されません。下の「このページが送ったリクエスト」に、実際に出た URL を全部並べてあります。

npm から Node で使う場合は、これも起きません。データセットはローカルのファイルから読むので、プロセスの外に何も出ません。ブラウザ経路は Node 経路より一段弱い保証です。プライバシーを理由にこのライブラリを選ぶなら、どちらの話なのかを区別してください。

このページが出したリクエスト 0 件 操作しながらこの数字を見てください。増えるのはその市区町村の町データをまだ持っていないときだけで、取得済みならいくら変換しても増えません。ただし方向ごとに1回ずつ出ます(順方向と逆方向は別々のキャッシュを持っているため)。この数字はページ自身が数えた値です——鵜呑みにしたくない場合は、ブラウザの開発者ツール(F12)の Network タブを開いたまま操作すると、同じことを外側から確認できます。

このデモの見方

どのボタンを押しても、確かめてほしいのは次の3つです。各ボタンの下に「見どころ」を1行書いてあります。

  1. 断ったケースを見る。このライブラリの主張は「正しく変換できること」ではなく「確認できないものを変換しないこと」です。宛名ラベルは、断られるより間違っているほうが困ります。プリセットには失敗するものが混ぜてあります——失敗は例外ではなく { ok: false, reason } という値で返るので、呼び出し側は必ず分岐することになります
  2. このページが送ったリクエスト」を見る。出ているのは都道府県と市区町村までで、番地から先は出ていないことを、URL の一覧そのもので確かめられます
  3. このデモが配っているのは市区町村ぶんだけだということ。全国は市区町村あり、データセットはその1つ1つが別ファイルです。ここに無い市区町村を入れると、ライブラリの答えではなくこのデモの都合で失敗します。そのときはそう表示します(下の「配っている市区町村」に一覧があります)

ライブラリを読み込んでいます…

このライブラリが「しない」こと

使う

npm install jp-address-romaji@0.1.7 jp-address-romaji-data@0.1.5
import { toRomaji, fromRomaji } from 'jp-address-romaji';

await toRomaji('東京都新宿区西新宿二丁目8番1号');
// → { ok: true, value: { formatted: '2-8-1 Nishishinjuku, Shinjuku-ku, Tokyo, Japan', … } }

await fromRomaji('2-8-1 Nishishinjuku, Shinjuku-ku, Tokyo');
// → { ok: true, value: { formatted: '東京都新宿区西新宿二丁目8-1', … } }

Node ではこれだけで動きます。データはローカルのファイルから読み、変換時にネットワークへ出ません。このページと同じことをブラウザでやるなら、データを自分で配信してその場所を指定します:

import { configureDataSource, toRomaji } from 'jp-address-romaji';

configureDataSource({ endpoint: 'https://your-site.example/address-data/ja' });

ライブラリが読むのは <endpoint>.json(都道府県・市区町村の索引)と、必要な1市区町村ぶんの <endpoint>/<都道府県>/<市区町村>.json だけなので、必要な市区町村だけを配信することもできます——このページがまさにそれです。ESM 専用・Node 18 以上。configureDataSource({ dataDir }) はブラウザでは動作せず、DATA_NOT_CONFIGURED になります(「近い挙動」に倒さないため)。