ようやく目的のものを作成できました。
長かった・・・苦労した・・・
この記事は、そんな開発の記録です。
郵便番号と住所とを、相互に変換するExcelアドインです。
作成を考えていた時期
郵便番号と住所との変換機能は、顧客管理ソフトガンジスを開発した頃から作成したいと考えていました。2018年頃の話です。
当時、独自に開発はせず、Webのサービスを利用してソフトにその機能を実装しました。
作成しなかった理由
その後、時々、機能作成の方法を考えることがあったのですが、住所から郵便番号への変換の精度を高める方法が難しく、断念していました。
また、私の場合、Excel上で、郵便番号・住所・名前・電話番号を、整形・正規化することが多いです。それには、それらの機能がアドインとしてあると便利だなぁ、と思っていました。しかし、C#に慣れてしまった今となっては、今更VBAで作成したくありませんでした。
Excel-DNA
ところが、C#でExcelアドインの開発ができるExcel-DNAがありました。
Excel-DNAを知ったのはいつなのか忘れてしまいましたが、実際に使ってみるととても楽なのが分かり、感動しました。
最初に作ったのは、郵便番号から住所に変換するアドインです。
郵便番号から住所への変換はさほど難しくはないのです。
住所の正規化
これが出来たので、住所から郵便番号への変換を、本格的に考えました。
調べるなかで、住所の正規化のライブラリを知りました。
住所を正規化をすると、郵便番号への精度の高い変換ができそうです。
よし、住所の正規化ができるようにしよう! と決意。
しかし、このライブラリはTypeScript
で書かれています。TypeScript
は私の技術の範囲外です。
.NETでどうにかこのライブラリを利用できないか、試行錯誤が始まりました。
試行錯誤
最初、TypeScript
をC#
に移植しようと少し挑戦しましたが、TypeScript
に慣れていない私には難しい。少し文法を学んだだけでは、無理そうです。移植は、TypeScript
もC#
もよく分かる人でないと難しいんじゃないか、と思いました。
次に、JavaScript
を.NET上で動かせるようなので、このライブラリも動かせるなら楽だなぁと、ずいぶん実験しました。多くの知見を得ましたが、最終的にこの方法は断念。
次に、TypeScript
をC#
に変換するオンラインのサービスを利用しました。すると、おおまかなC#
のコードが生成できました。これなら、修正すれば移植できそうです。とはいえ、かなり難しい部分もありました。
特に難題だったのは、regex
の処理です。
TypeScript
のコードをVisualStudioで動かせるようにして動作を確認しつつ、かなりの日数をかけて移植に成功。
しかし、ここまでしても、道半ばです。目的は、住所から郵便番号への変換です。
郵便番号のデータ
郵便番号と都道府県・市区町村・町域とのデータは、郵便局から提供されていますが、それを整形する機能を開発するのがとても大変でした。
例えば、町域名で「(丁目)」とついているのを解釈して、データを整形する必要があります。
また、正規化した住所と、整形した郵便番号データとを比較して、郵便番号に変換する機能を作成します。
終わりが見えないユニットテストを繰り返し、一つ一つ問題を解決していきました。
そしてやりとげました。
アドイン化
次に、これらの機能をまとめて、ExcelDNA
でアドインにします。
もちろん、ここでも解決しないといけない問題がありました。
一筋縄では解決できないのです。
これも解決しました。
仕上げ
ついに、仕上げの段階です。
アドインをダウンロードできるようにし、ヘルプなどのドキュメントを整えました。
そして、この記事を書いて、長年の課題の解決に至る道をふりかえったのです。