Appearance
機種表示マッピングテーブル 本番環境でのテーブル作成手順
機種(kishu)のデータ文字列→表示用文字列マッピングを保持する専用テーブル db_kishu_display_mapping の、本番環境でのテーブル作成手順です。マッピングは保存時のみ使用(CSV インポート・一括更新)し、表示時の変換は行いません。
対象テーブル
- db_kishu_display_mapping — 機種表示マッピング(data_kishu → display_kishu)。保存時にのみ参照。ヒートマップ表示用略称(heatmap_abbreviation)は任意で設定可能(Issue #1217)。
本番で実施する作業
テーブル作成後、初期データを投入します。初期データは既存の日別データ(db2023)の機種名をそのまま登録するため、差異が生じた時点で差分エントリを追加・編集する運用です。
実行順序
- テーブル
db_kishu_display_mappingを作成する - 初期データを投入する(
db2023内の既存機種名を全件登録) - (任意)管理画面から「登録データに反映する」を実行する(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.phpのdbDelta用 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_kishu は data_kishu と同一文字列で登録します(初期状態では「データ文字列=表示用文字列」)。
同じく本番の MySQL に接続し、以下の SQL を実行してください。
- 接頭辞が
wp_でない場合は、wp_db_kishu_display_mappingおよびwp_db2023のwp_を本番の接頭辞に置換してから実行してください。 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_mapping に data_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 前にデータの退避・バックアップを検討してください。