モダナイゼーションの進め方

モダナイゼーション実行プレイブック

対象: 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(料金・顧客情報)287143VB6 + COBOL
設備管理(送配電設備)13354COBOL (バッチ主体)
共有テーブル11

サブシステム間共有テーブル(実業務データ):

テーブル料金CIS側操作設備管理側操作リスク
KY110R/W/U/D (5プログラム)R/D (6プログラム) — 両側から書き込み
KY130R/W/D (1プログラム)R (3プログラム)中 — 料金CISのみ書き込み
MS210R (1プログラム)R (8プログラム)低 — 読み取りのみ
MS220R (1プログラム)R (3プログラム)低 — 読み取りのみ
SB080/SB110/SB120RR低 — 読み取りのみ
HZ010/HZ110/HZ510RR低 — 読み取りのみ
SB710RR低 — 読み取りのみ

判定: 共有テーブル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):

プログラム言語発信受信行数役割
EXEODBCVB63,235209465DB接続共通層
VKNFC4VB639217908設備管理変換処理
VZY110VB633911791ログ・レポート共通層
CKN920COBOL2874499料金CISマスタ処理
CKNAV0COBOL28221,510料金CIS照会処理
CKNG10COBOL2655494料金CIS帳票処理
CKNBB0COBOL2575770料金CIS請求処理
VKNAM1VB622713766マスタ一覧画面
CKNBC0COBOL2264773料金CIS請求処理
CSBAN1COBOL2242953工事処理

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操作の全体像

操作エッジ数構成比移行時の留意点
SELECT65749.3%読み取り専用 → 移行リスク低
UPDATE47135.4%更新ロジックの正確な移植が必要
INSERT15211.4%データ整合性制約の確認必要
DELETE523.9%カスケード削除の影響範囲確認
合計1,332100%

所見: SELECT が約半数を占め、UPDATE が 35%。INSERT/DELETE は比較的少なく、多くのプログラムが「読み取り + 更新」パターンであることを示す。これは段階移行において、読み取り側プログラムを先行移行できる構造。

ハブテーブル分析(依存集中度 Top 10)

順位テーブル合計CRUDRWUDアクセスPGM数推定業務機能移行リスク
1RN9202491872159054ステータス管理/ログ制御極高
2KY110802419181911契約データ本体
3KN060269017010料金CIS
4KY1301885054契約(低圧需要家定期)
5KN0301890903料金CIS
6RCVHIST17314003受信履歴
7KNDJ01788012料金CIS(試験)
8KN0101361062料金CIS
9KNDI01363312料金CIS(ディスプレイ)
10KJ0111280403供給

最重要テーブル: 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 バッチ186219205,93740.7%BAT起動・スケジューラ(推定)
VB6 モジュール (.bas)157466246,85548.8%EXE実行(推定)
VB6 プロジェクト (.vbp)721348,3111.6%EXE ビルド単位
VB6 GUI フォーム (.frm)101237,9287.5%ユーザー操作(推定)
Windows BAT16204,7590.9%オーケストレーション
VB.NET661,6620.3%EXE (.NET 3.5)
SQL スクリプト8111420.0%DB直接実行(推定)
分類不能2310EXEのみ/パス不明

※「実行形態」列はファイル種別からの推定であり、本番ジョブ定義による確認は 未実施

注目ポイント:

  • GUIプログラムは10本のみ — ファイル拡張子(.frm)から判別。実際の利用頻度は 未取得
  • VB.NETは6本のみ — VKN070B 1プロジェクトに集約。.NET移行の先行事例として活用可能
  • 分類不能 231本 — ソースパスが不明(EXEのみ存在、または仕様書のみで紐づくプログラム)。本番環境調査で正体確認が必要

仕様書カバレッジ

仕様書カバレッジ(採点対象 596本)

仕様書あり
377本(63.2%)
仕様書なし
219本(36.8%)
区分件数割合移行への影響
仕様書あり37763.2%仕様照合による正確な移行が可能
仕様書なし21936.8%ソースコードのみから仕様を逆算する必要あり

判定: 63%のカバレッジは同規模のレガシーシステムとしては 比較的良好。ただし37%の仕様欠損プログラムに対しては、AI支援によるソース解析 + 業務担当者ヒアリングの併用が必要。

デッドコード候補(静的解析による暫定判定)

分類件数判定根拠
他PGMからの呼出なし441依存グラフの入力エッジが file ノードのみ(静的解析)
data内検針受信ログで名前確認118提供されたdata内のログファイルにプログラム名が出現
デッドコード候補(暫定)323441 − 118。本番実行ログによる精査は未実施

注意: 上記はソースコードの静的依存関係のみに基づく暫定判定である。本番ジョブスケジューラの実行ログが 未取得 のため、実際に稼働していないプログラムの確定はできていない。本番ログ取得後、デッドコードの最終判定と移行対象の絞り込みを行う。

BATオーケストレーション構造(ソースコードから抽出)

