データ匿名化比較:ARX vs Presidio vs Faker でPII/個人情報を保護する
オープンソースラボ編集部 ・ 2026年6月14日
データ匿名化比較:ARX vs Presidio vs Faker でPII/個人情報を保護する
🔒 GDPRやPIPAに対応するためのデータ匿名化・仮名化ツール。ARX・Microsoft Presidio・Fakerの特徴と使い分けを解説します。
データ匿名化の必要性
個人を特定できる情報(PII: Personally Identifiable Information)を含むデータを開発・テスト・分析に使う場合、プライバシー保護のための匿名化・仮名化が必要です。
匿名化の主要アプローチ
| アプローチ | 内容 | ツール例 |
|---|---|---|
| k-匿名性 | 特定可能な組み合わせをぼかす | ARX |
| PII検出・マスキング | 個人情報を検出して置換 | Presidio |
| データ合成・偽データ生成 | テスト用の偽データを生成 | Faker |
主要ツール比較表
| 項目 | ARX | Presidio | Faker |
|---|---|---|---|
| ライセンス | Apache 2.0 | MIT | MIT |
| 用途 | 統計的匿名化 | PII検出・マスキング | テストデータ生成 |
| 言語 | Java(GUI/API) | Python | Python/多言語 |
| 日本語対応 | △ | ○(カスタマイズ必要) | ◎ |
| 出力 | 匿名化済みデータ | マスク/置換済みデータ | 偽データ |
| リアルタイム処理 | × | ◎ | ◎ |
| GDPRレポート | ◎ | × | × |
各ツールの特徴
ARX Data Anonymization Tool
数学的プライバシー保護(k-匿名性・l-多様性・t-近接性等)を実装したJavaツール。リサーチ・コンプライアンス向けの本格的な匿名化が可能です。
主な特徴:
- k-匿名性・l-多様性・t-近接性・δ-presence等の実装
- GUI(デスクトップアプリ)とJava APIの両方を提供
- データユーティリティとプライバシーのトレードオフを可視化
- GDPRコンプライアンスレポートの出力
// ARX Java API での匿名化例
import org.deidentifier.arx.*;
import org.deidentifier.arx.criteria.*;
// データ読み込み
Data data = Data.create("patients.csv", StandardCharsets.UTF_8, ';');
// 準識別子の設定
data.getDefinition().setAttributeType("age", AttributeType.QUASI_IDENTIFYING_ATTRIBUTE);
data.getDefinition().setAttributeType("zipcode", AttributeType.QUASI_IDENTIFYING_ATTRIBUTE);
data.getDefinition().setAttributeType("disease", AttributeType.SENSITIVE_ATTRIBUTE);
// ヒエラルキーの設定(年齢のグルーピング)
data.getDefinition().setHierarchy("age", Hierarchy.create("age_hierarchy.csv", ...));
// k-匿名性(k=5)の設定
ARXConfiguration config = ARXConfiguration.create();
config.addPrivacyModel(new KAnonymity(5));
config.setSuppressionLimit(0.02d);
// 匿名化実行
ARXAnonymizer anonymizer = new ARXAnonymizer();
ARXResult result = anonymizer.anonymize(data, config);
向いているケース: 医療・統計データの本格的匿名化・コンプライアンス
Microsoft Presidio
PIIの自動検出と匿名化・仮名化を行うPythonフレームワーク。spaCy NLPを使ってテキスト中の個人情報を検出します。
主な特徴:
- 名前・電話番号・メールアドレス・クレジットカード番号等を自動検出
- テキストとストラクチャードデータの両方に対応
- カスタムエンティティの追加が可能
- 本番APIとして使えるDockerイメージを提供
from presidio_analyzer import AnalyzerEngine
from presidio_anonymizer import AnonymizerEngine
from presidio_anonymizer.entities import RecognizerResult, OperatorConfig
# 初期化
analyzer = AnalyzerEngine()
anonymizer = AnonymizerEngine()
# テキスト中のPIIを検出
text = "私の名前は田中太郎で、メールはtanaka@example.com、電話は090-1234-5678です。"
results = analyzer.analyze(text=text, language='en')
# マスキング
anonymized = anonymizer.anonymize(
text=text,
analyzer_results=results,
operators={
"PERSON": OperatorConfig("replace", {"new_value": "[氏名]"}),
"EMAIL_ADDRESS": OperatorConfig("mask", {"masking_char": "*", "chars_to_mask": 10}),
"PHONE_NUMBER": OperatorConfig("replace", {"new_value": "[電話番号]"}),
}
)
print(anonymized.text)
# → "私の名前は[氏名]で、メールは**********、電話は[電話番号]です。"
向いているケース: ログ・チャット・ドキュメントのPII自動除去
Faker
テスト用の現実感あるダミーデータを生成するライブラリ。実際の匿名化ではなく、テスト環境の構築に使います。
主な特徴:
- 名前・住所・会社・Email・電話・クレジットカード等
- 日本語対応(
ja_JPロケール) - 20以上の言語ロケール対応
- シードで再現可能なデータ生成
from faker import Faker
fake = Faker('ja_JP')
# テストデータ生成
for _ in range(5):
print({
"name": fake.name(),
"email": fake.email(),
"phone": fake.phone_number(),
"address": fake.address(),
"company": fake.company(),
"credit_card": fake.credit_card_number(),
})
# シードで再現可能
Faker.seed(42)
fake = Faker('ja_JP')
print(fake.name()) # 常に同じ名前
# SQLAlchemyと組み合わせてDBをシード
from faker import Faker
from myapp.models import User, db
fake = Faker('ja_JP')
def seed_database(count=1000):
users = [
User(
name=fake.name(),
email=fake.unique.email(),
address=fake.address(),
)
for _ in range(count)
]
db.bulk_save_objects(users)
db.commit()
向いているケース: 開発・テスト環境のデータシード
選択ガイド
| 状況 | 推奨 |
|---|---|
| 医療・統計データの本格匿名化 | ARX |
| 既存データのPII検出・マスキング | Presidio |
| テスト用偽データ生成 | Faker |
内部リンク
外部リソース
FAQ
Q. 匿名化と仮名化の違いは何ですか?
匿名化は元のデータに戻すことが不可能な状態です。仮名化は元データとの対応表を持っており、必要に応じて復元できます。GDPRでは両者の要件が異なります。
Q. PresidioはデフォルトでNLPに英語しか対応していませんか?
デフォルトは英語ですが、カスタムエンティティとspaCyの日本語モデルを組み合わせることで日本語対応が可能です。
Q. 本番DBのデータをFakerで置き換えてステージングに使えますか?
はい、よくある使い方です。本番DBをダンプ→PIIをFakerデータで置換→ステージングDBにリストア、というパイプラインを構築できます。
Q. ARXはクラウドやAPIとして使えますか?
Java APIとして使えますが、クラウドマネージドサービスはありません。コンテナ化してREST APIを追加するカスタム実装が必要です。