モダナイゼーションの進め方
モダナイゼーション実行プレイブック
対象: PoC向け現状資料(料金CIS / 設備管理サブシステム) 作成日: 2026-06-16 ステータス: Phase 0 — 調査・戦略策定
目次
1. エグゼクティブサマリー
システム全体像・言語構成・現状分析の基本データは
final-report.mdセクション1-1を参照。
一文で言うと
VB6とCOBOLが9:3の比率で混在する約50万行規模のレガシーシステム。両者は直接結合しておらず Shell/BAT 経由の間接結合のみ。バージョン管理なし・共通モジュールが最大104コピー散在という構造的課題を抱えるが、仕様書カバレッジ63%と比較的ドキュメントが残存しており、段階的モダナイゼーションの条件は揃っている。
2. 現状調査の結果と所見
2.1 アーキテクチャの構造
アーキテクチャ全体像・VB6/COBOL分離の発見・主要バッチフローは
final-report.mdセクション1-1を参照。
2.2 サブシステム構成と結合度
| サブシステム | プログラム数 | テーブル数 | 主要言語 |
|---|---|---|---|
| 料金CIS(料金・顧客情報) | 287 | 143 | VB6 + COBOL |
| 設備管理(送配電設備) | 133 | 54 | COBOL (バッチ主体) |
| 共有テーブル | — | 11 | — |
サブシステム間共有テーブル(実業務データ):
| テーブル | 料金CIS側操作 | 設備管理側操作 | リスク |
|---|---|---|---|
| KY110 | R/W/U/D (5プログラム) | R/D (6プログラム) | 高 — 両側から書き込み |
| KY130 | R/W/D (1プログラム) | R (3プログラム) | 中 — 料金CISのみ書き込み |
| MS210 | R (1プログラム) | R (8プログラム) | 低 — 読み取りのみ |
| MS220 | R (1プログラム) | R (3プログラム) | 低 — 読み取りのみ |
| SB080/SB110/SB120 | R | R | 低 — 読み取りのみ |
| HZ010/HZ110/HZ510 | R | R | 低 — 読み取りのみ |
| SB710 | R | R | 低 — 読み取りのみ |
判定: 共有テーブル11件のうち、両側から書き込みが発生するのは KY110 の1件のみ。残り10件は片側書き込みまたは読み取りのみ。サブシステム間のデータ結合は想定より疎であり、独立した移行が十分可能。
2.3 共通モジュール(技術的負債の核心)
共通モジュール散在の全体像は
final-report.mdセクション4-1を参照。
ExeOdbc は 465行・28プロシージャ からなるデータアクセス層。46個のVB6プロジェクトが直接インクルードしている。Win32 ODBC API(SQLAllocEnv, SQLConnect, SQLExecDirect 等)を直接呼び出しており、モダンな ADO.NET / Entity Framework に相当する。
この1ファイルの移行が、モダナイゼーション全体の鍵を握る。
2.4 依存関係のホットスポット
上位プログラム(発信依存 Top 10):
| プログラム | 言語 | 発信 | 受信 | 行数 | 役割 |
|---|---|---|---|---|---|
| EXEODBC | VB6 | 3,235 | 209 | 465 | DB接続共通層 |
| VKNFC4 | VB6 | 392 | 17 | 908 | 設備管理変換処理 |
| VZY110 | VB6 | 339 | 117 | 91 | ログ・レポート共通層 |
| CKN920 | COBOL | 287 | 4 | 499 | 料金CISマスタ処理 |
| CKNAV0 | COBOL | 282 | 2 | 1,510 | 料金CIS照会処理 |
| CKNG10 | COBOL | 265 | 5 | 494 | 料金CIS帳票処理 |
| CKNBB0 | COBOL | 257 | 5 | 770 | 料金CIS請求処理 |
| VKNAM1 | VB6 | 227 | 13 | 766 | マスタ一覧画面 |
| CKNBC0 | COBOL | 226 | 4 | 773 | 料金CIS請求処理 |
| CSBAN1 | COBOL | 224 | 2 | 953 | 工事処理 |
2.5 リーフプログラム(移行候補の母集団)
441本 / 596本(74%)のプログラムが他プログラムから直接呼ばれていない。
これは VB6 の各 .vbp が独立した .exe をビルドする構造と、COBOL バッチの性質を反映している。この441本は Strangler Fig パターンの「外側から刈り取る」対象として最適。
3. 5視点アセスメント — 機械的ファクトに基づく定量評価
原則: 本セクションは、ソースコード・設定ファイル・バイナリ・仕様書から 機械的に抽出したファクト のみを記載する。本番環境の実行ログ・ジョブ定義・DBスキーマ等は 現時点で未取得 であり、それらに依存する評価は「未取得」と明記した上で、データ取得後に更新する。
データ取得状況
| データソース | 取得状況 | 本セクションでの利用 |
|---|---|---|
| ソースコード(VB6/COBOL/BAT等) | 取得済 | 全視点で利用 |
| 仕様書ファイル(Excel/PDF) | 取得済 | 視点2・5で利用 |
| EXEバイナリ(144本) | 取得済 | 視点4で利用 |
| ODBC設定ファイル(TBDB.ini) | 取得済 | 視点3で利用 |
| 検針受信ログファイル(data内) | 一部取得済 | 視点2で参考利用 |
| 本番実行ログ(ジョブスケジューラ等) | 未取得 | 視点2に必要 |
| 本番DBスキーマ(DDL) | 未取得 | 視点1・3に必要 |
| 本番EXE(SHA256照合用) | 未取得 | 視点4に必要 |
| 業務フロー図・ヒアリング結果 | 未取得 | 視点5に必要 |
視点1
データフロー(依存度)
◎静的解析で取得
視点2
利用実態(実利用)
△静的分類のみ・ログ未取得
視点3
データ利用(技術リスク)
◎静的解析で取得・DDL未取得
視点4
技術資産(技術リスク)
◎静的解析で取得・正本未確定
視点5
システム分類(業務機能)
○命名推定で分類・業務確認待ち
◎ 主要データ取得済 ○ 部分的に取得 △ 代替データで暫定評価
3.1 視点1: データフロー(依存度)
取得状況: ソースコード内のSQL文を静的解析し、CRUD操作 1,332件を抽出した。ただし、本番DBのDDL(テーブル定義)は 未取得 のため、テーブルのカラム型・制約・インデックス情報は含まない。また、ファイル経由のデータフロー(DAT/TXT 169件)は未マッピングであり、プログラム間のデータ受け渡しの全体像は完全ではない。
CRUD操作の全体像
| 操作 | エッジ数 | 構成比 | 移行時の留意点 |
|---|---|---|---|
| SELECT | 657 | 49.3% | 読み取り専用 → 移行リスク低 |
| UPDATE | 471 | 35.4% | 更新ロジックの正確な移植が必要 |
| INSERT | 152 | 11.4% | データ整合性制約の確認必要 |
| DELETE | 52 | 3.9% | カスケード削除の影響範囲確認 |
| 合計 | 1,332 | 100% | — |
所見: SELECT が約半数を占め、UPDATE が 35%。INSERT/DELETE は比較的少なく、多くのプログラムが「読み取り + 更新」パターンであることを示す。これは段階移行において、読み取り側プログラムを先行移行できる構造。
ハブテーブル分析(依存集中度 Top 10)
| 順位 | テーブル | 合計CRUD | R | W | U | D | アクセスPGM数 | 推定業務機能 | 移行リスク |
|---|---|---|---|---|---|---|---|---|---|
| 1 | RN920 | 249 | 18 | 72 | 159 | 0 | 54 | ステータス管理/ログ制御 | 極高 |
| 2 | KY110 | 80 | 24 | 19 | 18 | 19 | 11 | 契約データ本体 | 高 |
| 3 | KN060 | 26 | 9 | 0 | 17 | 0 | 10 | 料金CIS | 中 |
| 4 | KY130 | 18 | 8 | 5 | 0 | 5 | 4 | 契約(低圧需要家定期) | 中 |
| 5 | KN030 | 18 | 9 | 0 | 9 | 0 | 3 | 料金CIS | 中 |
| 6 | RCVHIST | 17 | 3 | 14 | 0 | 0 | 3 | 受信履歴 | 低 |
| 7 | KNDJ0 | 17 | 8 | 8 | 0 | 1 | 2 | 料金CIS(試験) | 低 |
| 8 | KN010 | 13 | 6 | 1 | 0 | 6 | 2 | 料金CIS | 中 |
| 9 | KNDI0 | 13 | 6 | 3 | 3 | 1 | 2 | 料金CIS(ディスプレイ) | 低 |
| 10 | KJ011 | 12 | 8 | 0 | 4 | 0 | 3 | 供給 | 低 |
最重要テーブル: RN920
- 54プログラムからアクセスされる最大のハブテーブル
- UPDATE 159件(全操作の64%)— ステータス更新が主用途
- VB6/COBOL 両方からアクセスされ、メッセージキュー的に機能
- 移行戦略: 最初に抽象化層(API)を設ける最優先候補
高リスクテーブル: KY110
- 料金CIS・設備管理両サブシステムから R/W/U/D の全操作が発生
- 11プログラムが同一テーブルにアクセス — データ整合性の確保が最重要
クロスサブシステム データフロー
図を読み込み中…
判定: サブシステム間のデータ受け渡しはテーブル共有(2件: RN920, KY110)よりも、ファイル経由(DAT/TXT 169件) と BAT起動チェーン が中心。テーブル結合が疎であることはモダナイゼーション上の好材料。
3.2 視点2: 利用実態(アプリ実利用時間)
取得状況: 本視点で本来必要な 本番実行ログ・ジョブスケジューラ定義・アプリ実利用時間 は すべて未取得 である。現時点では、ソースコードのファイル種別(.bas/.cbl/.frm/.bat等)と仕様書の有無から 実行パターンの静的分類 のみを実施した。実行頻度・実利用時間・ユーザー操作ログに基づく評価は、データ取得後に本セクションを更新する。
実行パターン別プログラム分類(静的分類 — ソースファイル種別に基づく)
| 実行パターン | PGM数 | ファイル数 | 推定LOC | 構成比 | 実行形態 |
|---|---|---|---|---|---|
| COBOL バッチ | 186 | 219 | 205,937 | 40.7% | BAT起動・スケジューラ(推定) |
| VB6 モジュール (.bas) | 157 | 466 | 246,855 | 48.8% | EXE実行(推定) |
| VB6 プロジェクト (.vbp) | 72 | 134 | 8,311 | 1.6% | EXE ビルド単位 |
| VB6 GUI フォーム (.frm) | 10 | 12 | 37,928 | 7.5% | ユーザー操作(推定) |
| Windows BAT | 16 | 20 | 4,759 | 0.9% | オーケストレーション |
| VB.NET | 6 | 6 | 1,662 | 0.3% | EXE (.NET 3.5) |
| SQL スクリプト | 8 | 11 | 142 | 0.0% | DB直接実行(推定) |
| 分類不能 | 231 | — | 0 | — | EXEのみ/パス不明 |
※「実行形態」列はファイル種別からの推定であり、本番ジョブ定義による確認は 未実施。
注目ポイント:
- GUIプログラムは10本のみ — ファイル拡張子(.frm)から判別。実際の利用頻度は 未取得
- VB.NETは6本のみ — VKN070B 1プロジェクトに集約。.NET移行の先行事例として活用可能
- 分類不能 231本 — ソースパスが不明(EXEのみ存在、または仕様書のみで紐づくプログラム)。本番環境調査で正体確認が必要
仕様書カバレッジ
仕様書カバレッジ(採点対象 596本)
| 区分 | 件数 | 割合 | 移行への影響 |
|---|---|---|---|
| 仕様書あり | 377 | 63.2% | 仕様照合による正確な移行が可能 |
| 仕様書なし | 219 | 36.8% | ソースコードのみから仕様を逆算する必要あり |
判定: 63%のカバレッジは同規模のレガシーシステムとしては 比較的良好。ただし37%の仕様欠損プログラムに対しては、AI支援によるソース解析 + 業務担当者ヒアリングの併用が必要。
デッドコード候補(静的解析による暫定判定)
| 分類 | 件数 | 判定根拠 |
|---|---|---|
| 他PGMからの呼出なし | 441 | 依存グラフの入力エッジが file ノードのみ(静的解析) |
| data内検針受信ログで名前確認 | 118 | 提供されたdata内のログファイルにプログラム名が出現 |
| デッドコード候補(暫定) | 323 | 441 − 118。本番実行ログによる精査は未実施 |
注意: 上記はソースコードの静的依存関係のみに基づく暫定判定である。本番ジョブスケジューラの実行ログが 未取得 のため、実際に稼働していないプログラムの確定はできていない。本番ログ取得後、デッドコードの最終判定と移行対象の絞り込みを行う。
BATオーケストレーション構造(ソースコードから抽出)
| BATファイル | 起動PGM数 | 実行頻度 | 機能 |
|---|---|---|---|
| CHP060TB | 17 | 未取得 | レポート生成パイプライン |
| CHP03TPB | 4 | 未取得 | 契約データ処理 |
| その他BAT | 1-3 | 未取得 | 個別処理起動 |
※ 実行頻度(日次/月次/随時)はジョブスケジューラ定義が 未取得 のため記載できていない。
本視点で今後取得が必要なデータ
本視点の完全な評価には以下が必須であり、現時点では いずれも未取得 である:
| 必要データ | 取得元 | 取得後に可能になる評価 |
|---|---|---|
| プログラム実行頻度(日次/月次) | ジョブスケジューラ/イベントログ | 実稼働プログラムの確定 |
| アプリ実利用時間 | プロセス実行ログ | 利用率に基づく移行優先度 |
| GUIプログラムの操作ログ | アプリケーションログ | UI移行の優先順位 |
| バッチ処理時間 | 実行ログ | ボトルネック特定 |
| エラー頻度 | エラーログ | 不安定モジュールの優先修正 |
3.3 視点3: データ利用・参照分析(技術リスク)
取得状況: ソースコード内のODBC API呼出・DSN参照・TBDB.ini設定ファイルを静的解析し、ODBC接続構成を抽出した。ただし、各DSNの 実際の接続先サーバー/ポート情報 および テーブルのレコード数・データ量 は本番DB環境が 未取得 のため含まない。DSN名称からの用途推定は命名規則に基づく暫定的なものである。
ODBC インフラストラクチャ全体像
図を読み込み中…
DSN 接続頻度(上位10 — ソースコード内の参照数)
| 順位 | DSN名 | ソース内参照数 | 接続先サーバー | 用途 |
|---|---|---|---|---|
| 1 | TBFDB | 777 | 未取得 | 未確認 |
| 2 | TBRDB | 699 | 未取得 | 未確認 |
| 3 | TB5DB | 610 | 未取得 | 未確認 |
| 4 | TB8DB | 596 | 未取得 | 未確認 |
| 5 | TB7DB | 572 | 未取得 | 未確認 |
| 6 | TB4DB | 551 | 未取得 | 未確認 |
| 7 | TBHDB | 514 | 未取得 | 未確認 |
| 8 | TB2DB | 503 | 未取得 | 未確認 |
| 9 | TBSDB | 413 | 未取得 | 未確認 |
| 10 | TBADB | 378 | 未取得 | 未確認 |
所見: ソースコード・TBDB.ini から30の本番系DSN名を抽出した。TBFDB が最もソース内参照が多い(777件)。テスト系7 + 外部系5を含む計42のDSNが存在する。各DSNの実際の接続先サーバー・ポート情報は 本番ODBC設定が未取得のため不明。
仕様書フォーマット分析
| 形式 | 件数 | 構成比 | 移行への影響 |
|---|---|---|---|
| .xlsx (Excel 2007+) | 218 | 88.6% | 構造化抽出可能(openpyxl等) |
| .xls (Excel 97-2003) | 19 | 7.7% | レガシー形式だが読取可能 |
| 9 | 3.7% | OCR/テキスト抽出が必要 | |
| 合計 | 246 | 100% | — |
判定: 約96%がExcel形式 — プログラムによる自動解析・仕様抽出が現実的。PDF 9件は手動確認が必要。
外部データファイル
| 種類 | 件数 | 主な用途 |
|---|---|---|
| .txt | 105 | 検針受信データ、ログ出力 |
| .dat | 44 | バッチ処理中間データ |
| .tab | 16 | テーブルデータ |
| .csv | 4 | エクスポートデータ |
| .mdb (Access) | 6 | 開発時テストDB |
| 合計 | 175 | — |
3.4 視点4: 技術資産(技術リスク)
取得状況: ソースコードのファイル種別・行数、EXEバイナリのPEヘッダ解析、VBPファイルのバージョン情報から技術構成を抽出した。ただし、本番で稼働しているEXEとの SHA256照合は未実施(本番EXE未取得)のため、正本バージョンは未確定。COM/OCXコンポーネント依存の網羅的な抽出も未完了。
言語別コード量
| 言語 | LOC | PGMファイル数 | LOC/ファイル | 構成比 |
|---|---|---|---|---|
| VB6 (.bas) | 246,855 | 466 | 530 | 48.8% |
| COBOL (.cbl/.cob) | 205,937 | 219 | 940 | 40.7% |
| VB6 Form (.frm) | 37,928 | 12 | 3,161 | 7.5% |
| VB6 Project (.vbp) | 8,311 | 134 | 62 | 1.6% |
| Windows BAT | 4,759 | 20 | 238 | 0.9% |
| VB.NET | 1,662 | 6 | 277 | 0.3% |
| SQL | 142 | 11 | 13 | 0.0% |
| 合計 | 505,594 | 868 | — | 100% |
言語構成(LOC比率)
所見: VB6系(.bas + .frm + .vbp)が 58%、COBOLが 40.7% で合計 98.7%。VB.NET/BAT/SQLは合わせて1.3%のみ。実質的に VB6 + COBOL の2言語システム。
ランタイム分析(144 EXE バイナリ解析)
| ランタイム | EXE数 | 構成比 | サポート状況 |
|---|---|---|---|
| VB6 Runtime | 140 | 97.2% | 延長サポート終了。Windows互換性リスク |
| .NET CLR (v3.5) | 3 | 2.1% | .NET 3.5 — サポート終了、要アップグレード |
| Native Win32 | 1 | 0.7% | OS依存度高 |
最重要リスク: 140本のEXEが VB6 Runtime に依存。Microsoft の VB6 Runtime サポートは Windows 11 までの互換性保証 にとどまり、将来のOSで動作しなくなるリスクがある。
バージョン管理状況
| 項目 | 数値 | 所見 |
|---|---|---|
| 複数バージョン存在するPGM | 9 | VBPファイルのバージョン情報から検出 |
| 最多バージョン | VKNAT0B (6バージョン) | 1.00〜1.13 |
| 正本不明(EXE照合未実施) | 144 | 本番EXEが 未取得 のため照合できていない |
バージョン重複詳細:
| プログラム | バージョン数 | 範囲 | リスク |
|---|---|---|---|
| VKNAT0B | 6 | 1.00→1.13 | 高 — どれが正本か不明 |
| VKNBB0B | 4 | 1.01→2.03 | 高 |
| VKNFC0B | 4 | 1.00→1.08 | 高 |
| VKNBA0B | 3 | 1.01→2.04 | 中 |
| VKNAL0B〜VKNFK0B | 各2 | — | 中 |
技術的負債指標
| 指標 | 数値 | 深刻度 | 説明 |
|---|---|---|---|
| ExeOdbc.bas コピー数 | 104 | 極高 | 全VB6プロジェクトに散在。1改修→104箇所同期 |
| VZY110.bas コピー数 | 59 | 高 | 共通ユーティリティの重複 |
| Function_AnsiStrConv.bas コピー数 | 19 | 中 | 文字コード変換の重複 |
| 重複ファイルグループ総数 | 68 | — | — |
| ODBC API 直接呼出 | 17種/979エッジ | 高 | Win32 API直接依存 |
| 未解決外部参照 | 15件 | 中 | DBTABLE_SETTING等の解決不能呼出先 |
| プロシージャ総数 | 9,899 (COBOL 8,116 + VB 1,783) | — | 移行対象の工数見積り基準 |
ODBC API / ラッパー依存度
| ラッパー関数 | 呼出元エッジ | 役割 | 移行方針 |
|---|---|---|---|
| EXEC_STMT | 609 | SQL実行 | → ORM / Prepared Statement |
| READ_ONE | 574 | 1件取得 | → Repository.FindOne() |
| DB_CONN_ALL | 422 | 全DB接続 | → DI / Connection Pool |
| DB_DISCONN_ALL | 416 | 全DB切断 | → Using / IDisposable |
| READ_SET | 291 | 結果セット取得 | → Repository.FindAll() |
| READ_NXT | 291 | カーソル移動 | → IEnumerable / foreach |
| COMMIT | 266 | トランザクション確定 | → UnitOfWork |
| DB_INITALIZE | 212 | DB初期化 | → DI Container |
| SQL_FATAL | 210 | エラーハンドリング | → Exception Middleware |
| PUBS_ADOCONNECT | 43 | ADO接続 | → EF Core / Dapper |
3.5 視点5: システム分類(業務機能)
取得状況: プログラム名のプレフィックス規則と仕様書の feature_label メタデータから業務機能を 推定分類 した。ただし、業務担当者へのヒアリングや業務フロー図は 未取得 のため、分類の正確性は確認できていない。特に「その他 426本」の分類は、業務知識に基づく確認が必要である。
業務機能別プログラム分類
| プレフィックス | 業務機能 | PGM数 | 主要テーブル | 重要度 |
|---|---|---|---|---|
| KN | 検針管理 (Metering) | 73 | KN010, KN030, KN060 | 最高 |
| KY | 契約管理 (Contract) | 46 | KY110, KY130, KY400 | 最高 |
| CH | 帳票基盤 (Reporting) | 60 | CH5D0, CH60C | 高 |
| KJ | 工事管理 (Work Mgmt) | 18 | SB080, SB110, SB120 | 高 |
| SB | 設備台帳 (Facility) | 10 | SB080 | 中 |
| HZ | 保全計画 (Maintenance) | 10 | — | 中 |
| RY | 料金計算 (Charging) | 10 | HN050 | 中 |
| SM | 検針受信 (Smart Meter) | 9 | — | 高 |
| RN | 連携基盤・共通 (ESB) | 11 | RN920 | 最高 |
| GS | 図面・GIS (GIS) | 5 | — | 中 |
| TD | 停電管理 (Outage) | 4 | KJ011 | 中 |
| MS | マスタ管理 (Master) | 2 | SB020, SB710 | 中 |
| その他 | 未分類・DFD参照 | 426 | — | 要調査 |
業務ラベル(feature_label)による詳細分類
仕様書の 97.3% (239/246件)、プログラムの 62.2% (371/596件) に業務ラベルが付与されている。
| 業務ラベル | PGM数 | 業務カテゴリ |
|---|---|---|
| 新帳票システムフロー | 39 | レポートシステム全体 |
| 未完了受信データ処理 | 36 | 検針受信後処理 |
| SM020B.BAT | 11 | スマメ新受信データ |
| 託送計量データ処理 | 8 | 顧客別契約 |
| 高圧需要家データ処理 | 7 | 顧客別契約 |
| 供給地点手配マスタ一覧処理 | 6 | マスタ管理 |
| 設備保全計画通知処理 | 6 | 需給調整対応 |
| 契約データ統合処理 | 5 | 契約統合 |
ユニーク業務ラベル数: プログラム 212種類 / 仕様書 252種類
クリティカルシステム(依存度 Top 10)
| プログラム | In | Out | Total | 言語 | 業務機能 | 移行優先度 |
|---|---|---|---|---|---|---|
| EXEODBC | 209 | 5,835 | 6,044 | VB6 | ODBC共通 | Phase 1 |
| VZY110 | 117 | 461 | 578 | VB6 | 共通ユーティリティ | Phase 1 |
| VKNFC4 | 17 | 395 | 412 | VB6 | 託送計量 | Phase 2 |
| VKNFC0B | 7 | 349 | 356 | VB6 | 託送計量 | Phase 2 |
| VKNAT0B | 7 | 323 | 330 | VB6 | 高圧需要家 | Phase 2 |
| CKN920 | 4 | 287 | 291 | COBOL | 料金CIS共通 | Phase 2 |
| VKNBB0 | 12 | 276 | 288 | VB6 | 特別高圧需要家 | Phase 2 |
| CKNAV0 | 2 | 282 | 284 | COBOL | 料金CIS表示 | Phase 2 |
| CKNG10 | 5 | 265 | 270 | COBOL | 料金CIS共通 | Phase 2 |
| CKNBB0 | 5 | 257 | 262 | COBOL | 特別高圧需要家 | Phase 2 |
判定: EXEODBC(依存度 6,044)と VZY110(依存度 578)の2つが突出したハブ。これらを Phase 1 で API 化することが、全体移行の ゲートオープン条件。
統合候補(類似プログラムグループ)
| グループ | 件数 | 類似パターン | 統合後の推定PGM数 |
|---|---|---|---|
| CJK0系 (レポート) | 8 | CJK0C8, CJK0G1〜G7 | 1-2 |
| CJK5系 (レポート) | 4 | CJK5A0〜5D0 | 1 |
| VKN903系 (料金CIS) | 6 | 共通処理バリアント | 1-2 |
| VKNAB〜AI系 | 24 | 各3バリアント×8グループ | 8 |
| 統合候補合計 | 94 | — | 推定 30-40 |
94本の統合候補を集約することで、移行対象プログラム数を 約60本削減 できる可能性がある。
3.6 5視点 総合サマリー
| 視点 | データ取得状況 | 暫定評価 | 根拠(取得済データに基づく) | 今後の更新ポイント |
|---|---|---|---|---|
| データフロー | ◎ 静的解析済 | 移行適性:高 | テーブル結合が疎(共有2件)、SELECT比率49% | DDL取得後にテーブル定義を補完 |
| 利用実態 | △ ログ未取得 | 評価保留 | 静的分類のみ実施。仕様書カバー63% | 本番ログ取得が最優先 |
| データ利用 | ○ ODBC静的解析済 | リスク:高 | 42 DSN、ExeOdbc 104コピー、Win32直呼出 | DSN接続先・データ量の確認 |
| 技術資産 | ◎ バイナリ解析済 | リスク:極高 | VB6+COBOL=98.7%、VB6 RT 140本 | 正本EXE照合・COM依存抽出 |
| システム分類 | ○ 命名規則で推定 | 移行適性:中(暫定) | 212業務ラベル、94統合候補 | 業務担当者による分類確認 |
暫定スコアカード(取得済データに基づく評価)
総合判定: 静的解析の範囲では段階的モダナイゼーションは【実行可能】。ただし利用実態の確認(本番ログ)が戦略確定の前提条件。
3.7 Gap分析 — 完全評価に必要な追加データ
以下のデータが取得されることで、各視点の評価精度が大幅に向上する。
視点別 Gap 一覧
| 視点 | 不足データ | 取得元 | 優先度 | 取得時のインパクト |
|---|---|---|---|---|
| データフロー | テーブルDDL(645テーブルの完全定義) | 本番DB | 最高 | CRUD解析の精度が177→645テーブルに拡大 |
| データフロー | ファイル経由データフローの完全マッピング | DAT/TXT 169件の解析 | 高 | プログラム間の隠れた依存関係を可視化 |
| データフロー | COBOL EXEC SQL のパース精度向上 | 解析ツール改善 | 中 | 誤検出テーブル名(__, 1等)の排除 |
| 利用実態 | 本番ジョブスケジュール定義 | タスクスケジューラ/JP1 | 最高 | 実行頻度・実行順序・依存関係の確定 |
| 利用実態 | 本番プロセス実行ログ(直近3-6ヶ月) | イベントログ | 最高 | デッドコード410本の精査→移行対象確定 |
| 利用実態 | GUIプログラムの利用頻度 | 操作ログ | 中 | UI移行の優先順位決定 |
| データ利用 | DSN接続先サーバー/ポート情報 | ODBC設定/odbcinst.ini | 高 | 42 DSNの物理配置マッピング |
| データ利用 | 各テーブルのレコード数・データ量 | 本番DB | 高 | DB移行の容量計画・パフォーマンス設計 |
| データ利用 | TBDB.ini の全設定値 | 本番サーバー | 中 | ODBC エイリアスの完全な解決 |
| 技術資産 | VB6 Runtime 正確なバージョン(SP6等) | EXE詳細解析 | 中 | 互換性リスクの正確な評価 |
| 技術資産 | COM/OCX コンポーネント依存一覧 | VBP参照解析 | 高 | サードパーティ依存の把握 |
| 技術資産 | ExeOdbc 104コピー間の差分 | ハッシュ比較 | 高 | コピー間に差異があれば個別対応が必要 |
| 技術資産 | COBOL コンパイラバージョン | 本番環境 | 中 | Raincode等への移行互換性確認 |
| システム分類 | 業務フロー図(As-Is) | 業務担当者 | 最高 | 機能単位での移行計画の精緻化 |
| システム分類 | 顧客別プログラム分類の確定 | 業務担当者 | 高 | 低圧需要家/小売事業者/託送事業者等の顧客別移行順序 |
| システム分類 | データ保持期間ポリシー | 業務ルール | 中 | DB移行時のアーカイブ戦略 |
最優先取得データ(Phase 0 で必須)
[必須データ 優先度: 最高]
1. 本番ジョブスケジュール定義
→ 596本のうち実稼働本数を確定
→ 移行対象の最終決定
2. 本番DB DDL(全テーブル定義)
→ 645テーブルの完全な型定義
→ 移行先DBスキーマ設計の基盤
3. 本番EXE SHA256 照合
→ 144 EXE の正本バージョン確定
→ 9プログラムの複数バージョン問題の解決
4. 業務フロー図(As-Is)
→ 212業務ラベルの上位構造化
→ 移行ウェーブの最適順序決定
5. 本番実行ログ(直近3-6ヶ月)
→ デッドコード410本の精査
→ 実行頻度に基づくリスク評価
4. 追加調査が必要な情報
4.1 本番環境ログから得たい情報
| 調査項目 | 目的 | 得られるインサイト |
|---|---|---|
| プログラム実行頻度 | 各プログラムの日次/月次の起動回数 | 使われていないプログラムの特定(デッドコード除去で移行対象を削減) |
| 実行順序・依存関係 | BATファイルの実行ログから時系列を再構築 | 静的解析では見えない実行時の結合パターン |
| 実行時間 | 各バッチ処理の処理時間 | ボトルネック特定、パフォーマンス要件の定義 |
| エラー頻度 | 過去6-12ヶ月のエラーログ | 不安定なモジュールの優先修正、移行時の注意点 |
| データ量 | 各テーブルのレコード数・増加傾向 | DB設計時のスケーリング要件、インデックス戦略 |
| ユーザー操作パターン | VB6 GUI プログラムの使用頻度・画面遷移 | UI設計の優先順位、使われていない画面の特定 |
4.2 本番環境から得たいシステム情報
| 調査項目 | 目的 | 方法 |
|---|---|---|
| 正本EXEの特定 | 「どのバージョンが本番か」を確定 | 本番サーバーのEXEとdata内EXEのSHA256照合 |
| DBスキーマ定義 | テーブルの実体定義(カラム型・制約・インデックス) | SQL Server/ODBC からDDLエクスポート |
| ネットワーク構成 | DB/ファイルサーバーの配置、通信経路 | ネットワーク図、実機確認 |
| ジョブスケジューラ設定 | バッチの起動タイミング・依存関係 | タスクスケジューラ/JP1等の設定エクスポート |
| 外部システム連携 | スマメ/EDI等の外部IF仕様 | 連携仕様書、通信ログ |
| 認証・権限 | ユーザー管理、DB権限 | 現行の認証設定確認 |
4.3 お客様から得たい業務情報
| 調査項目 | 目的 |
|---|---|
| 業務フロー図 | プログラム間の関係を業務視点で理解 |
| 起動条件の正確な定義 | 日次/月次/手動の区分、依存する前処理 |
| 計画中の業務変更 | 移行と同時に変えたい業務ルール |
| 非機能要件 | レスポンスタイム、可用性、同時接続数 |
| 現行の問題点 | 日常的に困っていること、回避策 |
| 優先順位 | どのサブシステム/機能から移行したいか |
4.4 ログ調査で特に注目すべきポイント
ログ調査チェックリスト
→596本のうち実質稼働しているのは何本か?(移行対象の絞り込み)
→「バッチウィンドウ」の制約を把握(夜間処理の時間的余裕)
→メッセージキューとして機能しているなら、イベント駆動化の候補
→ODBC接続の不安定さ = 移行の緊急度指標
→排他制御の必要性、Web化時の同時アクセス設計
5. モダナイゼーション戦略
5.1 基本方針: Strangler Fig パターン
一括リプレースは 596本・約50万行のシステムではリスクが高すぎる。代わりに、依存グラフの外縁から段階的に新システムへ置換する Strangler Fig パターン を採用する。
Phase 0 ・ 3ヶ月
正本確定
Legacy 100% / New 0%
Phase 1 ・ 6ヶ月
共通基盤移行
Legacy 80% / New 20%
Phase 2 ・ 12〜18ヶ月
機能別段階移行
Legacy 40% / New 60%
Phase 3 ・ 24ヶ月
完全移行
Legacy 0% / New 100%
5.2 フェーズ詳細
Phase 0: 正本確定・基盤整備(0〜3ヶ月)
目的: 「何を移行するか」を確定し、移行の前提条件を整える。
| タスク | 詳細 | 成果物 |
|---|---|---|
| 正本EXE特定 | 本番EXE ↔ data内EXEのSHA256照合 | 正本バージョンリスト |
| Gitリポジトリ構築 | 正本ソースをinitial commit | Git リポジトリ |
| DBスキーマ取得 | 全177テーブルのDDLエクスポート | スキーマ定義書 |
| ログ調査 | 実行頻度・エラー・処理時間の計測 | 実行プロファイルレポート |
| デッドコード特定 | ログとソース突合で未使用プログラムを特定 | 除外リスト |
| 業務フロー整理 | 仕様書292本 + ヒアリングで業務フロー再構築 | 業務フロー図 |
| デモ構築 | 小規模プログラム2-3本をモダン化して実演 | デモアプリケーション |
Phase 1: 共通基盤移行(3〜6ヶ月)
目的: 全プログラムの共通基盤を新アーキテクチャに置換し、段階移行の土台を作る。
[現状] [Phase 1 完了後]
VB6 App → ExeOdbc.bas → ODBC VB6 App → API Client → REST API → 新DB層
↑ Strangler Facade
COBOL → EXEODBC-1.CBL → ODBC COBOL → EXEODBC-1.CBL → ODBC (変更なし)
| タスク | 詳細 |
|---|---|
| DB層API化 | ExeOdbc の28プロシージャを REST API として再実装 |
| API Client作成 | VB6 から呼べる COM DLL として API Client を実装(レガシー互換) |
| Shadow Test | 新旧両方でDB操作を実行し、結果を比較 |
| 共通モジュール集約 | ExeOdbc 104コピー → 1つの API に集約 |
| CDC基盤構築 | Change Data Capture でレガシー DB と新 DB を同期 |
なぜ ExeOdbc から始めるか:
- 46プロジェクトが依存 → 1つ移行すれば全体に波及
- 465行・28プロシージャ → サイズが管理可能
- ODBC API 直接呼び出し → REST API への変換が明確
- 104コピーの解消で即座に保守性が向上
Phase 2: 機能別段階移行(6〜18ヶ月)
移行順序の原則: 依存グラフの「葉」から「幹」へ。
Wave 1 ・ 6〜9ヶ月
単純バッチ・マスタメンテ
COBOLバッチ(設備系)・VB6単純CRUD / 対象 約80本(リーフ・低依存)
Wave 2 ・ 9〜12ヶ月
中核業務処理
料金CIS契約処理・設備系統展開処理 / 対象 約150本
Wave 3 ・ 12〜18ヶ月
共有テーブル関連・複雑処理
KY110共有テーブル統合・VKNFC系・BAT→ワークフローエンジン / 対象 約200本
Wave 4 ・ 18〜24ヶ月
残存分・最適化
残りの移行・レガシー停止・パフォーマンス最適化
Phase 3: 完全移行・レガシー停止(18〜24ヶ月)
| タスク | 詳細 |
|---|---|
| レガシー停止 | Shadow → Reverse Shadow → New Mode |
| ODBC廃止 | レガシーODBC接続の完全廃止 |
| インフラ最適化 | クラウドリソースの適正化 |
| 運用引き継ぎ | 運用ドキュメント・監視・アラート整備 |
5.3 移行判定マトリクス(プログラムごとの戦略決定)
各プログラムを以下の基準で4つの戦略に振り分ける:
価値 高 × 複雑度 低
Rewrite(書き直し)
◎単純CRUD・マスタメンテを新実装で刷新
価値 高 × 複雑度 高
Refactor(段階改善)
○中核業務ロジックを段階的に改善
価値 低 × 複雑度 低
Retire(廃止)
△ログで未使用が確認されたプログラムを停止
価値 低 × 複雑度 高
Wrap(API化)
変更不要だが存続必要 → API でラップして温存
縦軸=ビジネス価値、横軸=複雑度。価値が高いものは作り替え/改善、低いものは廃止/ラップに振り分ける。
| 戦略 | 条件 | 対象本数(推定) |
|---|---|---|
| Retire | ログで未使用が確認されたプログラム | ~100本 |
| Rewrite | 低複雑度 + 高価値(単純CRUD、マスタメンテ) | ~200本 |
| Refactor | 高複雑度 + 高価値(中核業務ロジック) | ~150本 |
| Wrap | 高複雑度 + 低頻度(変更不要だが存続必要) | ~139本 |
6. テクノロジースタック選定
6.1 推奨パターン比較
Pattern A: .NET + Azure(推奨 — VB6からの最短距離)
- Frontend: Blazor Server / WASM
- API: ASP.NET Core 10 Web API
- ORM: Entity Framework Core
- DB: Azure SQL Database
- Auth: Microsoft Entra ID
- Deploy: Azure App Service / AKS
- CI/CD: Azure DevOps
| 項目 | 評価 |
|---|---|
| VB6移行の容易さ | ★★★★★ — 言語・ライブラリの連続性が最高 |
| COBOL移行の容易さ | ★★★☆☆ — Raincode .NET コンパイラあり |
| エコシステム | ★★★★☆ — Microsoft 365/Dynamics連携 |
| 人材獲得 | ★★★★☆ — .NET開発者は比較的豊富 |
| 長期サポート | ★★★★★ — .NET 10 LTS (2025年11月GA) |
| 初期コスト | ★★★★☆ — VB6→C#自動変換ツール活用可能 |
VB6→C# 自動変換ツール: GAPVelocity AI(旧 Mobilize.Net、最大99%自動変換)、gmStudio(BMW 100万行実績)
Pattern B: Java + Spring Boot + AWS
- Frontend: React + TypeScript
- API: Spring Boot 3.x (Java 21+)
- ORM: Spring Data JPA / Hibernate
- DB: Amazon RDS (PostgreSQL)
- Auth: AWS Cognito / Keycloak
- Deploy: ECS / EKS
- CI/CD: GitHub Actions
| 項目 | 評価 |
|---|---|
| VB6移行の容易さ | ★★☆☆☆ — 言語差が大きく手動リライト中心 |
| COBOL移行の容易さ | ★★★★★ — AWS Blu Age で自動変換可能 |
| エコシステム | ★★★★★ — エンタープライズ最大のエコシステム |
| 人材獲得 | ★★★★★ — Java開発者は最も豊富 |
| 長期サポート | ★★★★★ — Java LTS + Spring Boot 長期サポート |
| 初期コスト | ★★★☆☆ — COBOL変換は優秀だがVB6は手動 |
COBOL→Java 自動変換ツール: AWS Blu Age、IBM watsonx Code Assistant for Z
Pattern C: TypeScript + Next.js(BFFとして部分採用)
- Frontend: Next.js (React + TS)
- API: Next.js API Routes / tRPC
- ORM: Prisma
- DB: PostgreSQL
- Auth: NextAuth.js / Auth0
- Deploy: Vercel / AWS
- CI/CD: GitHub Actions
| 項目 | 評価 |
|---|---|
| VB6移行の容易さ | ★★☆☆☆ — 全面リライト |
| COBOL移行の容易さ | ★☆☆☆☆ — ツールなし、全面リライト |
| エコシステム | ★★★☆☆ — Web特化、ERP向け成熟度低 |
| 人材獲得 | ★★★★☆ — フロントエンド人材は豊富 |
| 長期サポート | ★★★☆☆ — フレームワーク変化が速い |
| 初期コスト | ★★☆☆☆ — 全面リライトのため高コスト |
位置づけ: バックエンドは Pattern A or B として、フロントエンドのみ Next.js を採用する ハイブリッド構成 が現実的。
Pattern D: Python + FastAPI(分析・AI連携特化)
- Frontend: React + TypeScript
- API: FastAPI (Python 3.12+)
- ORM: SQLAlchemy / Alembic
- DB: PostgreSQL
- AI/ML: LangChain / PyTorch
- Deploy: AWS ECS / Lambda
- CI/CD: GitHub Actions
| 項目 | 評価 |
|---|---|
| VB6移行の容易さ | ★★☆☆☆ — 全面リライト |
| COBOL移行の容易さ | ★★☆☆☆ — 手動変換 |
| エコシステム | ★★★☆☆ — Web API特化、ERP成熟度低 |
| 人材獲得 | ★★★★★ — Python開発者は最も多い |
| 長期サポート | ★★★☆☆ — FastAPI自体は新しい |
| AI連携 | ★★★★★ — ML/AI エコシステムとの親和性最高 |
位置づけ: 分析サブシステム、AI支援機能、データパイプラインなど 特定用途のマイクロサービス として部分採用。
6.2 本案件への推奨
推奨構成
Pattern A(.NET)をコアに、必要に応じて Pattern D(Python)を併用。
理由:
- VB6 が全体の66%を占め、.NET への移行パスが最も確立されている
- VB6→C# 自動変換ツール(GAPVelocity AI)で移行コスト大幅削減
- COBOL 34% は Raincode .NET コンパイラで .NET 上で実行可能(段階移行中の互換性確保)
- 既存の ODBC/SQL Server 資産と Azure SQL の親和性
- 将来の AI/ML 連携は Python マイクロサービスで対応
代替案: COBOL が主体であれば Pattern B (Java + AWS Blu Age) を推奨。
7. 実行ステップ
7.1 全体タイムライン
Phase 0 ・ 1〜3ヶ月目
正本確定
正本確定・ログ調査・DB取得・デモ構築・業務整理
Phase 1 ・ 3〜7ヶ月目
共通基盤移行
API設計・ExeOdbc移行・CDC構築・Shadowテスト
Phase 2 ・ 7〜18ヶ月目
機能別段階移行
Wave 1〜3 を順次実行・パラレルランで差分検証
Phase 3 ・ 18〜24ヶ月目
完全移行
レガシー切り替え・最適化
7.2 Phase 0 の詳細手順
Step 1 ・ Week 1–4
正本特定
入力: 本番EXEパス一覧 / 処理: SHA256を data 内144 EXEと照合 / 出力: 正本バージョンマッピング表
Step 2 ・ Week 1–4(並行)
ログ調査
入力: イベントログ・.log・スケジューラ履歴・DB監査ログ / 処理: 実行回数/時間/エラー率/未使用の集計 / 出力: 実行プロファイルレポート
Step 3 ・ Week 2–3
DBスキーマ取得
入力: 本番DB接続情報 / 処理: DDL(表/ビュー/索引/制約/SP)エクスポート / 出力: 177テーブルの完全スキーマ定義
Step 4 ・ Week 3–8
デモ構築
→ セクション8で詳述
Step 5 ・ Week 1–12
業務フロー整理
入力: 仕様書246本+ヒアリング / 処理: 機能単位のフロー図作成 / 出力: 業務フロー図(サブシステム×機能)
8. テスト戦略
8.1 テストの4段階
図を読み込み中…
8.2 デグレード防止の核心: データ比較テスト
移行で最も重要なのは 「同じ入力に対して同じ出力が得られること」 の証明。
図を読み込み中…
実装方法:
# 概念コード: データ比較テストフレームワーク
class ReconciliationTest:
def run(self, test_case: TestCase):
# 1. テストデータ投入
self.setup_test_data(test_case.input_data)
# 2. レガシーシステムで実行
legacy_result = self.run_legacy(test_case)
# 3. 新システムで実行
modern_result = self.run_modern(test_case)
# 4. 比較
diff = self.compare(legacy_result, modern_result)
# 5. 差分の分類
for d in diff:
if d.is_intentional: # 意図的な改善(例: 精度向上)
d.mark_as_accepted()
elif d.is_cosmetic: # 表示差異(例: 日付フォーマット)
d.mark_as_known()
else: # 予期しない差分 → 要修正
d.mark_as_regression()
8.3 テストフェーズ別の詳細
単体テスト(新システム側)
| 項目 | 内容 |
|---|---|
| カバレッジ目標 | 80%以上(ビジネスロジック部分は95%以上) |
| ツール | xUnit (.NET) / JUnit (Java) |
| 範囲 | 各関数・メソッドの入出力 |
| 特記 | レガシーのテストは存在しないため、新コードに対してのみ実施 |
機能テスト(E2E)
| 項目 | 内容 |
|---|---|
| カバレッジ | 全業務シナリオの主要パス |
| ツール | Playwright (Web UI) + API テスト (REST Assured / Postman) |
| 範囲 | 1機能の入力から出力までの全フロー |
| データ | 本番データのマスク版を使用 |
結合テスト
| 項目 | 内容 |
|---|---|
| 範囲 | サブシステム間連携、バッチ処理チェーン |
| 重点 | 料金CIS-設備管理間の共有テーブル(特にKY110)の整合性 |
| 方法 | Shadow Mode でレガシーと並行稼働 |
| 期間 | 最低1ヶ月の並行稼働 |
受入テスト
| 項目 | 内容 |
|---|---|
| 実施者 | お客様の業務担当者 |
| 範囲 | 日常業務シナリオ + 月次・年次の特殊処理 |
| 判定基準 | 業務が滞りなく遂行できること |
| 期間 | 2週間〜1ヶ月 |
8.4 パラレルラン(並行稼働)戦略
Phase A: Shadow Mode (2-4週間)
- レガシー = Source of Truth
- 新システムは同じ入力を受けて処理するが、結果は保存しない
- 出力を比較して差分を検出・修正
Phase B: Reverse Shadow (2-4週間)
- 新システム = Source of Truth
- レガシーは検証用に並行稼働
- 差分があれば新システム側を修正
Phase C: New Mode
- 新システムのみで稼働
- レガシーは待機系として一定期間保持(ロールバック用)
Phase D: 完全停止
- 十分な安定稼働を確認後、レガシーを停止
9. リスクと対策
9.1 技術リスク
| リスク | 影響度 | 発生確率 | 対策 |
|---|---|---|---|
| ExeOdbc の挙動が完全に再現できない | 高 | 中 | Shadow Test で全SQL実行結果を比較 |
| VB6→C# 自動変換の精度が不十分 | 中 | 中 | 主要プログラムは手動レビュー、自動変換は下地として使用 |
| 文字コード問題(Shift_JIS → UTF-8) | 中 | 高 | 変換テーブルを網羅的にテスト、特にCP932固有文字 |
| 暗黙的なビジネスルール(コードにしかない仕様) | 高 | 高 | Claude Code でソース分析 + 業務担当者へのヒアリング |
| 本番DBスキーマとソースの乖離 | 中 | 中 | DDLエクスポートとソース内SQLの突合 |
9.2 プロジェクトリスク
| リスク | 影響度 | 発生確率 | 対策 |
|---|---|---|---|
| 業務知識の属人化 | 高 | 高 | 早期のヒアリング、ドキュメント化 |
| 移行期間の長期化 | 中 | 中 | Wave単位のマイルストーン管理、各Waveの独立デプロイ |
| 並行稼働のコスト | 中 | 確実 | CDC基盤で自動同期、手動運用を最小化 |
| レガシー開発者の退職 | 高 | 中 | 早期の知識移転、AI支援による理解加速 |
9.3 ビジネスリスク
| リスク | 影響度 | 発生確率 | 対策 |
|---|---|---|---|
| 移行中の業務停止 | 極高 | 低 | Strangler Fig で段階移行、ロールバック計画 |
| VB6ランタイムのWindows非対応 | 高 | 中 | Phase 1 で VB6 の DB 依存を API 化し、影響を局所化 |
| コスト超過 | 中 | 中 | Phase 0 のデモで見積り精度を向上 |
次のアクション
お客様の協力が必要
- [ ] 本番サーバーへのアクセス(正本EXE照合、ログ取得)
- [ ] DBスキーマのエクスポート
- [ ] 業務担当者へのヒアリング(起動条件、業務フロー)
- [ ] 移行優先度の確認(どのサブシステムから?)
判断が必要な事項
- [ ] テクノロジースタックの選定(推奨: Pattern A .NET + Azure)
- [ ] 移行スコープの確定(料金CISのみ先行 or 料金CIS+設備管理同時)
- [ ] デモの対象プログラムの確認
- [ ] 予算・体制・タイムラインの合意