田舎の技術者が奮闘中

php ruby node.js javascript などのスクリプト言語とサーバー(Chef、Vagrant)に関して書きます。

都道府県コードや市区町村コードをDBにマスタデータとして作成

全国版のポータルサイトなどを作成する際に、会社情報などを登録するフォームを作成すると思いますが、住所の登録などをどのように構築するかいつも悩んでしまいます。
登録だけでなく検索でも都道府県などの住所を流用した検索画面にしたい場合は、おそらくですが都道府県と市区町村をDBに保持し、コードなどで検索をすると思います。
今回はその都道府県コードや市区町村コードを利用し、railsへの組み込み方法を考えていきます。
railsのseedを使用するので、都道府県と市区町村のCSVファイルを2個準備します。

まずデータをDL

兎にも角にもデータが無いと、どうしようもないのでgoogle先生に訪ねてみました。
「先生!市区町村コードをDL出来る優良サイトは無いっすか?」

はい、有りました。

http://www.dictator.co.jp/i/i_jis/i_jis_00_handle.html

武蔵野ウイング有限会社様が無料で提供していました。
本当に感謝です。

早速CSVをDLしてきます。
CSVをそのまま使用してもいいのですが、ちょっとだけ加工します。

コード,CD付き,市区町村名,よみがな,市外局番,主要郵便番号上5桁
01100,011002,札幌市,さっぽろし,,
01101,011011,札幌市中央区,さっぽろしちゅうおうく,011,060-00 064-08 064-09

これを・・・

1,札幌市,さっぽろし
1,札幌市中央区,さっぽろしちゅうおうく

このように変更します。
rubyでスクリプト組んでもいいですが、あまり修正を入れない情報なので、サクラエディタなどを活用しデータを加工しました。
短径選択するだけです。1分で終わります。(プログラム組むより早いですね)


都道府県コードに関しては、47都道府県しか無いので自作します。
(探せばあると思いますが、面倒くさいので作ったほうが早いです。)

北海道
青森県
岩手県
宮城県
秋田県
山形県
福島県
茨城県
栃木県
群馬県
埼玉県
千葉県
東京都
神奈川県
新潟県
富山県
石川県
福井県
山梨県
長野県
岐阜県
静岡県
愛知県
三重県
滋賀県
京都府
大阪府
兵庫県
奈良県
和歌山県
鳥取県
島根県
岡山県
広島県
山口県
徳島県
香川県
愛媛県
高知県
福岡県
佐賀県
長崎県
熊本県
大分県
宮崎県
鹿児島県
沖縄県

これで2個のCSVができたと思います。
とりあえず都道府県のCSVをmst_japans.csv、市区町村のCSVをmst_cities.csvと名称を付けます。
(文字コードはUTF-8に)

そしてファイルを「db」の直下に配置します。

DBの構成

リレーションさせますので、簡単なDB構成をメモ

# 都道府県テーブル
rails g model mst_japan id:integer name:string

# 市区町村テーブル
rails g model mst_city id:integer japan_id:integer name:string kana:string

seed.rbに追記

seed.rbにプログラムを追加します。

require "csv"
# mst_japans
CSV.foreach('db/mst_japans.csv') do |row|
  MstJapan.create(:id => row[0], :name => row[1])
end

# mst_cityes
CSV.foreach('db/mst_cities.csv') do |row|
  MstCity.create(:id => row[0], :japan_id => row[1], :name => row[2], :kana => row[3])
end

コマンド

rake db:seed

これでデータが入ると思います。