個人的にiOS 16になって最も嬉しかったのが「連絡先」アプリの大幅アップデートです。汎用的なvCard形式で連絡先が気軽に書き出せるようになりました。vCardはテキストベースの汎用的な電話帳データ形式です。今回はNode.jsからvCard形式を読む方法を紹介します。

  • スマートフォンからエクスポートしたvCardファイルをNode.jsで読んだところ

    スマートフォンからエクスポートしたvCardファイルをNode.jsで読んだところ

クラウド時代であってもバックアップが大切

今やいろいろなデータがクラウドに保存されるようになりました。スマートフォン上のデータも例外ではなく、様々な情報がクラウドにバックアップされます。そのため、スマートフォンを新しくした際のデータ移行はずいぶん楽になりました。

しかし、先日、知人がApple IDが乗っ取りに遭い、iPhoneの再インストールを余儀なくされた話を聞きました。旧アカウントは利用することができなくなり、新たにアカウントを作ることになったそうです。

何かトラブルが起きて、クラウド上のアカウントが使えなくなってしまうというのは、本当に恐ろしいことです。クラウドだから安心ということはなく、データセンターにトラブルが起きる可能性もありますし、突然その会社がサービスを停止してしまう可能性もあります。そして、知人のように乗っ取りの被害に遭う可能性もあるのです。そのため、大切なデータは、手元のストレージや別の会社のクラウドにもコピーをとっておくなどの対策が必要でしょう。

連絡先データをバックアップしよう

なお、知人の話に戻りますが、今回Apple IDが失効して一番困ったのは、膨大な電話番号やメールアドレスなどの連絡先データだったそうです。親しい人とはLINEでつながっていたものの、iOSの連絡先にだけ保存していた連絡先もあったようです。iPhone内のデータを抽出する有料のアプリも存在するので、万が一の場合にはそれを使うこともできるでしょう。

そもそも、iOS 16より前の「連絡先」アプリは、連作先データの一括エクスポートの機能がなく、一件ずつしかバックアップできなかったのです。連絡先は親しい友人だけと交換するものではなく、仕事で人と遭う機会の多い人などは1000件以上登録されている人もあります。そのため、iOS 16の連絡先アプリで手軽にバックアップが可能になったのは素晴らしいことです。

iOS 16の連絡先で一括バックアップの方法

iOSで一括エクスポートの方法ですが、「連絡先」アプリを起動します。そして、画面左上の「リスト」をタップします。そして、「すべての連絡先」を長押しします。すると、「書き出す」というメニューが表示されるのでタップします。すると、メールやAirDropで連絡先データを送信できます。

  • 連絡先を一括バックアップする方法

なお、エクスポートしたデータは「すべての連絡先.vcf」となっており、これは汎用的なvCard形式の連絡先データです。

ちなみに、ブラウザでアクセスできる、iCloudの「連絡先」アプリであれば、画面左にある設定アイコンをクリックして「vCardを書き出す」をクリックすることでもダウンロードできます。iOS 16にアップデートしていない人はブラウザアプリを利用すると良いでしょう。

Androidで連絡先をエクスポートする方法

もしも、Androidを使っている場合には、各社それぞれの連絡先アプリが用意されていて、一言では方法を紹介できません。それでも、Android純正の「連絡帳」アプリを使っている場合は、下部にある「修正と管理 > ファイルへエクスポート」をタップして、連絡先を選んで[.vcf にエクスポート] をタップすることで、vCard形式のデータをエクスポートできます。

また、GoogleのWebアプリで「連絡先」にも、エクスポート機能があります。

Node.jsでvCardデータを読もう

次に、スマートフォンからエクスポートした、vCardデータについて見ていきましょう。vCardは1995年にVersitコンソーシアムによって提唱された規格であり、多くのメールソフト、携帯電話端末でサポートされています。

テキストベースのフォーマットなので、メモ帳などのテキストエディタを使って気軽に中身を確認することができます。以下は鈴木太郎さん1件分のデータです。軽く眺めてみましょう。

BEGIN:VCARD
VERSION:3.0
N:鈴木;太郎;;;
FN:太郎 鈴木
X-PHONETIC-FIRST-NAME:たろう
X-PHONETIC-LAST-NAME:すずき
ORG:(株) xxx;
TEL;TYPE=CELL;TYPE=pref;TYPE=VOICE:070 xxxx xxxx
END:VCARD

上記は1件分のデータですが「BEGIN:VCARD」で始まり「END:VCARD」で終わるという点がポイントです。もしも複数人分のデータであればこの形式のデータが繰り返し登場するものとなっています。

誰のデータがあるのか概観するプログラム

それでは、Node.jsを使ってvCardデータを読み込んでみましょう。Node.jsについては本連載2回目で紹介しています。

以下のプログラムは、vCardファイルを読み込んで、誰のデータを含んでいるのか名前と電話番号のフィールドを見つけて表示するプログラムです。「showlist.js」という名前で保存しましょう。

// vCardのファイル名を指定 --- (*1)
const VCF_FILE = 'すべての連絡先.vcf'
// テキストファイルの内容を読む --- (*2)
const fs = require('fs')
const text = fs.readFileSync(VCF_FILE, 'utf-8')
// 一行ずつ確認する --- (*3)
const lines = text.split('\r\n')
let nums = 0
let info = {}
for (const line of lines) {
    // BEGIN:VCARDか? --- (*4)
    if (line === 'BEGIN:VCARD') {
        nums += 1
        info = {'名前': '?', '電話': '?'}
        continue
    }
    // END:VCARDか?
    if (line === 'END:VCARD') {
        console.log('-', info)
    }
    // 名前のフィールドか?
    const reName = line.match(/^FN\:(.+)/)
    if (reName) {
        info['名前'] = reName[1]
        continue
    }
    // 電話のフィールドか?
    const reTel = line.match(/^TEL;.*:(\d+.*)$/)
    if (reTel && info['電話'] === '?') {
        info['電話'] = reTel[1]
        continue
    }
}
console.log(`${nums}人分のデータがあります`)

プログラムを実行するには、以下のコマンドを実行します。ただし、プログラムと同じディレクトリに「すべての連絡先.vcf」というファイルを配置してください。

node showlist.js

すると、vCardに含まれている人の名前の一覧と何人分のデータがあったかを表示します。

この記事は
Members+会員の方のみ御覧いただけます

ログイン/会員登録(無料)

会員サービスの詳細はこちら