データの移行

Home

📕Arrow icon of a page linkサンエムシステム 上流工程標準(Preview版)

⚖️Arrow icon of a page linkサンエムシステム上流工程 標準規格

📘Arrow icon of a page link要件定義 実践ガイド

📘Arrow icon of a page link基本設計 実践ガイド

📄Arrow icon of a page linkテンプレート集

Get Started

📄Arrow icon of a page link基本設計工程のルール

📄Arrow icon of a page link基本設計書の構成を決める

🚧Arrow icon of a page link基本設計のプロセスモデル

実践ガイド

文書情報
システム方式設計
外部仕様設計
運用設計
インフラ設計
移行計画
テスト方針・計画
開発プロセス・規約
レビュー・承認

データの移行

既存システムから新システムへのデータ移行を安全かつ正確に実施するための計画です。

🎯 概要


  • 目的: 既存システムから新システムへのデータ移行を安全かつ正確に実施するための方針・手順を定義し、データの完全性と業務継続性を確保する
  • スコープ: 移行対象データの範囲、移行方式、移行方法、データ変換ルール、品質管理、リハーサル計画をカバーする。移行後の運用・保守は対象外
  • 推奨する実施タイミング: 基本設計の中後半で実施する。移行リハーサルは本番移行の1〜2ヶ月前に実施する
  • 関連するステークホルダー: プロジェクトマネージャー、システムアーキテクト、データベースエンジニア、業務部門、インフラチーム

📥 重要な前提知識・インプット


  • 前提知識: データベース設計の基礎、ETL処理の理解、SQL、データ品質管理、移行リスク管理の基本
  • インプット: 既存システムのデータベーススキーマ、新システムのデータベーススキーマ、移行対象データの件数・容量、業務停止可能時間、データ保持要件

📄 成果物の定義


  • ドキュメントテンプレート: 📄Arrow icon of a page link[テンプレ]データの移行
  • 必須要素: 移行対象データ一覧、移行方式選定書、データマッピング定義書、移行手順書、移行リハーサル計画書、切り戻し手順書、移行スケジュール
✅ 品質基準・レビュー観点

品質チェックリスト:

チェック項目 チェック内容
移行対象の明確性 移行対象・対象外データが明確に定義されているか
データマッピングの完全性 全ての項目に対してマッピング定義が存在するか
品質基準の明確性 データ完全性・正確性の合否判定基準が定義されているか
リスク対策の妥当性 主要なリスクに対する予防・対応策が定義されているか

👁️‍🗨️ レビュー観点:

  • 移行範囲の妥当性: 移行対象データの範囲が業務要件を満たしているか
  • 移行方式の適切性: システム規模・業務制約に対して適切な移行方式が選定されているか
  • 実現可能性: 移行時間・リソース・ツールの観点で実現可能な計画か
  • 品質保証: データ検証・リハーサルによる品質確保の仕組みが整っているか
  • リスク管理: 移行失敗時の切り戻し手順とバックアップ計画が明確か
🧪成果物のサンプル
# データの移行

## 移行対象データの範囲

### 移行対象データ一覧

本プロジェクトで移行対象とするデータの範囲を以下に示します。

| No | データ種別 | テーブル/ファイル名 | 移行対象範囲 | 件数(概算) | 優先度 |
|----|----------|------------------|-------------|------------|--------|
| 1 | マスタ | 顧客マスタ | 全件 | 10,000| High |
| 2 | マスタ | 商品マスタ | 全件 | 5,000| High |
| 3 | マスタ | 社員マスタ | 全件 | 500| High |
| 4 | トランザクション | 受注データ | 過去3年分 | 50,000| High |
| 5 | トランザクション | 売上データ | 過去3年分 | 80,000| High |
| 6 | トランザクション | 在庫データ | 最新のみ | 3,000| Middle |
| 7 | ログ | アクセスログ | 移行対象外 | - | - |

**記述例:**
- **マスタデータ**: 最新の有効データを全件移行
- **トランザクションデータ**: 20221月以降のデータを移行対象とする
- **履歴データ**: 過去5年分の履歴を保持

### 移行対象外データ

以下のデータは移行対象外とします。

| No | データ種別 | 理由 | 代替措置 |
|----|----------|------|---------|
| 1 | テストデータ | 新システムで再作成 | 新規作成 |
| 2 | 削除済みデータ | 業務上不要 | 参照用に旧環境保管 |
| 3 | 2021年以前のログ | 保管義務なし | 廃棄 |

---

## 移行方式

### 移行方式の選定

本プロジェクトでは、以下の理由により**一括移行方式**を採用します。

**選定理由:**
- システム規模が中小規模であり、移行データ量が限定的
- 業務停止時間(週末48時間)が確保可能
- 並行稼働によるデータ不整合リスクを回避したい
- コスト・期間の観点から最も効率的

### 移行方式の比較

```mermaid
graph LR
    A[移行方式] --> B[一括移行]
    A --> C[段階移行]
    A --> D[並行稼働]
    
    B --> B1[採用]
    C --> C1[不採用]
    D --> D1[不採用]
    
    style B1 fill:#90EE90
    style C1 fill:#FFB6C1
    style D1 fill:#FFB6C1
```

| 方式 | メリット | デメリット | 判定 |
|------|---------|-----------|------|
| 一括移行 | ・シンプルで管理しやすい<br>・データ不整合が発生しにくい<br>・コストが最小 | ・業務停止時間が必要<br>・失敗時の影響大 | ✅採用 |
| 段階移行 | ・リスク分散可能<br>・業務影響を最小化 | ・複雑で工数大<br>・データ整合性管理が困難 | ❌不採用 |
| 並行稼働 | ・リスク最小<br>・段階的な切替可能 | ・二重メンテナンス<br>・同期の複雑さ<br>・コスト大 | ❌不採用 |

---

## 移行方法(技術的アプローチ)

### データ移行フロー

```mermaid
graph LR
    A[旧システム] -->|①抽出| B[変換処理]
    B -->|②変換| C[検証]
    C -->|③検証| D[新システム]
    D -->|④登録| E[確認]
    
    B -.エラー.-> F[エラーログ]
    C -.エラー.-> F
    D -.エラー.-> F
```

### 移行処理の流れ

#### データ抽出(Extract)

**方法:**
- 旧システムのDBから直接SQL抽出
- またはCSVエクスポート機能を使用

**抽出ツール:**
- 標準: SQL*Loader / mysqldump
- カスタムツール: 移行用Pythonスクリプト

**記述例:**
```sql
-- 顧客マスタ抽出クエリ
SELECT 
    customer_id,
    customer_name,
    email,
    registration_date
FROM customers
WHERE delete_flag = 0;
```

#### データ変換(Transform)

**変換処理内容:**
- 文字コード変換(Shift-JISUTF-8)
- 日付フォーマット統一(YYYYMMDDYYYY-MM-DD)
- コード体系変換(旧コード → 新コード)
- NULL値の処理

**変換ツール:**
- ETLツール: Talend / Pentaho
- スクリプト: Python pandas

**記述例:**
```python
# 日付フォーマット変換
df['registration_date'] = pd.to_datetime(
    df['registration_date'], 
    format='%Y%m%d'
).dt.strftime('%Y-%m-%d')
```

#### データ検証(Validation)

**検証項目:**
- 必須項目チェック
- データ型チェック
- 桁数チェック
- 重複チェック
- 参照整合性チェック

**検証基準:**
| 検証項目 | 判定基準 | 対応 |
|---------|---------|------|
| エラー率 | 0.1%未満 | エラーデータは手動修正 |
| 件数一致 | 100% | 不一致時は原因調査 |

#### データ登録(Load)

**登録方法:**
- バルクインサート(一括登録)
- APIによる登録
- 手動登録(例外のみ)

**登録順序:**
```mermaid
graph TD
    A[マスタデータ] --> B[トランザクションデータ]
    
    A1[顧客マスタ] --> A
    A2[商品マスタ] --> A
    A3[社員マスタ] --> A
    
    B1[受注データ] --> B
    B2[売上データ] --> B
```

---

## データ変換の考え方

### マッピング定義

旧システムから新システムへのデータ項目対応を定義します。

#### マッピング定義例:顧客マスタ

| No | 旧項目名 | 新項目名 | 変換ルール | 備考 |
|----|---------|---------|-----------|------|
| 1 | CUST_ID | customer_id | そのまま | 主キー |
| 2 | CUST_NAME | customer_name | トリム処理 | 前後空白削除 |
| 3 | MAIL_ADDR | email | 小文字変換 | 正規化 |
| 4 | REG_DATE | registration_date | YYYY-MM-DD形式 | 日付変換 |
| 5 | DEL_FLG | is_deleted | 0false, 1true | boolean変換 |

### コード変換定義

コード体系が変更される場合の変換ルールを定義します。

#### コード変換例:都道府県コード

| 旧コード | 新コード | 都道府県名 |
|---------|---------|-----------|
| 01 | 13 | 東京都 |
| 02 | 27 | 大阪府 |
| 03 | 14 | 神奈川県 |

### データ変換の例外処理

**NULL値の扱い:**
- 必須項目でNULLの場合: デフォルト値を設定
- 任意項目でNULLの場合: NULLのまま移行

**不正データの扱い:**
- エラーリスト出力
- 業務部門と協議の上、手動修正

---

## 移行・並行稼働期間のデータ同期

### データ同期の必要性

本プロジェクトでは**一括移行方式**を採用するため、基本的に並行稼働期間は設けません。
ただし、以下のケースで一時的な同期が必要となる場合があります。

**同期が必要なケース:**
- リハーサル後の本番移行までの期間(差分データのみ)
- 移行失敗時の切り戻し後の再移行

### 差分データ同期方式

```mermaid
graph LR
    A[旧システム] -->|①変更データ抽出| B[差分ファイル]
    B -->|②差分適用| C[新システム]
    
    A -.タイムスタンプで判定.-> B
```

**同期対象:**
- リハーサル実施日以降に更新されたデータのみ

**同期頻度:**
- 本番移行直前の1回のみ

**同期方法:**
- タイムスタンプによる差分抽出
- 更新日時が最新のデータのみを対象

---

## リハーサル

移行リハーサルの詳細については、**6.5 移行リハーサル**の章を参照してください。

**リハーサルの目的:**
- 移行手順の妥当性確認
- 移行時間の計測
- エラー発生時の対応確認

**リハーサル実施回数:**
- 最低2回(初回リハーサル + 本番前最終リハーサル)

---

## リスクとバックアップ

移行リスクと切り戻し方針の詳細については、**6.3 移行リスク管理・切り戻し**の章を参照してください。

**主要なリスク:**
- データ移行失敗
- 移行時間の超過
- データ不整合の発生

**バックアップ方針:**
- 移行前: 旧システムの完全バックアップ取得
- 移行後: 新システムの初期バックアップ取得
- 保管期間: 最低3ヶ月

**切り戻し判断基準:**
- 重大な業務影響が発生した場合
- データ不整合が許容範囲を超えた場合
- 移行時間が予定を大幅に超過した場合

---

## 移行ツール

### 使用ツール一覧

| ツール名 | 用途 | 選定理由 |
|---------|------|---------|
| Python pandas | データ変換 | 柔軟性・拡張性が高い |
| MySQL Workbench | データ抽出・登録 | 標準ツールで安定性が高い |
| Excel | マッピング定義管理 | 業務部門との共有が容易 |

### カスタムツールの開発

以下のカスタムツールを開発します。

**データ検証ツール:**
- 入力: 変換後CSVファイル
- 処理: 必須チェック、形式チェック、重複チェック
- 出力: エラーリスト(CSV)

**差分抽出ツール:**
- 入力: 旧システムDB
- 処理: タイムスタンプによる差分判定
- 出力: 差分データ(CSV)

---

## 移行データの品質管理

### 品質基準

| 品質項目 | 目標値 | 測定方法 |
|---------|-------|---------|
| データ完全性 | 100% | 件数突合 |
| データ正確性 | 99.9%以上 | サンプリング検証 |
| エラー率 | 0.1%未満 | エラーログ集計 |

### 検証手順

```mermaid
graph TD
    A[移行実施] --> B[件数チェック]
    B --> C{一致?}
    C -->|Yes| D[サンプリング検証]
    C -->|No| E[原因調査]
    E --> F[修正]
    F --> A
    D --> G{OK?}
    G -->|Yes| H[移行完了]
    G -->|No| E
```

**検証レベル:**
1. **全件検証**: 件数、主キー、必須項目
2. **サンプリング検証**: 10%抽出による詳細確認
3. **業務検証**: 業務部門による受入確認

---

🔄 設計の進め方・プロセス


🏗️ プロセス1: 移行対象データの範囲決定

設計対象:

既存システムから新システムへ移行するデータの範囲を特定し、移行対象・対象外を明確に定義する。

具体例:

  • どのテーブル・ファイルを移行対象とするか(マスタデータ、トランザクションデータ、履歴データなど)
  • トランザクションデータの移行期間をどこまで遡るか(例: 過去3年分、過去5年分)
  • 論理削除されたデータや無効なマスタを移行するか
  • テストデータや一時データを移行対象外とするか

設計原則:

  • 業務要件の優先: 法令・監査要件、業務上の参照頻度を基準に移行範囲を決定する
  • データ量とコストのバランス: 移行データ量が多すぎると移行時間・コストが増大するため、必要最小限の範囲に絞る
  • 品質重視: 不要・不正確なデータは移行せず、新システムで品質の高い状態からスタートする
  • 明確な境界線: 移行対象・対象外の判断基準を明確にし、曖昧さを残さない

文書化の推奨表現:

  • 移行対象データ一覧: テーブル・ファイル単位で移行対象範囲、件数、優先度を一覧化する
  • 移行対象外データ一覧: 対象外とするデータとその理由、代替措置を記載する
  • 移行範囲の判断基準: どのような基準で移行対象・対象外を判断したかを文書化する
🏗️ プロセス2: 移行方式の選定

設計対象:

システム規模、データ量、業務制約を踏まえ、一括移行・段階移行・並行稼働のいずれを採用するかを決定する。

具体例:

  • 一括移行: 週末に業務を停止し、一度に全データを移行する
  • 段階移行: モジュール・拠点単位で段階的に移行する
  • 並行稼働: 旧システムと新システムを一定期間並行稼働させながらデータを同期する

設計原則:

  • 業務影響の最小化: 業務停止時間を最小限に抑えられる方式を優先する
  • リスクとコストのバランス: 移行失敗のリスク、データ不整合のリスク、移行コストを総合的に評価する
  • 実現可能性の確認: チームのスキル・リソース、システムの制約条件で実現可能な方式を選ぶ
  • 選定理由の明文化: なぜその方式を選んだのか、他の方式との比較結果を含めて文書化する

文書化の推奨表現:

  • 移行方式の比較表: 各方式のメリット・デメリット、採用判定を一覧化する
  • 選定理由の記録: 採用した移行方式の選定理由と判断基準を明記する
  • 業務停止時間の明示: 業務停止が必要な場合はその時間帯と期間を明確にする
🏗️ プロセス3: データマッピング定義

設計対象:

旧システムのデータ項目と新システムのデータ項目の対応関係、変換ルールを定義する。

具体例:

  • テーブル単位、項目単位でのマッピング定義(顧客マスタの顧客IDは新システムのcustomer_idに対応、など)
  • データ型変換(文字列→数値、日付フォーマット変換など)
  • コード体系変換(旧システムの都道府県コード→新システムのコード体系)
  • NULL値や不正データの扱い(デフォルト値設定、エラー扱い、など)

設計原則:

  • 完全性の確保: 全ての移行対象項目に対してマッピング定義を漏れなく作成する
  • 変換ルールの明確化: 単純なコピーだけでなく、変換が必要な項目については具体的なルールを定義する
  • 例外処理の定義: NULL値や不正データが発見された場合の処理方針を明確にする
  • 業務部門との合意: マッピング定義は業務部門とレビューし、業務要件との整合性を確認する

文書化の推奨表現:

  • マッピング定義書: 旧項目名、新項目名、変換ルール、備考を一覧表で整理する
  • コード変換表: コード体系が変更される場合は旧コード・新コードの対応表を作成する
  • 例外処理ルール: NULL値や不正データの扱いを明文化する
🏗️ プロセス4: 移行手順とスケジュールの作成

設計対象:

移行作業の具体的な手順、担当者、スケジュール、成果物、判定基準を定義する。

具体例:

  • 移行作業の流れ(バックアップ取得→データ抽出→変換→検証→登録→確認→本番切替)
  • 各工程の所要時間、担当者、使用ツール
  • リハーサル実施日、本番移行日のスケジュール
  • データ検証の合否判定基準(件数一致率100%、エラー率0.1%未満、など)

設計原則:

  • 実現可能なスケジュール: 過度に楽観的でなく、バッファを含めた現実的なスケジュールを立てる
  • 役割分担の明確化: 各作業の担当者と責任範囲を明確にする
  • 判定基準の明確化: 各工程の合否判定基準を定量的に定義する
  • リハーサルの実施: 本番前に必ずリハーサルを実施し、手順・時間を検証する

文書化の推奨表現:

  • 移行手順書: 作業手順をステップバイステップで記載し、コマンド例やスクリーンショットを含める
  • 移行スケジュール: ガントチャートやタイムラインで移行作業の流れと期限を視覚化する
  • 役割分担表: 作業項目ごとの担当者、レビュー者、承認者を一覧化する
  • 判定基準: データ完全性・正確性の合否判定基準を数値で明示する

🚨 よくある失敗と予防策 


🚧 実例収集後、追記予定

📚 参考資料・関連リンク


  • 参考文献: 『データ移行プロジェクトの実践ガイド』、IPAの「システム移行ガイドライン」
  • 関連する他のガイド: データベース設計ガイド、移行リスク管理ガイド、リリース管理ガイド、運用移行ガイド
  • ツール・テンプレート: Python pandas、ETLツール(Talend、Pentaho)、データ検証ツール、マッピング定義テンプレート


テンプレートサイト: 📄Arrow icon of a page linkテンプレート集