27
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-01-16

都道府県をシステムで扱う時、多くの場合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などを利用するケースのほうが多いためハードコードされることはないと思います。

27
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?