Skip to content

〇〇の日専用テーブル 本番環境でのテーブル作成手順

注記: テーブルは AdminDatabaseInstaller(Issue #1485)が管理画面アクセス時に自動作成します。通常運用では本手順の CREATE TABLE SQL を実行する必要はありません。ただし、.maintenance 停止中は wp-admin も 503 になり Installer が実行されないため、停止中に DB 変更を完了する場合は本手順の SQL を手動実行してください。Installer が失敗した場合の緊急リカバリ用としても保存しています。

Issue #1070 / #1071 / #1072 に対応した、本番環境に db_what_day_masterdb_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 への日別記事との紐付け登録は、日別記事編集画面(〇〇の日紐付け用の管理画面)から行う想定です。初期データの投入およびこれら管理画面での運用手順は、以降の機能追加時に必要に応じて別手順を追加します。

実行順序

  1. マスタテーブル db_what_day_master を作成する
  2. 中間テーブル db_daily_article_what_day を作成する

1. db_what_day_master の作成

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

  • 接頭辞が wp_ でない場合は、以下の SQL 内の wp_ を本番の接頭辞に置換してから実行してください。
  • または WhatDayMasterInstaller.phpdbDelta 用 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 マージ済みのコードが本番にデプロイされていることを確認してください(DatabaseTableConstantsWHAT_DAY_MASTER / DAILY_ARTICLE_WHAT_DAY が含まれている必要があります)。
  • 初期データの投入: db_what_day_master に記念日名称を投入する場合は、〇〇の日マスタ導入手順(雑学ネタ帳からのシードスクリプト)を参照してください。初回移行時は空のテーブルで開始しても問題ありません。

ロールバック方針

テーブル作成を取りやめる場合や、作成に失敗した状態を解消する場合は、中間テーブル → マスタテーブルの順で DROP してください。現時点のスキーマ定義では外部キー制約を張っていないため逆順でも DROP 自体は可能ですが、将来的に外部キーを追加した場合にも安全な手順となるよう、中間テーブルから先に削除する運用とします。

  • 作成時と同様に、本番の DB 接頭辞(例: wp_)を付けた実テーブル名を対象に DROP を実行してください。
  • 接頭辞が wp_ でない場合は、以下のテーブル名中の wp_ を本番の接頭辞に読み替えてください。
  1. wp_db_daily_article_what_day を DROP する(例: DROP TABLE IF EXISTS wp_db_daily_article_what_day;
  2. wp_db_what_day_master を DROP する(例: DROP TABLE IF EXISTS wp_db_what_day_master;

本番で既に運用を開始している場合(運用開始後に当該テーブルにデータが投入・登録されている場合)は、DROP 前に必ずデータ退避(エクスポート)やバックアップ取得を検討のうえ実行してください。〇〇の日機能をまだ本番運用しておらず当該テーブルが空の状態に限り、DROP によるデータ損失は発生しません。

関連