刹那(せつな)の瞬き

Willkömmen! Ich heiße Setsuna. Haben Sie etwas Zeit für mich?

はがきデザインキットの yubin10.db から自己都合で住所データを抽出してみた

先日、はがきデザインキットが入ってた macOS Mojave 環境を発掘しました。
既にサポート終了してるアプリですが、「住所書出」機能を利用して、住所データを書き出す事は可能です。

早速、書き出してみたものの、出力された address_list.csv は、残念ながら私の欲しい形式の CSV ファイルではありませんでした。

....

そもそも、はがきデザインキットのデータは yubin10.db に記録されています。
そして、yubin10.db は SQLite のデータファイルなので、CLI である sqlite3 コマンドが利用できます。

私の欲しい形式の CSV ファイルは、文字列がダブルクオートで括られ、空文字列・項目省略・NULL 値が判別可能であれば良いのです。
これは sqlite3 コマンドで提供される機能の範疇で済みます。

せっかくの機会なので、yubin10.db から直接住所データを抽出してみました。

方針

yubin10.db のテーブルを私の都合で解釈します。

  • 対象レコードは全件個人。
  • 対象項目は私が識別できた項目から独断で決定。
  • 項目名は address_list.csv の日本語名を参考に付加。
  • 連名は夫婦しか登録してないので、一名のみ。
  • 敬称は "様" のみ。
  • カテゴリは名称のみ。

スクリプト

sqlite3 コマンドが一括処理できるようにスクリプトを用意します。

・ファイル名: hagaki_designkit.sql

.mode csv
.headers on
.once result.csv
SELECT
    a.post_app_no AS '番号',
    a.post_app_name_sei AS '氏名(姓)',
    a.post_app_name_mei AS '氏名(名)',
    a.post_app_namekana_sei AS 'フリガナ(姓)',
    a.post_app_namekana_mei AS 'フリガナ(名)',
    a.post_app_disp AS 'リスト表示用氏名',
    a.post_app_disp_kana AS 'リスト表示用フリガナ',
    (CASE WHEN a.post_app_keisho = 1 THEN '様' ELSE '' END) AS '敬称',
    a.post_app_zip AS '郵便番号(自宅欄)',
    a.post_app_address1 AS '自宅住所(都道府県)',
    a.post_app_address2 AS '自宅住所(市区町村)',
    a.post_app_address3 AS '自宅住所(番地等)',
    a.post_app_address4 AS '自宅住所(建物名)',
    a.post_app_disp_address AS 'リスト表示用自宅住所',
    IFNULL(r.post_app_name_mei, '') AS '連名1(名:自宅欄)',
    (CASE WHEN r.post_app_renkeisho = 1 THEN '様' ELSE '' END) AS '連名1(敬称:自宅欄)',
    c.post_app_category_name AS 'カテゴリ'
FROM post_app_adressbook AS a
    LEFT OUTER JOIN post_app_address_category_tbl AS b
    	ON b.post_app_address_no = a.post_app_no
    INNER JOIN post_app_address_category_mst AS c
        ON c.post_app_category_no = b.post_app_category_no
    LEFT OUTER JOIN post_app_renmei AS r
        ON r.post_app_no = a.post_app_no
ORDER BY
    a.post_app_no;
.system open -a TextEdit result.csv

スクリプト内のドットコマンドでは出力を CSV モードにして、項目名の行を先頭に付加、そしてクエリの実行結果を result.csv に書き込むように指定します。

最後の .system で macOS 標準のテキストエディット (TextEdit) を起動して、result.csv の内容を確認します。

ちなみに VSCode で確認する場合は.system code result.csvとします。

実行

ターミナルを起動して、スクリプトを処理します。

$ sqlite3 yubin10.db < hagaki_designkit.sql

$ file --mime result.csv
result.csv: application/csv; charset=utf-8

result.csv ファイルを確認した後、念の為、文字コードも確認してみました。
無事 UTF-8エンコードされています。

ほんと sqlite3 コマンドって便利ですね。※公式サイトはこちら

 

あとがき

住所データを失って早三年かと思ってたところ、まさか別環境に存在してたとは。
今更感満載ですが、これは僥倖とウキウキ作業してました。

しかし、はがきデザインキットが書き出す CSV ファイルは charset=unknown-8bit 、文字列はそのまま出力されます。
期待と異なる結果に、一瞬絶望しました。

それでも結果としては自分好みに処理できたので、概ね満足してます。

後は子供達の名前も連名に含んでるパターンが少々気になりますが、発掘した macOS Mojave 環境は既に消去したので、もはや確認する術がありません。
もう少し早く気づけば良かったな。