Appearance
〇〇の日専用テーブル 本番環境でのテーブル作成手順
注記: テーブルは
AdminDatabaseInstaller(Issue #1485)が管理画面アクセス時に自動作成します。通常運用では本手順の CREATE TABLE SQL を実行する必要はありません。ただし、.maintenance停止中はwp-adminも 503 になり Installer が実行されないため、停止中に DB 変更を完了する場合は本手順の SQL を手動実行してください。Installer が失敗した場合の緊急リカバリ用としても保存しています。
Issue #1070 / #1071 / #1072 に対応した、本番環境に db_what_day_master と db_daily_article_what_day を追加する手順です。
スキーマの詳細は 〇〇の日専用テーブル設計(スキーマ)— 準備中(本ドキュメント内や関連設計資料を参照してください)。
対象テーブル
- db_what_day_master — 〇〇の日マスタ(名称・表示可否など)
- db_daily_article_what_day — 日別記事×〇〇の日 の紐付け(中間テーブル)
本番で実施する作業
本手順ではテーブル作成のみ行います。 既存 post meta(daily_article_events)からの移行は行わない方針です。専用テーブルは空で開始します。db_what_day_master への〇〇の日マスタの追加は、後続フェーズで実装される「〇〇の日マスタ管理画面」から行い、db_daily_article_what_day への日別記事との紐付け登録は、日別記事編集画面(〇〇の日紐付け用の管理画面)から行う想定です。初期データの投入およびこれら管理画面での運用手順は、以降の機能追加時に必要に応じて別手順を追加します。
実行順序
- マスタテーブル
db_what_day_masterを作成する - 中間テーブル
db_daily_article_what_dayを作成する
1. db_what_day_master の作成
本番の MySQL(phpMyAdmin や SSH 経由など)に接続し、本番の DB 接頭辞(多くの場合は wp_)に合わせて SQL を実行します。
- 接頭辞が
wp_でない場合は、以下の SQL 内のwp_を本番の接頭辞に置換してから実行してください。 - または
WhatDayMasterInstaller.phpのdbDelta用 CREATE 定義を接頭辞に合わせて実行してください。
sql
CREATE TABLE `wp_db_what_day_master` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '〇〇の日の名称(例: お風呂の日、七夕)',
`is_show` tinyint(1) NOT NULL DEFAULT 1 COMMENT '投稿選択肢に表示するか',
`mmdd` smallint(5) unsigned DEFAULT NULL COMMENT '月日(例: 10月26日→1026)',
`yyyymmdd` int(10) unsigned DEFAULT NULL COMMENT '年月日(例: 20251026)',
`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_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='〇〇の日マスタ(何の日雑学・日別記事用)';2. db_daily_article_what_day の作成
上記と同様に、本番の接頭辞で以下を実行します。DDL の正本は DailyArticleWhatDayInstaller.php も参照してください。
sql
CREATE TABLE `wp_db_daily_article_what_day` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`post_id` bigint(20) unsigned NOT NULL COMMENT '日別記事(daily_article)の投稿ID',
`what_day_master_id` bigint(20) unsigned NOT NULL COMMENT '〇〇の日マスタID',
`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_post_master` (`post_id`, `what_day_master_id`),
KEY `idx_what_day_master_id` (`what_day_master_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='日別記事×〇〇の日 紐付け';既存テーブルに mmdd / yyyymmdd を追加する場合(Issue #1097)
本番で既に db_what_day_master が存在する環境に、mmdd・yyyymmdd カラムを追加する場合は以下の ALTER を実行します。接頭辞が wp_ でない場合は、テーブル名を本番の接頭辞に置換してから実行してください。
sql
ALTER TABLE `wp_db_what_day_master`
ADD COLUMN `mmdd` smallint(5) unsigned DEFAULT NULL COMMENT '月日(例: 10月26日→1026)' AFTER `is_show`,
ADD COLUMN `yyyymmdd` int(10) unsigned DEFAULT NULL COMMENT '年月日(例: 20251026)' AFTER `mmdd`;注意事項
- テーブル作成前に、本 PR マージ済みのコードが本番にデプロイされていることを確認してください(
DatabaseTableConstantsにWHAT_DAY_MASTER/DAILY_ARTICLE_WHAT_DAYが含まれている必要があります)。 - 初期データの投入:
db_what_day_masterに記念日名称を投入する場合は、〇〇の日マスタ導入手順(雑学ネタ帳からのシードスクリプト)を参照してください。初回移行時は空のテーブルで開始しても問題ありません。
ロールバック方針
テーブル作成を取りやめる場合や、作成に失敗した状態を解消する場合は、中間テーブル → マスタテーブルの順で DROP してください。現時点のスキーマ定義では外部キー制約を張っていないため逆順でも DROP 自体は可能ですが、将来的に外部キーを追加した場合にも安全な手順となるよう、中間テーブルから先に削除する運用とします。
- 作成時と同様に、本番の DB 接頭辞(例:
wp_)を付けた実テーブル名を対象に DROP を実行してください。 - 接頭辞が
wp_でない場合は、以下のテーブル名中のwp_を本番の接頭辞に読み替えてください。
wp_db_daily_article_what_dayを DROP する(例:DROP TABLE IF EXISTS wp_db_daily_article_what_day;)wp_db_what_day_masterを DROP する(例:DROP TABLE IF EXISTS wp_db_what_day_master;)
本番で既に運用を開始している場合(運用開始後に当該テーブルにデータが投入・登録されている場合)は、DROP 前に必ずデータ退避(エクスポート)やバックアップ取得を検討のうえ実行してください。〇〇の日機能をまだ本番運用しておらず当該テーブルが空の状態に限り、DROP によるデータ損失は発生しません。
関連
- 本番移行手順(参考・目次)
- 〇〇の日専用テーブル設計(スキーマ) — 準備中(本ドキュメント内や関連設計資料を参照してください)
- 〇〇の日マスタ導入手順 — 初期データ投入(雑学ネタ帳シード)
- 〇〇の日マスタ運用ガイド — 日常運用(管理画面・一覧・追加・編集・削除)