Skip to content

P-WORLDメールアーカイブ 本番環境でのテーブル作成手順

Issue #1416 / PR #1428 に対応した、本番環境に pworld_mail_archive(接頭辞付きで wp_pworld_mail_archive)を追加する手順です。P-WORLD配信メールを IMAP で取得し、HTML 内画像をローカル保存・最適化したうえで当該テーブルに保存します。管理画面(WordPress 管理画面のトップレベルメニュー「P-WORLDメールアーカイブ」)から「今すぐ取得・保存する」で取り込みます。

対象テーブル

  • pworld_mail_archive — P-WORLD配信メールアーカイブ(件名・送信者・受信日時・処理済みHTML・作成日時)。接頭辞付きの実テーブル名は wp_pworld_mail_archive 等。

本番で実施する作業

本手順ではテーブル作成と IMAP 用定数の設定のみ行います。 初期データの一括投入は不要で、空のテーブルで開始し、管理画面「P-WORLDメールアーカイブ」から「今すぐ取得・保存する」でメールを取り込みます。

実行順序

  1. コードをデプロイする(本番環境デプロイ に従う)
  2. 本番の wp-config.php に IMAP 用定数を定義する
  3. テーブル wp_pworld_mail_archive を作成する
  4. PHP-DI キャッシュを削除する

1. デプロイ

PR #1428 マージ済みのコードを本番に反映します。本番環境デプロイ に従い、ビルド・アップロード・VERSION 切り替えを実施してください。

2. IMAP 用定数の設定(本番の wp-config.php)

管理画面の「今すぐ取得・保存する」で IMAP からメールを取得するには、本番サーバー上で次の定数が定義されている必要があります。これらが未定義または空の場合でもエラーにはならず、取得件数 0 件(fetched=0)として処理されます(必要に応じて error_log の診断ログを確認してください)。

  • PWORLD_IMAP_HOST — IMAP サーバー(例: Gmail の場合は imap.gmail.com
  • PWORLD_IMAP_USER — メールアカウント(メールアドレス)
  • PWORLD_IMAP_PASSWORD — アプリパスワード等(Gmail の場合はアプリ用パスワードを推奨)

本番の WordPress ドキュメントルート にある wp-config.php(または ConoHa WING 等の環境で設定を読み込む場所)に、/* That's all, stop editing! */ の直前に以下を追加してください。環境に応じて設定ファイルの場所を読み替えてください。

php
// P-WORLDメールアーカイブ用 IMAP 接続(PR #1428 / Issue #1416)
define( 'PWORLD_IMAP_HOST', 'imap.gmail.com' );      // 実際のホストに置き換える
define( 'PWORLD_IMAP_USER', 'your-email@example.com' ); // 実際のメールアドレスに置き換える
define( 'PWORLD_IMAP_PASSWORD', 'your-app-password' );  // 実際のパスワードに置き換える
  • 本番では平文のパスワードを wp-config.php に書くため、ファイルのパーミッションとサーバーアクセス制御に注意してください。
  • Gmail 利用時は「2段階認証」を有効にしたうえで「アプリ パスワード」を発行し、PWORLD_IMAP_PASSWORD に設定することを推奨します。

3. wp_pworld_mail_archive の作成

本番の MySQL(phpMyAdmin や SSH 経由など)に接続し、本番の DB 接頭辞(多くの場合は wp_)に合わせて SQL を実行します。

  • 接頭辞が wp_ でない場合は、以下の SQL 内の wp_ を本番の接頭辞に置換してから実行してください。
  • または PworldMailArchiveInstaller.phpdbDelta 用 CREATE 定義を接頭辞に合わせて実行してください。
sql
CREATE TABLE `wp_pworld_mail_archive` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `subject` varchar(500) NOT NULL COMMENT 'メール件名',
  `sender` varchar(255) NOT NULL COMMENT '送信者アドレス',
  `received_date` datetime NOT NULL COMMENT '受信日時',
  `processed_html` longtext NOT NULL COMMENT '画像差し替え・最適化済みHTML',
  `created_at` datetime NOT NULL COMMENT '登録日時',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_subject_date` (`subject`(191), `received_date`),
  KEY `idx_received_date` (`received_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='P-WORLD配信メールアーカイブ';

4. PHP-DI キャッシュの削除

PR #1428 で core_src/config/di.php を変更しているため、コードを本番にデプロイした後は、PHP-DI のコンパイル済みキャッシュを削除する必要があります。

  • 削除するファイル: wp-content/cache/php-di/CompiledContainer.php(本番サーバー上の WordPress ルートからの相対パス)
  • 削除後、次回リクエストで自動的に再生成されます。テーブル作成の前後どちらでも、デプロイ直後に 1 回行えば十分です。

手順の詳細は 本番環境デプロイ の「VERSION 切り替えとキャッシュ削除」を参照してください。./bin/activate.sh <version> 実行時にキャッシュ削除も行う場合は、その完了をもってこのステップ完了とみなして構いません。

注意事項

  • テーブル作成前に、PR #1428 マージ済みのコードが本番にデプロイされていることを確認してください(DatabaseTableConstants::PWORLD_MAIL_ARCHIVE が存在する必要があります)。
  • 管理画面を manage_options で開くと AdminDatabaseInstaller::ensure_all() により pworld_mail_archive も他の管理画面経由 ensure 対象テーブルと同時に自動作成されます。手動 SQL は Installer が失敗した場合の緊急リカバリ用です。
  • IMAP 定数を設定しないままテーブルだけ作成した状態でも、公開側のメール表示(MailImage 内の P-WORLD フレーム)は動作します。表示データは空になり、管理画面の「今すぐ取得・保存する」は IMAP 接続失敗となります。
  • 本番サーバーで PHP の imap 拡張(imap_open)が有効になっていることを確認してください。無効の場合、「今すぐ取得・保存する」は常に0件となります(実装が function_exists('imap_open') をチェックして空配列を返すため)。ConoHa WING 等では PHP 拡張の有効化設定が必要な場合があります。取得結果が0件のままの場合は P-WORLD IMAP 取得0件トラブルシュート を参照してください。

ロールバック方針

テーブル作成を取りやめる場合や、作成に失敗した状態を解消する場合は、該当テーブルを DROP してください。

  • 作成時と同様に、本番の DB 接頭辞(例: wp_)を付けた実テーブル名を対象に DROP を実行してください。

  • 接頭辞が wp_ でない場合は、以下のテーブル名中の wp_ を本番の接頭辞に読み替えてください。

  • wp_pworld_mail_archive を DROP する(例: DROP TABLE IF EXISTS wp_pworld_mail_archive;

本番で既に運用を開始している場合(管理画面からメールを取り込み、当該テーブルにデータが入っている場合)は、DROP 前に必ずデータ退避(エクスポート)やバックアップ取得を検討のうえ実行してください。空のテーブルに限り、DROP によるデータ損失は発生しません。

関連