RubyOnRails

KEN_ALL.CSVを使ってRailsで郵便番号を検索するサイトを作る1

投稿日:

 

放置しっぱなしだったKEN_ALL.CSVで簡単に郵便番号を検索できるサイトを作ってみた

参考 KEN_ALL.CSVを使える形にする

郵便番号データダウンロード

KEN_ALL.CSVデータの概要

www.post.japanpost.jp/zipcode/dl/readme.html

郵便番号データファイルの形式等

  • 全角となっている町域部分の文字数が38文字を越える場合、また半角となっているフリガナ部分の文字数が76文字を越える場合は、複数レコードに分割しています。
  • この郵便番号データファイルでは、以下の順に配列しています。
  1. 全国地方公共団体コード(JIS X0401、X0402)……… 半角数字
  2. (旧)郵便番号(5桁)……………………………………… 半角数字
  3. 郵便番号(7桁)……………………………………… 半角数字
  4. 都道府県名 ………… 半角カタカナ(コード順に掲載) (注1)
  5. 市区町村名 ………… 半角カタカナ(コード順に掲載) (注1)
  6. 町域名 ……………… 半角カタカナ(五十音順に掲載) (注1)
  7. 都道府県名 ………… 漢字(コード順に掲載) (注1,2)
  8. 市区町村名 ………… 漢字(コード順に掲載) (注1,2)
  9. 町域名 ……………… 漢字(五十音順に掲載) (注1,2)
  10. 一町域が二以上の郵便番号で表される場合の表示 (注3) (「1」は該当、「0」は該当せず)
  11. 小字毎に番地が起番されている町域の表示 (注4) (「1」は該当、「0」は該当せず)
  12. 丁目を有する町域の場合の表示 (「1」は該当、「0」は該当せず)
  13. 一つの郵便番号で二以上の町域を表す場合の表示 (注5) (「1」は該当、「0」は該当せず)
  14. 更新の表示(注6)(「0」は変更なし、「1」は変更あり、「2」廃止(廃止データのみ使用))
  15. 変更理由 (「0」は変更なし、「1」市政・区政・町政・分区・政令指定都市施行、「2」住居表示の実施、「3」区画整理、「4」郵便区調整等、「5」訂正、「6」廃止(廃止データのみ使用))

 

データの成形

データ成形の方針は次のとおりにした

  • columnはシンプルに3つ!
  • 郵便番号、住所、住所ふりがな。
  • 住所のデータは半角スペース区切り。

多くのデータベースはマルチカラム検索に対応していないから。そして、LIKE検索は英文のように半角区切りしてあれば多少は早くなるかもと期待したから。

文字コードを確認

もとのALL_KEN.CSVの文字コードはshift-jis

コードの 修正

make_real_ken_all.pl

もとのサンプルコードは住所をきれいに表示されるように工夫してある

これを流用してかなの住所もまとめて出す

*コード中の日本語が文字化けしていたので最初にuse utf8を明記しました

real_ken_all.csvができているので、一応文字コードも確認

Modelの作成と初期データの配置

Modelの作成

 

seed

csvファイルをコピー

初期データはどこに入れたらいいか迷ったけどdb/に入れておいた

開発用データベースにデータをいれる

db/seed.rbを編集

 

SQLiteのインサートは遅い

15分くらいかな

一応なにか表示させておかないと心配なので全データを表示するようにしている

沖縄までいったら終わり

確認

データが入っているかコンソールから確認する

データの数は一致するか確認する

 

MySQLはいろいろ警告が出た気がするんだけど、文字列が255超えてたらとか・・とりあえず知らね

 

追記

やっぱり255字を超えていたよ!

postgresqlに入れようとしたらエラーでた

stackoverflowによるとタイプをtextに変えればいいらしいよ

 

見た目を整える

Controllerひな形を作成

最近はroutesも作ってくれるのか

rootアドレスの設定

サーバアドレス:3000/でアクセスできるようルートに設定

public/index.htmlを削除

View

ますviewから@searchesは空なので設定しなくても、else以下が無事表示されればOK

 

Controller

では、@searchesを設定してみる

とりあえずデータが出ることは確認できた

 

フォームの設置と検索

次にフォームから検索できるようにする

 

 

まずはzipコードだけで試す

 

メッセージの表示条件の変更

 

かなや漢字もとりあえず検索できるようにしてみる

とりあえず・・・

 

検索語をテキストフィールドに表示する

フォームをリロードしてしまうので、テキストフィールドに検索した語がはいるようにする

テキストフィールドのvalueを設定すればOK value:じゃないことに注意

 

郵便番号にハイフンを挿入する

郵便番号が0000000みたいな形式なので、000-0000と表示されるようにgsubで置換

zipは7桁にきまっているのでこれで大丈夫なはず

 

kaminariを導入する

やはりページネーションはほしいのでkaminariを導入する

1ページ10個くらいで

 

ページネーション用のナビゲーションを設置

初期ページや検索語が空の時はデータを表示しないようにする

とりあえず

ロジックはあとでよく考えないといけないかも

見た目をもう少し成形

CSSを整える

  • 検索バーをもう少し大きくしたい
  • 空間に余裕を padding
  • データごとの区切りを明確にしたい border

 

・・・まあ見やすくなった

あとはロジックの書き足しとAjax化をしたい

  • ひらがな対応
  • 郵便番号をハイフン付きで検索したとき
  • 全角数字で検索したとき
  • 2語以上のとき
  • zip検索が後方一致が優先
  • 検索語のハイライト

-RubyOnRails
-,

執筆者:

関連記事

no image

Railsで2ch風掲示板を作ってみた

  今年のGWに作った動画です Railscastsとドットインストールに触発されてチュートリアルみたいなものを作ってみたくてやりました 途中で辞めてしまいましたが Ruby on Rail …

Backbone.jsからRails3.2へのPUTに対して204(no content)が返ってくる問題

By: Bernardo Chang – CC BY 2.0   UPDATEするときRailsはデフォルトでJSONには何も返さないのがデフォルトぽい [crayon-5978 …

heroku操作メモ

By: Yasuhiko Ito – CC BY 2.0 5分でRailsアプリを公開できるherokuですが、いつもステップ・バイ・ステップでつまずいているのでリスト化した heroku …

erbで要素のidやclassを指定するならcontent_tag_forとdiv_forが便利だった

no image

Rails3.2からBackbone.jsとD3.jsを使う一例

目次1 Backbone.jsからD3.jsを使う2 RailsのネストしたURLでBackboneを使う Backbone.jsからD3.jsを使う d3.jsで力指向グラフを使って遊ぶ2のクラス構 …