/zip2addr

郵便番号から住所欄を満たすアレを、シェルスクリプトで実装

Primary LanguageShell

「郵便番号→住所」補完をshでやるデモ

これは何?

これは、ネット通販などでよくある「郵便番号に基づく住所補完機能」を シェルスクリプト(Bourne shell)+UNIX標準コマンド+Ajax で実装したものです。他のLL言語も、RDBMSも、jQuery等のJavaScriptライブラリーも、使っていません。

  • このプログラムは、他に curl コマンドと、漢字変換コマンド (iconv または nkf)を必要とします。
  • FreeBSD 9.1R と CentOS 6.3 で動作を確認しています。

デモを見る!

こちらでどうぞ。 さくらのクラウドいいね!(*^ー゚)b

注目すべきこと

その1.速さ

シェルスクリプトでプログラミングするなんて遅いと思い込んでいませんか?そんな方は論より証拠。このプログラムをWebサーバーにデプロイして動かしてみてください。

郵便番号は約12万レコードありますが、その中から指定された住所を探し、画面に表示するまで何秒かかりましたか?

シェルスクリプトはグルー言語。自分自身でこなそうとせずに、コマンドを呼んでそれらに任せればいいんです。UNIX標準コマンドはCで書かれているので速いですよ。

その2.難しいことも、簡単なことの組み合わせで実現できる

「シェルスクリプトって他の言語のような豊富なライブラリーないし、難しいことできないじゃない」って思い込んでいませんか?いやいや、たぶんそんなあなたの想像以上に色々なことできますよ。

例えばCSVデータの解析。そのために昔、parsrc.sh というコマンド自作しましたが、ご覧のとおり中身は AWK や sed や tr 等の組み合わせでできています。他にも、RDB 的なことをやらせたければ join コマンドなんてものがありますし、Web API を叩きたければ curl コマンドが便利ですし、メールを飛ばしたければ sendmail コマンドを使えばいいわけです。

実際、それで私はショッピングカートプログラムを作ってしまいました。(近日公開予定)

ファイル・ディレクトリー構成

.
|-- README.md ................ このファイル
|
|-- data  .................... 郵便番号辞書ファイル関連ディレクトリー
|   |
|   |-- mkzipdic_kenall.sh ... 郵便番号辞書を作成するシェルスクリプト(地域名用)
|   |-- mkzipdic_jigyosyo.sh . 郵便番号辞書を作成するシェルスクリプト(事業所用)
|   |                          ・要 zipコマンド、curlコマンド、及び iconv または nkf コマンド
|   |                          ・crontabなどから実行させるとよい
|   |
|   `-- jigyosyo.txt.sample .. 辞書ファイルのサンプル(地域名用、最初の30行を抜き出し)
|   |
|   `-- jigyosyo.txt.sample .. 辞書ファイルのサンプル(事業所用、最初の30行を抜き出し)
|
|
|-- public_html .............. Webディレクトリー(httpdでこの中を公開する)
|   |
|   |-- index.html  .......... 入力フォーム(Webブラウザーでこのファイルを開く)
|   |
|   |-- zip2addr.js .......... 郵便番号→住所 変換用クライアントサイドプログラム
|   |
|   |-- zip2addr.ajax.cgi .... 郵便番号→住所 変換用サーバーサイドプログラム
|   |                          (もちろんシェルスクリプト)
|   |
|   |-- zip2addr_xmlapi.ajax.cgi ... 郵便番号→住所 変換用サーバーサイドプログラム
|   |                               (よそのXML形式APIを叩いて検索するバージョン)
|   |
|   `-- zip2addr_jsonapi.ajax.cgi .. 郵便番号→住所 変換用サーバーサイドプログラム
|                                   (よそのJSON形式APIを叩いて検索するバージョン)
|
`-- commands ................. 自作コマンド置き場
    |
    |-- parsrc.sh ............ CSVをシェルスクリプト向けに正規化するコマンド"PARSeR-Csv"
    |
    |-- parsrj.sh ............ JSONをシェルスクリプト向けに正規化するコマンド"PARSeR-Json"
    |
    `-- parsrx.sh ............ XMLをシェルスクリプト向けに正規化するコマンド"PARSeR-Xml"
                               参考:https://gist.github.com/richmikan/3251311