Skip to content

機種表示マッピングテーブル 本番環境でのテーブル作成手順

機種(kishu)のデータ文字列→表示用文字列マッピングを保持する専用テーブル db_kishu_display_mapping の、本番環境でのテーブル作成手順です。マッピングは保存時のみ使用(CSV インポート・一括更新)し、表示時の変換は行いません。

対象テーブル

  • db_kishu_display_mapping — 機種表示マッピング(data_kishu → display_kishu)。保存時にのみ参照。ヒートマップ表示用略称(heatmap_abbreviation)は任意で設定可能(Issue #1217)。

本番で実施する作業

テーブル作成後、初期データを投入します。初期データは既存の日別データ(db2023)の機種名をそのまま登録するため、差異が生じた時点で差分エントリを追加・編集する運用です。

実行順序

  1. テーブル db_kishu_display_mapping を作成する
  2. 初期データを投入する(db2023 内の既存機種名を全件登録)
  3. (任意)管理画面から「登録データに反映する」を実行する(PR #1216)。事前にドライランでの確認を推奨。

PR #1216 を含むコードを本番にデプロイした場合は、テーブル作成の前後いずれかで PHP-DI キャッシュ削除(後述)を 1 回行ってください。

0. デプロイ後の PHP-DI キャッシュ削除(PR #1216)

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

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

1. db_kishu_display_mapping の作成

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

  • 接頭辞が wp_ でない場合は、以下の SQL 内の wp_ を本番の接頭辞に置換してから実行してください。
  • または KishuDisplayMappingInstaller.phpdbDelta 用 CREATE 定義を接頭辞に合わせて実行してください。
sql
CREATE TABLE `wp_db_kishu_display_mapping` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `data_kishu` varchar(255) NOT NULL COMMENT 'データ文字列(みんレポ等の表記)',
  `display_kishu` varchar(255) NOT NULL COMMENT '表示用文字列(保存時に変換してDBに格納する値)',
  `heatmap_abbreviation` varchar(255) DEFAULT NULL COMMENT 'ヒートマップ表示用略称(Issue #1217)',
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '登録日時',
  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新日時',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_data_kishu` (`data_kishu`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='機種表示マッピング(保存時のみ使用)';

2. 初期データの投入(Issue #1211)

テーブル作成後、既存の日別データ(db2023)に存在する機種名(DISTINCT)を初期データとして投入します。 display_kishudata_kishu同一文字列で登録します(初期状態では「データ文字列=表示用文字列」)。

同じく本番の MySQL に接続し、以下の SQL を実行してください。

  • 接頭辞が wp_ でない場合は、wp_db_kishu_display_mapping および wp_db2023wp_ を本番の接頭辞に置換してから実行してください。
  • INSERT IGNORE を使用しているため、再実行しても重複エラーは発生しません(冪等)。
sql
-- 初期データ投入: db2023 の DISTINCT kishu をマッピングテーブルに投入する(Issue #1211)
-- display_kishu は data_kishu と同一文字列で初期化。既存行は IGNORE で重複スキップ(冪等)。
-- created_at は db2023 における各機種の最古の DAY(最初に出現した日)を設定する。
INSERT IGNORE INTO `wp_db_kishu_display_mapping` (data_kishu, display_kishu, created_at)
SELECT
    kishu,
    kishu,
    STR_TO_DATE(MIN(DAY), '%Y/%c/%e')
FROM `wp_db2023`
WHERE kishu IS NOT NULL AND kishu <> ''
GROUP BY kishu
ORDER BY kishu;

期待結果: db_kishu_display_mappingdata_kishu = display_kishu で全機種が登録され、created_at には各機種が db2023 に初めて登場した日付が設定される。

3. 登録データに反映する(任意・PR #1216 / Issue #1214)

テーブル作成と初期データ投入の後、マッピングに基づき日別データ(wp_db2023)の kishu を一括更新する場合は、管理画面(設定 → 機種表示マッピング)で「登録データに反映する」を実行します。

  • 推奨手順: まず「ドライラン(更新せず件数のみ表示)」にチェックを入れて実行し、更新対象件数を確認してから、チェックを外して本実行する。
  • マッピングが空の場合は更新対象なしとなり、実行してもデータは変更されません。

注意事項

  • テーブル作成前に、当該機能マージ済みのコードが本番にデプロイされていることを確認してください(DatabaseTableConstants::KISHU_DISPLAY_MAPPING が含まれている必要があります)。
  • テーブルが未作成の場合は Repository は空配列を返すため、マッピングは適用されません(既存挙動と同等)。

ロールバック方針

テーブル作成を取りやめる場合は、該当テーブルを DROP してください。接頭辞が wp_ でない場合はテーブル名の wp_ を本番の接頭辞に読み替えてください。

  • 例: DROP TABLE IF EXISTS wp_db_kishu_display_mapping;

既にマッピングデータを投入している場合は、DROP 前にデータの退避・バックアップを検討してください。