福井 和彦 / 畑中 侑
株式会社ミガロ.
システム事業部 システム2課

Webサービスを利用して機能UP！
―既存機能に住所検索を追加
Delphi/400 で Web サービスを活用する。
この仕組みと方法を、住所検索の実装を通して紹介する。

●はじめに●住所検索実装の課題●Webサービスを利用する●仕組みについて●画面イメージと実装機能●実装方法●既存機能への組み込み
●最後に

1．
はじめに

略歴
福井 和彦
1972 年 03 月 20 日生
1994 年大阪電気通信大学工学部卒
2001 年 04 月株式会社ミガロ . 入社
2001 年 04 月システム事業部配属

略歴
畑中 侑
1983 年 07 月 06 日生
2006 年京都産業大学法学部卒
2006 年 04 月株式会社ミガロ . 入社
2006 年 04 月システム事業部配属

現在の仕事内容
主に Delphi/400 を使用した受託開発で、要件確認から納品・フォローに至るまでのシステム開発全般に携わる。また、Delphi/400 の導入支援やセミナーの講師なども担当。

現在の仕事内容
システム受託開発に携わって 5 年目。ミガロ . に入社し初めてプログラムを作成するも、現在は担当顧客を持ち、小規模から中規模案件のリーダーや大規模案件のサブリーダーを務めるに至る。

便番号データのマスターファイルが必要したい。
「Web サービス」とは、インターとなる。全国の郵便番号と住所情報は膨ネット技術を利用した、さまざまなサイトで提供されているサービスである。

基幹システムにおいて、郵便番号や住大な量になるが、日本郵政（郵便事業株所を入力するケースは少なくない。例え式会社）のホームページよりダウンロー

今回題材としている住所検索についてば、取引先マスターを見てみると、そこド可能で、それを IBM i へ取り込むプ

も、Web サービスを提供しているサイトには郵便番号や住所といった情報を持っログラムを作成することで、マスターがある。このサービスを利用することで、ており、請求書や納品書への印字に利用ファイルは作成できる。

前述の郵便番号のファイルや仕組みの追することが多い。また発注業務においてだが、市町村合併等による郵便番号情加等を必要とせず、また最新データに保は、納入場所の指定など、郵便番号を含報の変更に対応して、日本郵政ホームつためにメンテナンスに時間を割くことめた住所情報などの入力が多かれ少なかページのデータも月 1 回のペースで更新もなく、住所検索を実現することができれ求められる。

されている。このため、住所検索をシスるのである。

ただし、これらの情報を入力していくテムに実装したとしても、住所情報を保のはけっこうな手間ではある。特にクラ持し常に最新に保つことが課題となる。

イアント / サーバー型の基幹システムの

しかし、これまで住所情報をすべて手場合、すべて手入力をしていることの方入力で対応してきたのであれば、この“あ今回は例として、「郵便番号検索 APIが多いのではないだろうか。もし、郵便ると便利な機能”を、さらに手間を掛け（※）
」という Web サービスを利用して、番号から住所を検索できる機能を実装すて新たに実装するのは難しい選択であろ

住所検索の実装方法の説明を進めていることができれば、入力の手間を大きくう。

く。

軽減することが実現できる。

2．
住所検索実装の課題

40

4．
仕組みについて

まず「郵便番号検索 API」を利用し3.Webサービスを利用するて住所検索を行う仕組みだが、Web サービスを提供している Web サーバーに対して、既定の書式の URL をリクエスト

クライアント / サーバー型のシステム

そこで本稿では、Web サービスを利用する。そして、検索結果を XML 形式でで住所検索を実装しようとした場合、郵した住所検索の実装方法についてご紹介取得し、検索結果を画面へ反映する流れ

図1

図2

図341となる。
次の例は、郵便番号 556-0017 で検索する場合の URL である。これをブラウば郵便番号を 3 桁で指定した場合は、最XML データバインディングの手順

初の 3 桁がその指定と一致する郵便番号

は、
【図 5】
【図 6】を参照いただきたい。

が、検索結果として返ってくる。

グで使用する XML ファイルについてザで実行すると、【図 1】のような XMLが取得できる。

