Help us understand the problem. What is going on with this article?

GolangでJIS規格の都道府県を扱うライブラリを作った

More than 1 year has passed since last update.

都道府県をシステムで扱う時、多くの場合JISX0401の規格に基づいたコードが振り分けられることがほとんどかと思います。

都道府県は全部で47件と数が少ないためプログラム中にハードコードされる実装も多いかと思いますが1
そもそも規格があるのだから規格に沿ったライブラリを公開してそれを利用するほうが、規格という共通認識・その実装の再利用といった観点から良いはずです。

多くのプログラミング言語には、JISX0401に沿った都道府県の情報を得るライブラリが存在しているかと思いますが、Golangにおいてはその存在が確認出来なかったため今回実装して公開を行いました。

ライブラリの名称は過去Rubyを利用していた時代に愛用していたchocoby/jp_prefectureをリスペクトし、同じ名前をつけさせていただきました。
https://github.com/diverse-inc/jp_prefecture

使い方

以下のimport文を追加することで、ライブラリを利用出来るようになります。

import pref "github.com/diverse-inc/jp_prefecture"

都道府県の情報を全件取得するにはList関数を呼び出します。
取得出来る都道府県情報は、JISX0401で定義されたコード順に並んでいます。

prefs := pref.List()

取得出来る都道府県情報は、Prefectureというインターフェースを通してアクセスすることが出来ます。

prefs[0].Code()  // 1
prefs[0].Kanji() // "北海道"
prefs[0].Kana()  // "ほっかいどう"
prefs[0].Roma()  // "hokkaidou"

また、このライブラリはコード、漢字名、かな名、ローマ字名での検索機能を持っており、個別の都道府県情報を取得するのにも利用出来ます。

// コードで検索
prefInfo, ok := pref.FindByCode(1)
prefInfo.Kanji() // "北海道"

// 漢字名で検索 末尾の「都」、「府」、「県」は省略可
prefInfo, ok := pref.FindByKanji("東京")
prefInfo.Kanji() // "東京都"

// かな名で検索 末尾の「と」、「ふ」、「けん」は省略可
prefInfo, ok := pref.FindByKana("きょうと")
prefInfo.Kanji() // "京都府"

// ローマ字名で検索 末尾の「-to」、「-fu」、「-ken」は省略可
prefInfo, ok := pref.FindByRoma("okinawa")
prefInfo.Kanji() // "沖縄県"

// 存在しないキーで検索すると、都道府県情報はnilとなり、okがfalseになります。
prefInfo, ok := pref.FindByCode(0)
prefInfo // nil
ok       // false

  1. 市区町村まで含めて扱う場合は、国土交通省が公開している市区町村検索APIなどを利用するケースのほうが多いためハードコードされることはないと思います。 

k-motoyan
プログラミング楽しいよ
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away