2021-09-28
日本の国コードは JP または JPN または 392 です。 これは国際標準化機構(ISO)による ISO 3166 (COUNTRY CODES)として定められています。

国別の統計データなどでは国名を書くと長いので2文字や3文字コードがよく使われますが、表示上は日本語で読みたいので対応表が必要です。 デジタル庁のベースレジストリとして指定された住所ですが、国や地域もアドレスの一種、合わせて整備されるとうれしいですね!

GitHubにiso3166はたくさんありますが、日本での表記を含む対応規格であるJIS X 0304で検索してもヒットしなかったので、ひとまずWikipediaを元に日本語表記付きのISO3166-1を作りました。

code4fukui/iso3166: ISO3166 (JIS X 0304 / jisx0304)
CSVファイルJSONファイルは、一般的なプログラミング言語から簡単に使えます。
JavaScriptであれば、下記のように超かんたんに使えるESモジュールも用意しました。 import { ISO3166 } from "https://code4fukui.github.io/iso3166/ISO3166.js"; console.log(ISO3166.getCountryByCode("JPN"));

下記、つくりかたの紹介です。

ISO 3166-1 - Wikipedia
日本語版WikipediaのISO3166-1


日本語名を含む表を発見。ひとまずこれを使おう。表部分を選択してコピー。


Google Spreadsheet に貼り付け。表データになった!


「ファイル、ダウンロード、カンマ区切りの値(.csv、現在のシート)」で、CSV化。

インデックス行を取り除き、名前を付け替え、不要な列を取り除いて、CSVとJSONとJavaScriptのデータとして書き出すプログラムを、JavaScript/Denoで書いて実行。 import { CSV } from "https://js.sabae.cc/CSV.js"; import { assert } from "https://js.sabae.cc/assert.js"; const csv = await CSV.fetch("iso3166-1_temp.csv"); const csv2 = csv.filter(l => l[1].length); // インデックス行を取り除く const data = CSV.toJSON(csv2); // CSVからJSONへ const notmatch = data.filter(d => !d["各行政区分"].endsWith(d["alpha-2"])); // 各行政区はalpha-2か? assert(notmatch.length == 0); // 確認できたので削除しよう const data2 = data.map(d => ({ alpha3: d["alpha-3"], alpha2: d["alpha-2"], numeric: d.numeric, name: d["ISO 3166-1における英語名"], name_ja: d["国・地域名"], area: d["場所"] })); // 名前変更 const makeDataJS = (name, json) => `export const ${name} = ${JSON.stringify(json)};\n`; await Deno.writeTextFile("iso3166-1.csv", CSV.stringify(data2)); await Deno.writeTextFile("iso3166-1.json", JSON.stringify(data2)); await Deno.writeTextFile("iso3166_1.js", makeDataJS("iso3166_1", data2)); console.log(data2.length); // 数表示 ISO3166.js というESモジュールとテストコードを書いて、テスト(deno test -A)。 Code for FUKUIのGitHubにアップして、GitHub Pages設定してウェブ公開。ESモジュールなので、ブラウザやDeno上でかんたんに使えます。

Code for FUKUI は、福井や世界をちょっと便利にしたい人のコミュニティ。
GitHubでのコメント(Issue)、プルリク、大歓迎!

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS