jpskill.com
🛠️ 開発・MCP コミュニティ

data-migration

データベース移行、スキーマ変換、データ統合など、データに関する様々な課題に対し、移行計画の策定から実行、移行後の検証まで、データ移行全体を支援するSkill。

📜 元の英語説明(参考)

When the user needs to migrate data between databases, transform schemas, or consolidate data sources. Use when the user mentions "data migration," "database migration," "migrate from MySQL to PostgreSQL," "schema migration," "ETL pipeline," "data transfer," "database consolidation," "legacy migration," or "move data between databases." Covers schema analysis, mapping, transformation, batch processing, validation, and cutover planning. For query optimization during migration, see sql-optimizer.

🇯🇵 日本人クリエイター向け解説

一言でいうと

データベース移行、スキーマ変換、データ統合など、データに関する様々な課題に対し、移行計画の策定から実行、移行後の検証まで、データ移行全体を支援するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o data-migration.zip https://jpskill.com/download/14817.zip && unzip -o data-migration.zip && rm data-migration.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/14817.zip -OutFile "$d\data-migration.zip"; Expand-Archive "$d\data-migration.zip" -DestinationPath $d -Force; ri "$d\data-migration.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して data-migration.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → data-migration フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

データ移行

概要

データベース間で自動化されたデータ移行パイプラインを構築します。スキーマ分析とマッピング、型変換、データ変換、依存関係順のテーブルロード、大規模データセットのバッチ処理、信頼性のためのチェックポイント/再開、移行後の検証、およびカットオーバー計画を処理します。本番環境の前にステージングに対してドライランできる、再現可能なスクリプトを生成します。

手順

1. スキーマ分析

ソースとターゲットを分析することから、すべての移行を開始します。

ソースの各テーブルについて:
  - カラム名、型、NULL 許容、デフォルト値
  - 主キーと自動インクリメントシーケンス
  - 外部キーの関係 (依存関係グラフを構築)
  - インデックスと一意制約
  - 行数の見積もり (バッチサイズ設定のため)
  - エンコーディング/照合順序 (特に MySQL → PostgreSQL の場合)

すべてのカラムを、そのソース型、ターゲット型、および必要な変換とともにリストしたスキーママップドキュメントを生成します。

2. 型マッピング

一般的なデータベース間の型変換:

MySQL PostgreSQL
TINYINT(1) BOOLEAN 0/1 を false/true にマッピング
ENUM('a','b') VARCHAR + CHECK またはカスタム TYPE を作成
DATETIME TIMESTAMPTZ タイムゾーン情報を追加
INT AUTO_INCREMENT SERIAL 移行後にシーケンスをリセット
DOUBLE DOUBLE PRECISION 直接マッピング
BLOB BYTEA バイナリデータ
TEXT (latin1) TEXT (UTF-8) 文字を再エンコード
JSON JSONB PG でバイナリ JSON を使用

3. 依存関係の解決

外部キーから有向非巡回グラフを構築します。

1. すべての FK 制約を解析 → 隣接リストを構築
2. トポロジカルソート → 移行順序
3. 循環依存関係: 一時的に FK を削除し、移行し、FK を再追加
4. 自己参照テーブル: 2 回のパスで移行 (データ、次に自己 FK の更新)

4. バッチ処理

10,000 行を超えるテーブルの場合:

function migrateLargeTable(table, batchSize = 5000):
  lastId = loadCheckpoint(table) or 0
  while true:
    rows = SELECT * FROM source.table WHERE id > lastId ORDER BY id LIMIT batchSize
    if rows.empty: break
    transformed = rows.map(row => transform(row, table.mapping))
    INSERT INTO target.table VALUES transformed
    lastId = rows.last.id
    saveCheckpoint(table, lastId, totalMigrated)

パフォーマンス目標:

  • ほとんどのテーブルで 5,000 行/バッチ
  • BLOB/TEXT カラムを持つテーブルで 1,000 行/バッチ
  • 一括ロード中はターゲットインデックスを無効にし、その後再構築

5. 検証

移行後の検証チェックリスト:

1. 行数: すべてのテーブルについて、ソースとターゲットを比較
2. ランダムサンプリング: テーブルごとに 100 行のランダムな行を、フィールドごとに比較
3. 集計チェック: 数値カラムの SUM、COUNT、MIN、MAX
4. 参照整合性: すべての FK が解決される (孤立レコードがない)
5. エンコーディング: 有効な UTF-8 のテキストフィールドをサンプリング
6. シーケンス: 自動インクリメント/シリアルの値が最大 ID より上に設定されていることを確認
7. NULL 許容: NOT NULL ターゲットカラムに予期しない NULL がない

6. カットオーバー計画

ダウンタイム許容度による 3 つの戦略:

完全なダウンタイム (最も単純): アプリを停止 → 移行 → 検証 → アプリを起動。小規模なデータセットの場合 (< 1M 行、< 1 時間)。

最小限のダウンタイム (推奨): 事前にバルクデータを移行 → 変更キャプチャを設定 → メンテナンスモード → 差分を適用 → 切り替え → 検証。ダウンタイム: 2 ~ 10 分。

ゼロダウンタイム (複雑): 両方のデータベースに二重書き込み → バックグラウンド移行 → 徐々に読み取りトラフィックをシフト → 古い書き込みを削除。アプリケーションの変更が必要。

例 1: MySQL から PostgreSQL

プロンプト: "MySQL 5.7 データベースを PostgreSQL 16 に移行します。30 個のテーブルがあり、最大は 500 万行です。"

出力: スキーママッピング JSON、型変換 DDL、依存関係順序付けを使用した移行スクリプト、大規模テーブルのバッチ処理、チェックポイントファイル、検証スイート、およびカットオーバー実行手順書。

例 2: データベースの統合

プロンプト: "2 つの SQLite データベースを 1 つの PostgreSQL にマージします。一部のテーブルは異なるスキーマで重複しています。"

出力: スキーマ差分レポート、マージ戦略ドキュメント (どのカラムが競合に勝つか)、構成可能なマッチキーを使用した重複排除ロジック、移行スクリプト、および競合解決ログ。

ガイドライン

  • 常に最初にステージングでドライランする — 本番環境に対して移行を直接実行しないでください
  • ソースをそのままにしておく — 移行は、カットオーバーまでソースに対して読み取り専用である必要があります
  • すべてをチェックポイントする — 大規模な移行は失敗します。再開可能性が必要です
  • カットオーバー前に検証する — 自動検証は、手動スポットチェックで見逃すものをキャッチします
  • ロールバックを計画する — ターゲットの検証が失敗した場合、ソースに戻る文書化されたパスを用意します
  • 広範囲にログを記録する — 処理された行、スキップされた行、変換エラー、タイミング
  • シーケンスをリセットする — 移行後、serial/auto-increment を移行された最大 ID より上に設定します
  • 本番ボリュームでテストする — 1000 行で動作するスクリプトは、5M 行で OOM になる可能性があります
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Data Migration

Overview

Builds automated data migration pipelines between databases. Handles schema analysis and mapping, type conversions, data transformations, dependency-ordered table loading, batch processing for large datasets, checkpoint/resume for reliability, post-migration validation, and cutover planning. Produces repeatable scripts that can be dry-run against staging before production.

Instructions

1. Schema Analysis

Start every migration by analyzing source and target:

For each table in source:
  - Column names, types, nullability, defaults
  - Primary keys and auto-increment sequences
  - Foreign key relationships (build dependency graph)
  - Indexes and unique constraints
  - Row count estimate (for batch sizing)
  - Encoding/collation (especially for MySQL → PostgreSQL)

Generate a schema map document listing every column with its source type, target type, and any transformation needed.

2. Type Mapping

Common cross-database type conversions:

MySQL PostgreSQL Notes
TINYINT(1) BOOLEAN Map 0/1 to false/true
ENUM('a','b') VARCHAR + CHECK Or create custom TYPE
DATETIME TIMESTAMPTZ Add timezone info
INT AUTO_INCREMENT SERIAL Reset sequence after migration
DOUBLE DOUBLE PRECISION Direct mapping
BLOB BYTEA Binary data
TEXT (latin1) TEXT (UTF-8) Re-encode characters
JSON JSONB Use binary JSON in PG

3. Dependency Resolution

Build a directed acyclic graph from foreign keys:

1. Parse all FK constraints → build adjacency list
2. Topological sort → migration order
3. Circular dependencies: temporarily drop FK, migrate, re-add FK
4. Self-referencing tables: migrate in two passes (data, then self-FK updates)

4. Batch Processing

For tables with more than 10,000 rows:

function migrateLargeTable(table, batchSize = 5000):
  lastId = loadCheckpoint(table) or 0
  while true:
    rows = SELECT * FROM source.table WHERE id > lastId ORDER BY id LIMIT batchSize
    if rows.empty: break
    transformed = rows.map(row => transform(row, table.mapping))
    INSERT INTO target.table VALUES transformed
    lastId = rows.last.id
    saveCheckpoint(table, lastId, totalMigrated)

Performance targets:

  • 5,000 rows/batch for most tables
  • 1,000 rows/batch for tables with BLOB/TEXT columns
  • Disable target indexes during bulk load, rebuild after

5. Validation

Post-migration validation checklist:

1. Row counts: source vs target for every table
2. Random sampling: 100 random rows per table, field-by-field comparison
3. Aggregate checks: SUM, COUNT, MIN, MAX on numeric columns
4. Referential integrity: all FKs resolve (no orphans)
5. Encoding: sample text fields for valid UTF-8
6. Sequences: verify auto-increment/serial values set above max ID
7. Nullability: no unexpected NULLs in NOT NULL target columns

6. Cutover Planning

Three strategies by downtime tolerance:

Full downtime (simplest): Stop app → migrate → validate → start app. For small datasets (< 1M rows, < 1 hour).

Minimal downtime (recommended): Pre-migrate bulk data → set up change capture → maintenance mode → apply delta → switch → validate. Downtime: 2-10 minutes.

Zero downtime (complex): Dual-write to both databases → background migration → gradual read traffic shift → drop old writes. Requires application changes.

Examples

Example 1: MySQL to PostgreSQL

Prompt: "Migrate our MySQL 5.7 database to PostgreSQL 16. 30 tables, biggest is 5M rows."

Output: Schema mapping JSON, type conversion DDL, migration script with dependency ordering, batch processing for large tables, checkpoint file, validation suite, and cutover runbook.

Example 2: Database Consolidation

Prompt: "Merge two SQLite databases into one PostgreSQL. Some tables overlap with different schemas."

Output: Schema diff report, merge strategy document (which columns win conflicts), deduplication logic using configurable match keys, migration script, and conflict resolution log.

Guidelines

  • Always dry-run on staging first — never run migration directly against production
  • Keep source untouched — migration should be read-only on source until cutover
  • Checkpoint everything — large migrations will fail; resumability is required
  • Validate before cutover — automated validation catches what manual spot-checks miss
  • Plan rollback — if target validation fails, have a documented path back to source
  • Log extensively — rows processed, rows skipped, transformation errors, timing
  • Reset sequences — after migration, set serial/auto-increment above max migrated ID
  • Test with production volume — a script that works on 1000 rows may OOM on 5M