Home
Get Started
実践ガイド
外部仕様設計
バッチ処理仕様設計
UAC 仕様設計
データ仕様設計
インフラ設計
移行計画
テスト方針・計画
開発プロセス・規約
データの移行
既存システムから新システムへのデータ移行を安全かつ正確に実施するための計画です。
🎯 概要
- 目的: 既存システムから新システムへのデータ移行を安全かつ正確に実施するための方針・手順を定義し、データの完全性と業務継続性を確保する
- スコープ: 移行対象データの範囲、移行方式、移行方法、データ変換ルール、品質管理、リハーサル計画をカバーする。移行後の運用・保守は対象外
- 推奨する実施タイミング: 基本設計の中後半で実施する。移行リハーサルは本番移行の1〜2ヶ月前に実施する
- 関連するステークホルダー: プロジェクトマネージャー、システムアーキテクト、データベースエンジニア、業務部門、インフラチーム
📥 重要な前提知識・インプット
- 前提知識: データベース設計の基礎、ETL処理の理解、SQL、データ品質管理、移行リスク管理の基本
- インプット: 既存システムのデータベーススキーマ、新システムのデータベーススキーマ、移行対象データの件数・容量、業務停止可能時間、データ保持要件
📄 成果物の定義
- ドキュメントテンプレート: 📄
[テンプレ]データの移行
- 必須要素: 移行対象データ一覧、移行方式選定書、データマッピング定義書、移行手順書、移行リハーサル計画書、切り戻し手順書、移行スケジュール
✅ 品質基準・レビュー観点
✅ 品質チェックリスト:
| チェック項目 | チェック内容 |
|---|---|
| 移行対象の明確性 | 移行対象・対象外データが明確に定義されているか |
| データマッピングの完全性 | 全ての項目に対してマッピング定義が存在するか |
| 品質基準の明確性 | データ完全性・正確性の合否判定基準が定義されているか |
| リスク対策の妥当性 | 主要なリスクに対する予防・対応策が定義されているか |
👁️🗨️ レビュー観点:
- 移行範囲の妥当性: 移行対象データの範囲が業務要件を満たしているか
- 移行方式の適切性: システム規模・業務制約に対して適切な移行方式が選定されているか
- 実現可能性: 移行時間・リソース・ツールの観点で実現可能な計画か
- 品質保証: データ検証・リハーサルによる品質確保の仕組みが整っているか
- リスク管理: 移行失敗時の切り戻し手順とバックアップ計画が明確か
🧪成果物のサンプル
# データの移行
## 移行対象データの範囲
### 移行対象データ一覧
本プロジェクトで移行対象とするデータの範囲を以下に示します。
| 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 | ログ | アクセスログ | 移行対象外 | - | - |
**記述例:**
- **マスタデータ**: 最新の有効データを全件移行
- **トランザクションデータ**: 2022年1月以降のデータを移行対象とする
- **履歴データ**: 過去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-JIS → UTF-8)
- 日付フォーマット統一(YYYYMMDD → YYYY-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 | 0→false, 1→true | 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)、データ検証ツール、マッピング定義テンプレート
テンプレートサイト: 📄テンプレート集