vCard (.vcf) パーサー — 連絡先ファイルを解析・写真・住所表示
**`.vcf` 連絡先ファイル** (vCard) を貼り付けるか選択すると、**名前 (N / FN)**、**電話番号** (CELL / WORK / HOME / FAX を TYPE 別に分類)、**メールアドレス**、**住所** (郵便番号 / 都道府県 / 市区町村 / 番地 / 国 を構造化)、**組織** (ORG)、**役職** (TITLE / ROLE)、**ニックネーム**、**誕生日 (BDAY)**、**記念日 (ANNIVERSARY)**、**写真 (PHOTO Base64)**、**URL**、**カテゴリ**、**Note**、**X-** 拡張フィールドを解析。**vCard 2.1 / 3.0 / 4.0** に対応、**複数連絡先** の連結貼付もチェーン表示。**Line folding** (75 文字超の継続行)、**QUOTED-PRINTABLE** (v2.1 国際文字)、**Base64 写真** の **inline data URL 復元** に対応。**完全にブラウザ内** で解析、連絡先データはサーバーに送信されません。Google Contacts / iCloud / Apple Contacts / Outlook の `.vcf` 出力をすべて受付け、引っ越し時のデータ確認・名刺データの確認・古い .vcf の中身チェックに。
使い方
**入力欄** に `BEGIN:VCARD` で始まる vCard データを貼り付けるか、**ファイルを選択** から `.vcf` ファイルを読み込んで **解析** を押すと、各連絡先がカード単位で表示されます。**名前 / 電話 / メール / 住所 / 組織 / 役職 / 誕生日 / 写真 / Note / カテゴリ / UID / REV** に加え、**X- で始まる拡張フィールド** (X-SKYPE, X-AIM, X-SOCIALPROFILE など) も「その他」 欄に表示。**サンプル** ボタンで日本語名 + 写真付きの v3.0 サンプル vCard を流し込み可能。電話番号・メール・UID は **ワンクリックでクリップボードコピー**。
詳細解説
vCard が含む個人情報の広さ
vCard ファイル (.vcf) は単一フォーマットの中に個人情報の全体像を格納します。氏名・読み仮名 (X-PHONETIC フィールド)・電話番号 (TYPE=CELL / HOME / WORK / FAX を含む)・メールアドレス・住所 (郵便番号・都道府県・市区町村・番地・建物名まで ADR フィールドで構造化)・誕生日・組織名・役職・SNS アカウント (X-SKYPE / X-AIM / X-SOCIALPROFILE) が 1 ファイルに入ります。また PHOTO;ENCODING=B;TYPE=JPEG:\<base64> 形式で顔写真がバイナリとして埋め込まれていることもあります。
Google Contacts / iCloud / 名刺管理アプリ Sansan や Eight からエクスポートした .vcf は、数十〜数千件の連絡先を 1 ファイルにまとめた形式で出力されます。このファイルをオンラインの vCard ビューアーに送ると、すべての連絡先の個人情報がサーバーに届くことになります。顧客リスト・取引先一覧・社内電話帳は、企業にとって GDPR / 個人情報保護法上で厳格に管理すべきデータです。
vCard ビューアーへの送信が持つ規模感
アドレス帳の .vcf をオンラインツールに送る行為は、「1 件の連絡先の確認」ではなく「全連絡先の一括提供」になりがちです。スマートフォンやメールクライアントの全件エクスポートは通常数百〜数千件の BEGIN:VCARD ブロックを含みます。アップロード型の vCard パーサーは、このデータをサーバーに受け取りパースします。サービスによっては「解析・確認目的でのデータ保持」を利用規約で定めていることもあり、そのデータがどこまで保持・利用されるかは利用者には見えません。
個人情報保護法や GDPR では、個人データを第三者提供する際には本人同意が原則として必要です。社内電話帳や顧客リストを外部サービスに送信することは、「業務目的での利用」という名目があっても、法的義務の確認が必要な操作です。
約270行のカスタムパーサーによるブラウザ内処理の仕組み
このツールは npm パッケージの vCard パーサーを使わず、約 270 行のカスタム実装でブラウザ内処理します。まず RFC 6350 §3.2 の line folding (75 文字超の行を次行の先頭スペースで継続) を unfold してから、プロパティ行を PROPERTY;param:value 形式で分解します。ENCODING=QUOTED-PRINTABLE パラメータを持つ行は、=XX 形式のバイト列を Uint8Array に復元し TextDecoder('utf-8') でデコードします。ENCODING=B パラメータの場合は値を atob() でバイナリに戻し、data URL (data:image/jpeg;base64,...) に変換して \<img> タグで表示します。外部の PHOTO URL (PHOTO:https://...) はブラウザの外部送信を防ぐため意図的にフェッチしません。
File API の FileReader.readAsText() で .vcf ファイルを読み込み、new Blob([...]) + URL.createObjectURL() でのダウンロードも含め、すべての操作がページのメモリ内で完結します。連絡先の個人情報も、埋め込まれた顔写真のバイナリデータも、ネットワークを経由しません。
連絡先エクスポート前の確認ツールとして
vCard ビューアーの実際の使いどころは、エクスポートした .vcf の内容確認とデータ品質の検証です。Google Contacts からエクスポートした全件 .vcf に X-PHONETIC-FIRST-NAME (読み仮名) が正しく入っているか、iCloud から取り出した .vcf の ADR フィールドが構造化されているか、Outlook からエクスポートした .vcf の文字化け (QUOTED-PRINTABLE 失敗) が起きていないか、といった確認に使えます。
また、他サービスへの移行前に vCard の構造を把握しておくことも重要です。Google Contacts の X-SOCIALPROFILE フィールドが移行先で保持されるか、Apple Contacts の BDAY フォーマット (ISO 8601 vs YYYYMMDD) が変換先で正しく読まれるか、を事前に確認できます。本ツールのサンプルボタンで vCard 2.1 / 3.0 / 4.0 の各バージョンのサンプルを確認して、フォーマット差異の学習にも活用できます。
vCard 2.1 / 3.0 / 4.0 のバージョン差異と RFC 仕様
vCard 仕様は 3 世代あり、それぞれ別の RFC で定義されています。vCard 2.1 (IMC 仕様、1996 年) は最古でガラケー時代の SIM 連絡先や古い Outlook で広く使われ、ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8 のような QUOTED-PRINTABLE エンコーディングが標準でした。vCard 3.0 (RFC 2425・RFC 2426、1998 年) はテキストベースのエンコーディングを整理し、line folding (75 文字超の継続行) の仕様を厳密化しました。vCard 4.0 (RFC 6350、2011 年) は現代版で、PHOTO の URI 形式採用、KIND プロパティ (individual / group / org / location の区別)、Property Parameters の整理が行われました。
実装上のバージョン差異で注意が必要なのは、PHOTO の埋め込み方式です。vCard 2.1 と 3.0 は PHOTO;ENCODING=B;TYPE=JPEG:\<base64データ> のように Base64 で画像をインライン埋め込みするのが標準ですが、vCard 4.0 では PHOTO:data:image/jpeg;base64,... の data URI 形式が推奨され、外部 URL (PHOTO:https://example.com/me.jpg) も明示的に許可されました。本ツールが外部 PHOTO URL をフェッチしないのは、この URL アクセスが利用者の意図しないネットワーク送信になるリスクを避けるためです。
line folding・QUOTED-PRINTABLE・iOS 連絡先エクスポートの実装ポイント
RFC 6350 §3.2 が定める line folding は、75 オクテット (バイト) を超える論理行を物理的に複数行に分割する仕組みで、継続行は先頭にスペース 1 文字 (またはタブ) を置きます。例: NOTE:This is a very long note that exceeds seventy-five \r\n octets in length and needs to be folded. のような形です。パーサは継続行先頭のスペースを除去して論理行に再結合する必要があり、本ツールはこの unfolding を最初に行います。
QUOTED-PRINTABLE (RFC 1521 §5.1) はメール由来のエンコーディングで、非 ASCII バイトを =XX (16 進 2 桁) で表現します。vCard 2.1 で日本語名 山田 太郎 (UTF-8 で E5 B1 B1 E7 94 B0 20 E5 A4 AA E9 83 8E) を =E5=B1=B1=E7=94=B0 =E5=A4=AA=E9=83=8E のように表現するため、これを Uint8Array に復元してから TextDecoder('utf-8') でデコードします。長い行は QUOTED-PRINTABLE の soft line break (= で終わる行) でさらに分割される仕様で、これも復元時に結合する必要があります。
iOS 連絡先アプリの .vcf 出力は vCard 3.0 形式が主流ですが、写真は埋め込まずに PHOTO:https://... の URI のみを書き出す場合があります (iCloud の写真キャッシュ依存)。Android の Google Contacts は 4.0 形式で出力されることが多く、グループ情報を CATEGORIES:Family,Work のように複数値で持つ場合があります。これらの差異を本ツールで確認することで、移行元と移行先で何が保持され何が失われるかを事前に把握できます。同じく連絡先 / カレンダーまわりの個人情報を扱う場面では、iCalendar の .ics を確認したいときに ics-parse が、Google Takeout などのアーカイブを開いて中身を見たいときに archive-info が同じくブラウザ内で動きます。
よくある質問
- 入力データはサーバーに送信されますか?
- いいえ。**自前の vCard パーサー** (約 270 行) で line folding / structured value / QUOTED-PRINTABLE / Base64 inline まですべてブラウザ内 JavaScript で処理します。外部 API もありません。
- 対応している vCard バージョンは?
- **vCard 2.1 / 3.0 / 4.0** の主要プロパティを網羅。Google Contacts / iCloud / Apple Contacts / Outlook / Thunderbird / 名刺管理アプリ Eight / Sansan 等がエクスポートする `.vcf` をそのまま読めます。
- `line folding` (継続行) って何ですか?
- vCard 仕様では **1 行が 75 文字を超えると、次の行頭に空白 (スペース or タブ) を付けて継続** します (RFC 6350 §3.2)。本ツールは継続行を **自動で結合** してからパースするので、wrap された Base64 写真や長い NOTE もそのまま扱えます。
- **QUOTED-PRINTABLE** に対応していますか?
- はい。**vCard 2.1 の日本語データ** などで `EMAIL;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:...=E5=B1=B1=E7=94=B0...` のような形式の値を **デコードして UTF-8 で復号** します。古いガラケー連絡先や ガラケーの BLOB バックアップで頻出。
- **写真 (PHOTO)** の表示方法は?
- `PHOTO;ENCODING=B;TYPE=PNG:<base64>` 形式 (v3.0) と `PHOTO:data:image/jpeg;base64,...` 形式 (v4.0) の両方に対応。**Base64 を data URL に復元** して `<img>` で表示します。TYPE 指定がない場合は **PNG / JPEG / GIF** の MIME を自動推定。本ツールはネットワーク経由の `PHOTO:http://...` URL は表示しません (外部送信回避のため)。
- **住所 (ADR)** のフィールド構造は?
- vCard の ADR は **7 フィールドのセミコロン区切り**: `post-box; extended-address; street; locality; region; postal-code; country`。本ツールはこれを **構造化して各欄に分解表示**。日本の住所の場合、`region` = 都道府県、`locality` = 市区町村、`street` = 番地以降、`postal-code` = 郵便番号、`country` = JP、を入れるのが慣習。
- **TYPE** パラメータ (HOME / WORK / CELL / FAX) はどう表示されますか?
- 電話・メール・住所の TYPE は **各カードのチップ表示** で確認可能。`TYPE=CELL,VOICE` のように複数指定がある場合も全て表示。**PREF** (preferred) フラグもチップで示します。v2.1 の `TEL;HOME;VOICE:...` (TYPE= なしの bare type) も自動認識。
- **ORG** (組織) の階層は?
- vCard の ORG は **セミコロン区切りで部署階層** を表現: `組織名;部署;サブチーム`。本ツールは **/** 区切りで連結表示 (例: `株式会社サンプル / 広報部`)。
- **X-** で始まる拡張フィールドは?
- X-SKYPE, X-AIM, X-SOCIALPROFILE, X-PHONETIC-FIRST-NAME (フリガナ) など、vCard 標準外の **ベンダー拡張** はすべて **「その他のフィールド」** セクションに raw 表示します。iPhone / Android が独自に追加するフィールドの確認用に。
- **チェーン (複数連絡先)** は解析できますか?
- はい。**`.vcf` エクスポートには通常 1 ファイルに複数の `BEGIN:VCARD` ブロック** が含まれており、それぞれ別カードとして表示します。Google Contacts や iCloud の全件エクスポートも一気に確認可能。
- pem-parse / epub-info / archive-info との関係は?
- **読み取り専用 metadata viewer シリーズ**: pem-parse (X.509 cert) / epub-info (EPUB) / archive-info (ZIP) / midi-info (MIDI) / pdf-pages-info (PDF) と同じ「ファイル / テキストを貼って中身を見るだけ、編集なし」パターンです。
「送らない」を確かめるには
このツールは入力データを外部に送信しません。仕組み・監査手順・運営方針は以下で詳しく説明しています。
類似のツール
ICS (.ics) パーサー — iCalendar の予定・タスク・繰り返しルールを表示
**`.ics` ファイル** (iCalendar / RFC 5545) を貼り付けるか選択すると、**予定 (VEVENT)** / **タスク (VTODO)** / **タイムゾーン (VTIMEZONE)** / **通知 (VALARM)** を一覧表示します。**SUMMARY** (件名)、**DTSTART / DTEND** (開始 / 終了、`YYYYMMDDTHHMMSS[Z]` → `YYYY-MM-DDTHH:MM:SS` に整形)、**DURATION** (期間)、**LOCATION** (場所)、**DESCRIPTION** (本文)、**RRULE** (繰り返しルール: FREQ / INTERVAL / COUNT / UNTIL / BYDAY)、**EXDATE / RDATE** (例外日 / 追加日)、**ORGANIZER** (主催者)、**ATTENDEE** (出席者: CN / ROLE / PARTSTAT / RSVP)、**CATEGORIES** (タグ)、**STATUS** (CONFIRMED / TENTATIVE / CANCELLED)、**TRANSP** / **CLASS** / **PRIORITY** / **URL** / **GEO** / **ATTACH** / **CALSCALE** / **METHOD** / **PRODID** をフィールド単位で表示。**Line folding** (75 文字超の継続行)、**TZID** 抽出、**全日予定 (VALUE=DATE)** と UTC (`Z`) フラグ判定もサポート。**完全にブラウザ内** で解析、予定データはサーバーに送信されません。Google Calendar / iCloud Calendar / Outlook / Notion カレンダー / Zoom / TimeTree の `.ics` エクスポートをそのまま読めます。
EPUB メタデータビューア
EPUB ファイル (.epub) をドロップして、表紙画像と書誌情報を表示します。dc:title / dc:creator (役割付き)・dc:language / dc:publisher / dc:identifier (ISBN 等)・dc:date / dc:modified / dc:description / dc:subject (タグ)・dc:rights を OPF パッケージから抽出し、spine の読み順、manifest のファイル一覧 (id・href・media-type・properties)、EPUB バージョン (2.0 / 3.0 / 3.1)、container.xml の rootfile 情報を表示。EPUB は ZIP コンテナなので fflate でブラウザ内のみ展開し、サーバーには一切送信されません。
ZIP アーカイブ内容ビューア
ZIP ファイルをドロップして、解凍せずに中身を一覧表示します。総ファイル数・全体サイズ・圧縮率・アーカイブコメントに加え、各エントリのパス・圧縮前後のサイズ・圧縮方式 (Stored/Deflate/Deflate64/BZIP2/LZMA/Zstandard)・最終更新日時・CRC32・暗号化フラグ・ディレクトリ判定を表示。Central Directory だけを読む自前パーサで動作するため、ファイルの中身データは展開せず、サーバーにも送信されません。
X.509 PEM 証明書パーサー — SSL/TLS 証明書を解析・有効期限チェック
**`-----BEGIN CERTIFICATE-----`** で囲まれた **X.509 PEM 証明書** を貼り付けると、**Subject** (CN / O / OU / C / ST / L / EMAIL)、**Issuer** (発行者)、**有効期限** (Not Before / Not After / 残り日数 + 失効バッジ)、**シリアル番号**、**署名アルゴリズム** (RSA-SHA256 / ECDSA-SHA384 等)、**公開鍵タイプ** (RSA 2048 / EC P-256 等)、**SHA-1 / SHA-256 フィンガープリント**、**SAN** (DNS / IP / Email / URI)、**Key Usage** / **Extended Key Usage**、**Basic Constraints** (CA フラグ / Path Length)、**SKI / AKI** を解析します。**チェーン (複数 cert)** も連結貼付で一覧表示。SSL/TLS 証明書のトラブルシューティング、有効期限監視、SAN の DNS 一致確認、Let's Encrypt 自動化のデバッグに。**完全にブラウザ内** で処理 (@peculiar/x509 + Web Crypto API)、証明書はサーバーに送信されません。