mcpField
C
cobol-migration-analyzer

cobol-migration-analyzer

github.com/dauquangthanh開発1775 回インストール40 週間前に更新
リポジトリ

cobol-migration-analyzer について

レガシー COBOL と JCL の Java 移行を検討するチーム向けのスキルです。プログラム構造と依存関係を抽出し、copybook から Java クラスを生成して、付属スクリプトで移行の複雑さを見積もります。

主な機能

  1. 01COBOL の構造とロジック抽出
  2. 02JCL ジョブと依存関係の分析
  3. 03copybook から Java POJO を生成
  4. 04コードベース全体の依存グラフ
  5. 05移行の複雑さを見積もり

活用シーン

  1. 01COBOL と JCL 資産の棚卸し
  2. 02copybook を Java データクラスに変換
  3. 03移行前の依存関係の把握
  4. 04移行工数とリスクの見積もり

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dauquangthanh/hanoi-rainbow --skill cobol-migration-analyzer

インストール後、Claude Code で/cobol-migration-analyzerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
java-class-template.java
migration-report-template.md
references/
messaging-integration.md
performance-patterns.md
pseudocode-cobol-rules.md
pseudocode-common-rules.md
testing-strategy.md
transaction-handling.md
scripts/
analyze-dependencies.ps1
analyze-dependencies.sh
estimate-complexity.py
extract-structure.py
generate-java-classes.py

詳細

COBOL 移行アナライザー

レガシー COBOL プログラムと JCL スクリプトを分析し、Java への移行に備えます。ビジネスロジック、データ構造、依存関係を抽出して、実行可能な移行戦略を作成します。

主な機能

1. COBOL プログラムの分析

COBOL の各部(IDENTIFICATION、ENVIRONMENT、DATA、PROCEDURE)、Working-Storage 変数、ファイル定義(FD)、ビジネスロジックの段落、PERFORM 文、CALL 階層、埋め込み SQL、エラー処理パターンを抽出します。

2. JCL ジョブの分析

JCL のジョブステップ、プログラム呼び出し、データ依存関係(DD 文)、条件ロジック(COND、IF/THEN/ELSE)、リターンコード、リソース要件を解析します。

3. Copybook の処理

レベル番号、REDEFINES 節、グループ項目、OCCURS 節、PICTURE 節を含むレコードレイアウトを抽出します。Copybook 構造から Java POJO を生成します。

4. 依存関係のマッピング

コードベース全体の CALL 階層、Copybook の使用状況、ファイル依存関係、データベーステーブルへのアクセス、共有ユーティリティへの参照を示す、完全な依存関係グラフを作成します。

ワークフロー

ステップ 1:COBOL 資産を検出する

COBOL プログラム、JCL ジョブ、Copybook を検索します。

find . -name "*.cbl" -o -name "*.CBL" -o -name "*.cob"
find . -name "*.jcl" -o -name "*.JCL"
find . -name "*.cpy" -o -name "*.CPY"

scripts/analyze-dependencies.sh または scripts/analyze-dependencies.ps1 を使用して、依存関係グラフを生成します。

ステップ 2:構造を抽出する

scripts/extract-structure.py を使用して COBOL プログラムを解析し、各部、変数、段落、依存関係を JSON 形式で抽出します。

ステップ 3:Java コードを生成する

scripts/generate-java-classes.py を使用して、Copybook を適切なデータ型と Bean Validation アノテーションを備えた Java POJO に変換します。

ステップ 4:複雑さを見積もる

scripts/estimate-complexity.py を使用して、コード行数、外部呼び出し、ファイル操作、SQL 文、制御フローに基づいて移行の複雑さを算出します。

ステップ 5:移行戦略を作成する

プログラムの概要、依存関係、データ構造、ビジネスロジックのパターン、提案する Java 設計、移行の見積もり、対応項目を文書化します。

クイックリファレンス

