Tatehitoの技術メモ

ソフトウェアエンジニアです。いろいろ書きます。

【Rails】gem geocoderを使って郵便番号から市区町村を取得する

環境など

  • Rails 6.1.3
  • Ruby 2.7.2
  • geocoder 1.6.7

郵便番号から市区町村を取得する

gem geocoderを使うと、郵便番号から住所や経度緯度などを取得することができる。Geocoder.searchは配列を返すので、firstGeocoder::Result::Googleのインスタンスを取得する。引数にparams: { language: 'ja' })を指定すると日本語で情報を取得できる。

result = Geocoder.search(postal_code, params: { language: 'ja' }).first
p result.class
=> Geocoder::Result::Google

eocoder::Result::Googleには「東京都渋谷区恵比寿」のような日本の市区町村文字列を取得するメソッドが用意されていないので、自前で文字列を構成する必要がある。例えばこんな感じ。

def municipalities
  result = Geocoder.search('1500013', params: { language: 'ja' }).first
  if result.present?
    result.address_components_of_type(:administrative_area_level_1).first['long_name'] +
    result.address_components_of_type(:locality).first['long_name'] + # ここはresult.city でもいける
    result.address_components_of_type(:sublocality_level_2).first['long_name']
  else
    ''
  end
end