cobol-migration-analyzer について
レガシー COBOL と JCL の Java 移行を検討するチーム向けのスキルです。プログラム構造と依存関係を抽出し、copybook から Java クラスを生成して、付属スクリプトで移行の複雑さを見積もります。
主な機能
- 01COBOL の構造とロジック抽出
- 02JCL ジョブと依存関係の分析
- 03copybook から Java POJO を生成
- 04コードベース全体の依存グラフ
- 05移行の複雑さを見積もり
活用シーン
- 01COBOL と JCL 資産の棚卸し
- 02copybook を Java データクラスに変換
- 03移行前の依存関係の把握
- 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.javamigration-report-template.mdreferences/messaging-integration.mdperformance-patterns.mdpseudocode-cobol-rules.mdpseudocode-common-rules.mdtesting-strategy.mdtransaction-handling.mdscripts/analyze-dependencies.ps1analyze-dependencies.shestimate-complexity.pyextract-structure.pygenerate-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 の PICTURE | Java の型 | 備考 |
|---|---|---|
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-3 | BigDecimal | パック十進数 — 精度が非常に重要です! |
PIC S9(n) COMP / BINARY | int、long | バイナリ格納 |
PIC S9(n) COMP-1 | float | 単精度(金融用途では避けてください) |
PIC S9(n) COMP-2 | double | 倍精度(金融用途では避けてください) |
PIC X(n) | String | 英数字/文字 |
PIC A(n) | String | 英字のみ |
PIC N(n) | String | 国別文字/Unicode |
OCCURS n | List<T> または T[] | 固定長配列/テーブル |
OCCURS n DEPENDING ON | List<T> | 可変長配列 |
88 level | enum または定数 | 条件名 |
INDEX | int | テーブルインデックス(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
}
移行時の考慮事項
重要なパターン:
- 必ず COMP-3 および小数を含む数値には
BigDecimalを使用します(float/double は使用しないでください) - 精度を維持する:財務計算には正確なスケールを指定した
BigDecimalを使用します - 1 始まりのインデックス:COBOL の配列は 1 から始まり、Java では 0 から始まることを明記します
- 暗黙の変換:COBOL の自動的な数値↔文字列変換を明示的にします
- REDEFINES:共用体型、ByteBuffer オーバーレイ、または個別のビュークラスとしてモデル化します
- 計算式 GO TO:ストラテジーパターンまたは switch 文にリファクタリングします
- ALTER 文:構造化された制御フロー(if/while/switch)にリファクタリングします
- PERFORM THRU:段落の範囲全体を含む単一のメソッドに対応付けます
- BY REFERENCE と BY CONTENT:パラメーターの受け渡しのセマンティクスを明記します
- 厳密にテストする:特に 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 を出力します。