COBOL から Java への型マッピング
COBOL の PICTUREJava の型備考
PIC 9(n)int、long、BigInteger符号なし数値
PIC S9(n)int、long、BigInteger符号付き数値
PIC 9(n)V9(m)BigDecimal符号なし小数
PIC S9(n)V9(m)BigDecimal符号付き小数
PIC S9(n)V9(m) COMP-3BigDecimalパック十進数 — 精度が非常に重要です!
PIC S9(n) COMP / BINARYint、longバイナリ格納
PIC S9(n) COMP-1float単精度(金融用途では避けてください)
PIC S9(n) COMP-2double倍精度(金融用途では避けてください)
PIC X(n)String英数字/文字
PIC A(n)String英字のみ
PIC N(n)String国別文字/Unicode
OCCURS nList<T> または T[]固定長配列/テーブル
OCCURS n DEPENDING ONList<T>可変長配列
88 levelenum または定数条件名
INDEXintテーブルインデックス(COBOL では 1 始まり)
一般的なパターンの変換
  • ファイル I/O:READ...AT END → try-with-resources を使用した BufferedReader または NIO ストリーム
  • ファイルの更新:REWRITE → データベースまたはファイルシステムでの更新操作
  • テーブル検索:SEARCH → ストリームを使った線形検索
  • 二分探索:SEARCH ALL → Collections.binarySearch() または stream().filter().findFirst()
  • 文字列操作:STRING/UNSTRING → StringBuilder または String.split()
  • 検査:INSPECT → String.replace()、replaceAll()、または正規表現
  • CALL 文:→ メソッド呼び出しまたはサービス呼び出し
  • EVALUATE:→ switch 文(Java 14 以降では拡張 switch)
  • 日付演算:FUNCTION INTEGER-OF-DATE → LocalDate の操作
  • ACCEPT DATE/TIME:→ LocalDate.now()、LocalTime.now()
  • 条件名(Level 88):→ enum または型付き定数
  • 計算式 GO TO:→ ストラテジーパターンまたは switch 文
  • REDEFINES:→ 共用体型、ByteBuffer ビュー、または個別のアクセサークラス
  • COPY 文:→ パッケージインポートまたは共有エンティティクラス
例:Copybook から Java POJO への変換

COBOL Copybook:

01  EMPLOYEE-RECORD.
    05  EMP-ID        PIC 9(6).
    05  EMP-NAME      PIC X(30).
    05  EMP-SALARY    PIC S9(7)V99 COMP-3.

生成された Java:

public class EmployeeRecord {
    private int empId;
    private String empName;
    private BigDecimal empSalary;
    // getters/setters
}

移行時の考慮事項

重要なパターン:

  1. 必ず COMP-3 および小数を含む数値には BigDecimal を使用します(float/double は使用しないでください)
  2. 精度を維持する:財務計算には正確なスケールを指定した BigDecimal を使用します
  3. 1 始まりのインデックス:COBOL の配列は 1 から始まり、Java では 0 から始まることを明記します
  4. 暗黙の変換:COBOL の自動的な数値↔文字列変換を明示的にします
  5. REDEFINES:共用体型、ByteBuffer オーバーレイ、または個別のビュークラスとしてモデル化します
  6. 計算式 GO TO:ストラテジーパターンまたは switch 文にリファクタリングします
  7. ALTER 文:構造化された制御フロー(if/while/switch)にリファクタリングします
  8. PERFORM THRU:段落の範囲全体を含む単一のメソッドに対応付けます
  9. BY REFERENCE と BY CONTENT:パラメーターの受け渡しのセマンティクスを明記します
  10. 厳密にテストする:特に COMP-3 について、本番データのサンプルで検証します

出力要件:

  • プログラムの概要と型の分類
  • 完全な依存関係グラフ(CALL ツリー、copybook、ファイル、DB テーブル)
  • データ構造のマッピング(copybook → Java クラス)
  • ビジネスロジックの概要(主要な段落 → メソッド)
  • 提案する Java アーキテクチャ(サービス、リポジトリ、エンティティ)
  • 移行工数の見積もり(複雑度スコア、LOC、リスク要因)
  • 優先順位を付けたアクション項目

高度なトピック

詳細な変換ルールとパターンについては、以下を参照してください。

  • pseudocode-cobol-rules.md - データ型、文、ファイル操作、文字列操作、テーブル操作、プログラム制御、変換パターン、よくある落とし穴を含む、COBOL から疑似コードへの包括的な変換ルール
  • pseudocode-common-rules.md - すべての言語に適用される、疑似コードの共通構文と規約
  • transaction-handling.md - CICS/IMS から Java へのトランザクション管理とロールバック戦略
  • messaging-integration.md - メッセージキューと非同期パターン(MQ、CICS キューから JMS/Kafka への移行)
  • performance-patterns.md - バッチ処理の最適化とメモリ管理
  • testing-strategy.md - 単体テスト、統合テスト、並列検証、データ駆動テストを含む包括的なテスト

ツールとスクリプト

すべてのスクリプトはクロスプラットフォームで実行できます(Windows PowerShell、bash)。

  • analyze-dependencies.sh/ps1 - 依存関係グラフを生成します
  • extract-structure.py - COBOL の構造を解析して JSON に変換します
  • generate-java-classes.py - copybook を Java POJO に変換します
  • estimate-complexity.py - 移行の複雑度スコアを算出します

スクリプトは標準ライブラリのみを使用し、CI/CD パイプラインに簡単に統合できるよう JSON を出力します。

コメント