また今回、XML データバインディン●キーワード検索

は、グルーブテクノロジーの Web サイ

この仕組みを利用した住所検索の作成指定したキーワードが、“都道府県”“市トより取得することが可能である。取得手順について、具体的に説明していきた区”“町村”のいずれかに含まれている

方法は【図 7】を参照いただきたい。

い。

検索結果が返ってくる。

実際に作成されたユニットを見てほしい。XML 情報で確認したタグごとに設

また、検索結果を呼び出し元画面へ反定された項目が、自動でプロパティとし

http://api.postalcode.jp/v1/zipsearch

映する方法としては、OK ボタンの押下てアクセスできるようになっていること?zipcode=5560017&format=xml

時に明細で選択されている郵便番号と住がわかるだろう。
【ソース 2】【例】郵便番号“556-0017”で検索※利用規約について
最近の Web サービスは、今回紹介す所を、フォームの property 経由で呼びまた、グローバル関数として XML 情出し元画面へ渡す仕組みとしている。

報を引数に持ち、プロパティに格納するフォームの property 設定については、【ソース 1】を参照していただきたい。

までその種類も範囲も多種多様である。
利用するにあたっては、Web サービスを提供している提供元がその利用方法を

6．
実装方法
ここから、各機能の実装方法について、順番に紹介していく。

コンポーネント
Delphi/400 で利用するにあたり、ポ定めている。それが利用規約である。提今回利用する Web サービスは、URL

イントとなるコンポーネントは 2 つある。

供元の利用規約をよく読み、理解したうを指定すると、XML で情報を返してく

URL を 指 定 し て 結 果 を 取 得 す る

えで使用していただきたい。

れるサービスである。

本稿で取り上げている、グルーブテクノロジー提供の「郵便番号検索 API」
についても同様で、クレジット表記および利用規約の同意が必要である。
【郵便番号検索 API】
http://groovetechnology.co.jp/index.
html

5．
画面イメージと実装機能

TIdHTTP コンポーネントと、XML を扱うための TXMLDocument コンポー

XML情報とXMLスキーマ
Web サービスで提供される XML には、定義されたタグが設定されている。
【図 4】
これをスキーマ定義というが、XMLネントである。

コーディング解説
ここから、コーディングの解説を行っていく。
【ソース 4】

情報（図 1）を見るとわかるように、ど最初に、XML データバインディング

んな情報が存在するかは容易に確認するで自動生成されたユニットを、ユニットことができる。

参照する。

ただ、プログラムから利用するにあた

今回作成する住所検索のサンプル画面り、この文字列を解析して、プログラム①サンプル画面に表示されているようのイメージは、【図 2】となる。また、を 作 成 す る と な る と 大 変 で あ る。に、画面上に“検索方法”として設けた使用するコンポーネントは、【図 3】をDelphi/400 ではこの解析を自動で行い、RadioGroup の ItemIndex に よ り、参照していただきたい。

ユニットとして作成する機能がある。そWeb サービスで設定されている URL 定

れが「XML データバインディング」で型文に検索キーを埋め込む。
（ソースサある。

ンプルでは、URL 定型文を const 定義

明細表示用コンポーネントとして、TStringGrid を使用している。このため、明細にデータを表示させるための項目転送ロジックを記述する必要がある。

この機能はウィザード形式になっておとして記述）

り、XML ファイルを指定することで、●検索方法＝郵便番号の場合

そして、実装する検索機能としては、XML 情報を簡単に扱うことのできるユ「郵便番号検索」と「キーワード検索」ニットが自動生成される仕組みである。

URL 定型文と郵便番号とで、リクエの 2 種類の方法を実装する。これらの機開発環境の 1 機能として、Delphi/400スト URL を作成し、変数“URL”に格

能 は、Web サ ー ビ ス「 郵 便 番 号 検 索に備わっている。

納する。

API」で提供されている機能である。
●郵便番号検索
指定する郵便番号が 3 桁または 7 桁の場合のみ、検索結果が返ってくる。例え42

れらを利用することで簡単に実現することができる。
【ソース 3】