BATファイル起動PGM数実行頻度機能
CHP060TB17未取得レポート生成パイプライン
CHP03TPB4未取得契約データ処理
その他BAT1-3未取得個別処理起動

※ 実行頻度(日次/月次/随時)はジョブスケジューラ定義が 未取得 のため記載できていない。

本視点で今後取得が必要なデータ

本視点の完全な評価には以下が必須であり、現時点では いずれも未取得 である:

必要データ取得元取得後に可能になる評価
プログラム実行頻度(日次/月次)ジョブスケジューラ/イベントログ実稼働プログラムの確定
アプリ実利用時間プロセス実行ログ利用率に基づく移行優先度
GUIプログラムの操作ログアプリケーションログUI移行の優先順位
バッチ処理時間実行ログボトルネック特定
エラー頻度エラーログ不安定モジュールの優先修正

3.3 視点3: データ利用・参照分析(技術リスク)

取得状況: ソースコード内のODBC API呼出・DSN参照・TBDB.ini設定ファイルを静的解析し、ODBC接続構成を抽出した。ただし、各DSNの 実際の接続先サーバー/ポート情報 および テーブルのレコード数・データ量 は本番DB環境が 未取得 のため含まない。DSN名称からの用途推定は命名規則に基づく暫定的なものである。

ODBC インフラストラクチャ全体像

図を読み込み中…

DSN 接続頻度(上位10 — ソースコード内の参照数)

順位DSN名ソース内参照数接続先サーバー用途
1TBFDB777未取得未確認
2TBRDB699未取得未確認
3TB5DB610未取得未確認
4TB8DB596未取得未確認
5TB7DB572未取得未確認
6TB4DB551未取得未確認
7TBHDB514未取得未確認
8TB2DB503未取得未確認
9TBSDB413未取得未確認
10TBADB378未取得未確認

所見: ソースコード・TBDB.ini から30の本番系DSN名を抽出した。TBFDB が最もソース内参照が多い(777件)。テスト系7 + 外部系5を含む計42のDSNが存在する。各DSNの実際の接続先サーバー・ポート情報は 本番ODBC設定が未取得のため不明

仕様書フォーマット分析

形式件数構成比移行への影響
.xlsx (Excel 2007+)21888.6%構造化抽出可能(openpyxl等)
.xls (Excel 97-2003)197.7%レガシー形式だが読取可能
.pdf93.7%OCR/テキスト抽出が必要
合計246100%

判定: 約96%がExcel形式 — プログラムによる自動解析・仕様抽出が現実的。PDF 9件は手動確認が必要。

外部データファイル

種類件数主な用途
.txt105検針受信データ、ログ出力
.dat44バッチ処理中間データ
.tab16テーブルデータ
.csv4エクスポートデータ
.mdb (Access)6開発時テストDB
合計175

3.4 視点4: 技術資産(技術リスク)

取得状況: ソースコードのファイル種別・行数、EXEバイナリのPEヘッダ解析、VBPファイルのバージョン情報から技術構成を抽出した。ただし、本番で稼働しているEXEとの SHA256照合は未実施(本番EXE未取得)のため、正本バージョンは未確定。COM/OCXコンポーネント依存の網羅的な抽出も未完了。

言語別コード量

言語LOCPGMファイル数LOC/ファイル構成比
VB6 (.bas)246,85546653048.8%
COBOL (.cbl/.cob)205,93721994040.7%
VB6 Form (.frm)37,928123,1617.5%
VB6 Project (.vbp)8,311134621.6%
Windows BAT4,759202380.9%
VB.NET1,66262770.3%
SQL14211130.0%
合計505,594868100%

言語構成(LOC比率)

VB6系
58.0%(293,094行)
COBOL
40.7%(205,937行)
その他
1.3%(6,563行)

所見: VB6系(.bas + .frm + .vbp)が 58%、COBOLが 40.7% で合計 98.7%。VB.NET/BAT/SQLは合わせて1.3%のみ。実質的に VB6 + COBOL の2言語システム

ランタイム分析(144 EXE バイナリ解析)

ランタイムEXE数構成比サポート状況
VB6 Runtime14097.2%延長サポート終了。Windows互換性リスク
.NET CLR (v3.5)32.1%.NET 3.5 — サポート終了、要アップグレード
Native Win3210.7%OS依存度高

最重要リスク: 140本のEXEが VB6 Runtime に依存。Microsoft の VB6 Runtime サポートは Windows 11 までの互換性保証 にとどまり、将来のOSで動作しなくなるリスクがある。

バージョン管理状況

