WordPressでワードやエクセルのメタデータを消す

WordPressでワードやエクセルのメタデータを消す

Wordやエクセルはメタデータの宝庫だったりします。作者情報や制作日を平気で掲載します。とはいえMicrosoftの仕様なので仕方がないのですが、私にとってはどうも許せない仕様になります。ので消しましょう慈悲はない(無慈悲)

実はZIP形式のWordやエクセル

拡張子上はdocxなどと名乗っていますが、内部のファイルは実はZipを圧縮したものです。その中の「core.xml, app.xml」に詳細情報が書かれています。例えば「テストファイル.docx」を作ってみます。

そしてこのファイルを「テストファイル.docx.zip」に変えて解凍します。すると、docPropsというフォルダが出てきます。この中に「app.xml」と「core.xml」というファイルが出てきます。実はこの2つが個人情報の正体です。たとえばこの core.xml をテキストエディタで開いてみると、こんな記述が目に入るかもしれません。

<dc:creator>tanaka</dc:creator><br><cp:lastModifiedBy>tanaka</cp:lastModifiedBy><br><dcterms:created xsi:type="dcterms:W3CDTF">2025-10-20T14:52:00Z</dcterms:created><br><dcterms:modified xsi:type="dcterms:W3CDTF">2025-10-20T15:03:00Z</dcterms:modified>

はい、どう考えても不要な情報です。消します。無慈悲に消します。

もうプラグインで消してしまえ!(暴論)

はい、人間の手でこんなの一々消してるヒマありません。プラグインで葬りましょう。作りました。metadata-purgerです

<?php
/**
 * Plugin Name: Metadata Purger for PDF & Office
 * Plugin URI:  https://p-fox.jp/
 * Description: アップロード時にPDF, Word, Excel, PowerPointのメタデータ(作成者・会社名など)を自動削除します。REST APIアップロードも含め、ユーザー操作なしで実行されます。
 * Version:     1.0.0
 * Author:      Red Fox (team Red Fox)
 * License:     GPLv2 or later
 * Requires PHP: 7.4
 * Requires at least: 6.0
 * Text Domain: metadata-purger
 */

if ( ! defined( 'ABSPATH' ) ) exit;

/**
 * =========================================================
 * メイン処理:メタデータ除去
 * =========================================================
 */
function mp_purge_metadata( string $file_path ): void {
	$mime = mime_content_type( $file_path );
	$ext  = strtolower( pathinfo( $file_path, PATHINFO_EXTENSION ) );

	$supported = [
		'application/pdf',
		'application/msword',
		'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
		'application/vnd.ms-excel',
		'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
		'application/vnd.ms-powerpoint',
		'application/vnd.openxmlformats-officedocument.presentationml.presentation',
	];

	// 対象外MIMEは除外
	if ( ! in_array( $mime, $supported, true ) ) return;

	// ExifTool確認
	$exiftool = trim( shell_exec( 'which exiftool' ) );

	if ( $exiftool ) {
		@exec( escapeshellcmd( $exiftool ) . ' -all= ' . escapeshellarg( $file_path ) );
		@unlink( $file_path . "_original" );
		return;
	}

	// Office形式 → ZipArchiveで削除
	if ( in_array( $ext, [ 'docx', 'xlsx', 'pptx' ], true ) ) {
		$zip = new ZipArchive();
		if ( $zip->open( $file_path ) === TRUE ) {
			$zip->deleteName( 'docProps/core.xml' );
			$zip->deleteName( 'docProps/app.xml' );
			$zip->close();
			return;
		}
	}

	// PDFでExifTool非対応 → ログ出力
	error_log( "[Metadata Purger] Metadata removal skipped for: {$file_path}" );
}

/**
 * =========================================================
 * アップロード完了後フック(通常アップロード)
 * =========================================================
 */
add_filter( 'wp_handle_upload', function( array $file ): array {
	mp_purge_metadata( $file['file'] );
	return $file;
}, 20 );

/**
 * =========================================================
 * REST API 経由のアップロード処理にも対応
 * =========================================================
 */
add_filter( 'rest_pre_insert_attachment', function( $prepared_post, $request ) {
	if ( isset( $_FILES['file']['tmp_name'] ) ) {
		mp_purge_metadata( $_FILES['file']['tmp_name'] );
	}
	return $prepared_post;
}, 10, 2 );

/**
 * =========================================================
 * 管理画面通知(ExifTool検出状況)
 * =========================================================
 */
add_action( 'admin_notices', function() {
	if ( ! current_user_can( 'manage_options' ) ) return;
	$exiftool = trim( shell_exec( 'which exiftool' ) );

	echo '<div class="notice notice-info"><p>';
	if ( $exiftool ) {
		echo 'Metadata Purger: ExifTool が検出されました。メタデータ削除が有効です。';
	} else {
		echo 'Metadata Purger: ExifTool が見つかりません。Office形式(docx/xlsx/pptx)のみZipArchiveで処理します。';
	}
	echo '</p></div>';
});

/**
 * =========================================================
 * 管理メニュー(将来拡張:対象拡張子設定など)
 * =========================================================
 */
add_action( 'admin_menu', function() {
	add_options_page(
		'Metadata Purger 設定',
		'Metadata Purger',
		'manage_options',
		'metadata-purger',
		'mp_settings_page'
	);
});

function mp_settings_page() {
	echo '<div class="wrap"><h1>Metadata Purger 設定</h1>';
	echo '<p>このプラグインはアップロード時に PDF・Word・Excel・PowerPoint のメタデータを自動的に削除します。</p>';
	echo '<ul><li>ExifTool が利用可能な場合:PDF含む全形式を対象。</li>';
	echo '<li>ExifTool が利用不可の場合:Office形式のみZipArchiveで処理。</li></ul>';
	$exiftool = trim( shell_exec( 'which exiftool' ) );
	echo '<p><strong>ExifTool 状況:</strong> ' . ( $exiftool ? '検出済み(有効)' : '未検出(限定モード)' ) . '</p>';
	echo '</div>';
}

一応、exiftoolが入っていればPDFデータも強制編集できるのですがさすがに無理です。諦めました。というわけで実験です。

このように見事に制作者情報が入っているWordファイルを、あえてWordPressにアップロードしてみましょう。ダウンロードはこちらから。

なんということでしょうか。作者情報も何もかも消えてしまいました。これはいったいどういうことでしょう。

メタデータは無慈悲に消せ

WordPressの世界では、見た目も中身も整えて初めて「信頼できる配布」が成り立ちます。プラグインの出番です。いや、この時代の必須装備です。「このファイル、誰が作ったの?」と聞かれたら?→「それは……幻想です。」「なんで会社名が載ってないの?」と聞かれたら?→「幻想です。」メタデータは、黙っていてもいい。語るのは、コンテンツそのものであれ。以上、Red Foxより無慈悲な静寂をお届けしました。

コメントを投稿する

メールアドレスは公開されませんのでご安心ください。 * が付いている欄は必須項目となります。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。

ページの先頭