る郵便番号検索をはじめ、地図表示から、ショッピング、オークション、商品検索メソッドも自動で生成される。今回はここの機能を利用すれば、文字列のXML 情報をプログラムで解析する必要【例】がなくなり、自動生成されたユニットをhttp://api.postalcode.jp/v1/zipsearch

利用することで、プロパティとして簡単?zipcode=556&format=xml&ie=Shift_にデータにアクセスできる。

JIS&oe=Shift_JIS

図4

図5

図643

●検索方法＝キーワードの場合
URL 定型文とキーワードとで、リク記述は、前章の検索画面で解説したものと重複するので割愛する）

畑中 侑
現在の仕事内容（詳細）エスト URL を作成し、変数“URL”に格納する。

②引数となる郵便番号で検索した結果、取得できない、あるいは結果が単一でな【例】

い場合は、そのまま処理を終了する。

http://api.postalcode.jp/v1/zipsearch?
zipcode= 湊町 &format=xml&ie=Shift_③検索した結果が単一である場合は、検JIS&oe=Shift_JIS

索結果をプロパティに格納し、戻り値にTrue をセットする。

② TIdHTTP コンポーネントの Get メ

呼び出し元画面では、戻り値に応じて、ソッドを、変数 URL で呼び出し、戻りTrue の場合はプロパティから必要な情値として得られる XML 情報の文字列

報を画面にセットし、False の場合は、を、TXMLDocument コンポーネントエラーとして処理するか検索画面を表示の XML プロパティにセットする。

させる。こういった制御を行えば、ユーザーにもわかりやすいと思われる。

③ XML データバインディングにより、自動生成されたユニットの関数
GetgrooveWebservice の 引 数 に、TXMLDocument を指定する。

8．
最後にDelphi/400 で Web サービスを利用することができるということは、ご存知④関数 GetgrooveWebservice は、郵便の方も多いだろう。しかし、具体的にど番号などを配列のプロパティとして持のサービスをどのように利用すればよいつ。そのプロパティの値を取得し、取得のか、わからない方も少なくないと思う。

件数分を画面に表示する。

今回“既存機能に住所検索を追加する”

またここで、前述の TStringGrid へと利用目的を明確にし、具体的な事例の表示するための項目転送ロジックを記述

1 つとして、Web サービスを利用したすることになる。

機能追加を紹介してきた。
本稿を通して、Web サービスの利用方法について、少7．
既存機能への組み込みしでもイメージしていただけたのであれ

既存機能に郵便番号や住所を入力する

なお、Web サービスを利用する場合、画面があれば、完成した住所検索を組みサービスを提供する側の都合により仕様込み、動作を確認していただきたい。

変更やサービスの停止が起きる可能性を今回は住所検索を呼び出し、検索結果認識しておく必要がある。したがって、を既存画面へ反映させる機能であった。

Web サービスを利用した機能を実装しさらに、既存機能の郵便番号入力時に、た場合、定期的な Web サービス提供サ

住所を直接取得できるようにすることもイトの状況確認が必要となる。

可能である。

このようなリスクはあるものの、昨今

後者は、既存機能の郵便番号入力時にの Web サービスでは、他にもさまざまチェックとして、【 ソース 5】の関数なサービスが提供されている。これら

GetAddress を組み込むことで実装が可サービスを上手に利用していくことは、能である。

利便性の高いシステムを構築していくう

なお、別ユニットのため、呼び出し元画面では uses 節への追加、関数を記述する前のフォームの Create、および呼び出し語のフォームの Release といった別途記述が必要である。

コーディング解説①戻り値の初期化を行う。
（それ以降の44

ば幸いである。

えで手助けの 1 つになるのではないかと思う。
M

システム受託開発に携わって 5 年目。ミガロ . に入社し初めてプログラムを作成するも、現在は担当顧客を持ち、小規模から中規模案件のリーダーや大規模案件のサブリーダーを務めるに至る。
Delphi/400 や RPG などのプログラム開発経験を積みながらスキルを磨きつつ、お客様のご要望に耳を傾け、一歩一歩提案力をつけるための修行中の毎日。

図7

ソース145

ソース2

ソース346

ソース4

ソース547