項目数値所見
複数バージョン存在するPGM9VBPファイルのバージョン情報から検出
最多バージョンVKNAT0B (6バージョン)1.00〜1.13
正本不明(EXE照合未実施144本番EXEが 未取得 のため照合できていない

バージョン重複詳細:

プログラムバージョン数範囲リスク
VKNAT0B61.00→1.13高 — どれが正本か不明
VKNBB0B41.01→2.03
VKNFC0B41.00→1.08
VKNBA0B31.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_STMT609SQL実行→ ORM / Prepared Statement
READ_ONE5741件取得→ Repository.FindOne()
DB_CONN_ALL422全DB接続→ DI / Connection Pool
DB_DISCONN_ALL416全DB切断→ Using / IDisposable
READ_SET291結果セット取得→ Repository.FindAll()
READ_NXT291カーソル移動→ IEnumerable / foreach
COMMIT266トランザクション確定→ UnitOfWork
DB_INITALIZE212DB初期化→ DI Container
SQL_FATAL210エラーハンドリング→ Exception Middleware
PUBS_ADOCONNECT43ADO接続→ EF Core / Dapper

3.5 視点5: システム分類(業務機能)

取得状況: プログラム名のプレフィックス規則と仕様書の feature_label メタデータから業務機能を 推定分類 した。ただし、業務担当者へのヒアリングや業務フロー図は 未取得 のため、分類の正確性は確認できていない。特に「その他 426本」の分類は、業務知識に基づく確認が必要である。

業務機能別プログラム分類

プレフィックス業務機能PGM数主要テーブル重要度
KN検針管理 (Metering)73KN010, KN030, KN060最高
KY契約管理 (Contract)46KY110, KY130, KY400最高
CH帳票基盤 (Reporting)60CH5D0, CH60C
KJ工事管理 (Work Mgmt)18SB080, SB110, SB120
SB設備台帳 (Facility)10SB080
HZ保全計画 (Maintenance)10
RY料金計算 (Charging)10HN050
SM検針受信 (Smart Meter)9
RN連携基盤・共通 (ESB)11RN920最高
GS図面・GIS (GIS)5
TD停電管理 (Outage)4KJ011
MSマスタ管理 (Master)2SB020, SB710
その他未分類・DFD参照426要調査

業務ラベル(feature_label)による詳細分類

仕様書の 97.3% (239/246件)、プログラムの 62.2% (371/596件) に業務ラベルが付与されている。

業務ラベルPGM数業務カテゴリ
新帳票システムフロー39レポートシステム全体
未完了受信データ処理36検針受信後処理
SM020B.BAT11スマメ新受信データ
託送計量データ処理8顧客別契約
高圧需要家データ処理7顧客別契約
供給地点手配マスタ一覧処理6マスタ管理
設備保全計画通知処理6需給調整対応
契約データ統合処理5契約統合

ユニーク業務ラベル数: プログラム 212種類 / 仕様書 252種類

クリティカルシステム(依存度 Top 10)

プログラムInOutTotal言語業務機能移行優先度
EXEODBC2095,8356,044VB6ODBC共通Phase 1
VZY110117461578VB6共通ユーティリティPhase 1
VKNFC417395412VB6託送計量Phase 2
VKNFC0B7349356VB6託送計量Phase 2
VKNAT0B7323330VB6高圧需要家Phase 2
CKN9204287291COBOL料金CIS共通Phase 2
VKNBB012276288VB6特別高圧需要家Phase 2
CKNAV02282284COBOL料金CIS表示Phase 2
CKNG105265270COBOL料金CIS共通Phase 2
CKNBB05257262COBOL特別高圧需要家Phase 2

判定: EXEODBC(依存度 6,044)と VZY110(依存度 578)の2つが突出したハブ。これらを Phase 1 で API 化することが、全体移行の ゲートオープン条件

統合候補(類似プログラムグループ)

グループ件数類似パターン統合後の推定PGM数
CJK0系 (レポート)8CJK0C8, CJK0G1〜G71-2
CJK5系 (レポート)4CJK5A0〜5D01
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統合候補業務担当者による分類確認

暫定スコアカード(取得済データに基づく評価)

データフロー結合度★★★★疎結合 — 段階移行に好適
仕様書カバレッジ★★★★★63% — 補完が必要だが致命的ではない
技術リスク(ODBC)★★★★★Win32直接依存 — Phase 1で対処必須
技術リスク(RT)★★★★VB6 RT終了 — 最大の時間制約
業務整理の余地★★★★統合・廃止で大幅削減可能
利用実態評価不可本番ログ未取得のため評価不可

総合判定: 静的解析の範囲では段階的モダナイゼーションは【実行可能】。ただし利用実態の確認(本番ログ)が戦略確定の前提条件。

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.ini42 DSNの物理配置マッピング
データ利用各テーブルのレコード数・データ量本番DBDB移行の容量計画・パフォーマンス設計
データ利用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 commitGit リポジトリ
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)を併用。

理由:

  1. VB6 が全体の66%を占め、.NET への移行パスが最も確立されている
  2. VB6→C# 自動変換ツール(GAPVelocity AI)で移行コスト大幅削減
  3. COBOL 34% は Raincode .NET コンパイラで .NET 上で実行可能(段階移行中の互換性確保)
  4. 既存の ODBC/SQL Server 資産と Azure SQL の親和性
  5. 将来の 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()
python

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+設備管理同時)
  • [ ] デモの対象プログラムの確認
  • [ ] 予算・体制・タイムラインの合意

このページはお役に立ちましたか?

未来明るく電力

システム資産可視化