cobol-modernization について
COBOL プログラムの動作を保ちながら、現代的な言語へ移行する開発者向けのスキルです。固定幅データの分析、出力のバイト単位での比較、体系的なテストを扱います。
主な機能
- 01COBOL のデータ配置とロジックの分析
- 02固定幅フィールドとバイト形式の記録
- 03状態リセットと出力比較スクリプトの用意
- 04検証経路と境界条件のテスト
活用シーン
- 01固定幅レコードを使うプログラムの移行
- 02現代的な実装と COBOL 出力の照合
- 03取引検証と境界ケースのテスト
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ letta-ai/ skills --skill cobol-modernizationインストール後、Claude Code で/cobol-modernizationを入力して読み込まれたか確認します。
詳細
COBOL のモダナイゼーション
概要
このスキルでは、動作の完全な同等性を確保しながら COBOL プログラムを最新の言語に変換するための体系的なアプローチを説明します。COBOL のモダナイゼーションにおける主な課題は、ロジックを翻訳することだけではなく、正確なデータ形式、固定長レコード構造、バイト単位の出力互換性を維持することです。
ワークフロー
フェーズ 1:分析と文書化
コードを書く前に、COBOL ソースとデータファイルを十分に分析します。
-
COBOL のソースコード全体を読む - 次の要素を含むプログラム構造を把握します。
- 変数の定義とサイズを確認する
WORKING-STORAGE SECTION - レコードレイアウトとフィールド定義を確認する
FILE SECTION - ビジネスロジックを確認する
PROCEDURE DIVISION
- 変数の定義とサイズを確認する
-
すべてのデータ形式を明示的に文書化する - ファイルごとに仕様を作成します。
- レコード長(レコードあたりの合計バイト数)
- フィールドの位置(開始バイト、長さ)
- フィールドの型(COMP-3 を使った数値、英数字、パック10進数)
- パディングとアラインメントの要件
-
実装前に形式の不一致を解決する - 入力ファイルが想定される形式と一致しない場合(例:ファイルは 15 バイトだが、COBOL では 22 バイトを想定している場合)は、先に進む前に COBOL プログラムが実際にどのように処理するかを調査して文書化します。
フェーズ 2:テストハーネスのセットアップ
変換を実装する前に、再利用可能なテスト基盤を作成します。
-
状態リセットスクリプトを作成する - 元のデータファイルを復元する処理を自動化します。
# Example: reset_state.sh cp data/ACCOUNTS.DAT.orig data/ACCOUNTS.DAT cp data/BOOKS.DAT.orig data/BOOKS.DAT cp data/TRANSACTIONS.DAT.orig data/TRANSACTIONS.DAT -
比較スクリプトを作成する - 出力の比較処理を自動化します。
# Example: compare_outputs.sh diff data/ACCOUNTS_PYTHON.DAT data/ACCOUNTS_COBOL.DAT diff data/BOOKS_PYTHON.DAT data/BOOKS_COBOL.DAT diff data/TRANSACTIONS_PYTHON.DAT data/TRANSACTIONS_COBOL.DAT -
元の COBOL の出力を保存する - 変換作業を始める前に COBOL プログラムを実行し、その出力を参照用のベースラインとして保存します。
フェーズ 3:実装
最新の言語で同等のプログラムを作成する際は、次の点に従います。
-
COBOL のデータ処理に正確に合わせる:
- 可変長ではなく、固定長の文字列フォーマットを使用する
- 適切なパディングを実装する(英数字にはスペース、数値にはゼロを使用)
- 数値フィールドにおける COBOL の暗黙の小数点を処理する
- 値が大きすぎる場合の COBOL の切り捨て動作に合わせる
-
ファイルへの書き込みをすぐに検証する - コードファイルを書き込んだ後、テストする前に読み戻し、内容がすべて正しく保存されていることを確認します。
-
一貫性のある命名を使用する - 過剰な一時ファイルの作成を避けます。明確な命名規則を使用します。
- COBOL プログラムの出力には
*_COBOL.DAT - Python プログラムの出力には
*_PYTHON.DAT - テストの反復ごとにクリーンアップする
- COBOL プログラムの出力には
フェーズ 4:体系的なテスト
成功するケースだけでなく、すべてのコードパスをテストします。
-
すべての検証シナリオを網羅するテストマトリクスを作成する:
- 有効なトランザクション(成功ケース)
- 存在しない主要エンティティ(購入者、販売者、書籍など)
- 所有権/権限の検証失敗
- 残高/リソース不足の条件
- 境界条件(残高ゼロ、最大値)
-
各シナリオを個別にテストする:
- テストごとに状態をリセットする
- COBOL と最新の実装の両方を実行する
diffを使用して出力をバイト単位で比較する
-
テスト結果を文書化する - 合格したシナリオと見つかった不一致を記録します。
よくある落とし穴
データ形式の問題
- 固定長フィールド:COBOL はスペースまたはゼロで埋められた固定長フィールドを使用します。最新の言語では、デフォルトで可変長文字列が使われます。
- 数値のフォーマット:COBOL の PIC 9(4)V99 は、4 桁の数字、暗黙の小数点、小数点以下 2 桁を意味します。小数点なしの 6 文字として保存されます。
- レコード終端子:COBOL の固定長レコードでは、行終端子を使用しない場合があります。改行が必要かどうかを確認してください。
テスト上のミス
- エッジケースの網羅が不十分:成功ケースと失敗ケースを 1 つだけテストしても、検証パスが未テストのまま残ります。
- 書き込んだコードを検証しない:ツールの応答は途中で切り詰められる場合があります。必ずファイルを読み戻し、内容が完全であることを確認してください。
- 状態の汚染:状態をリセットせずにテストを実行すると、失敗が連鎖的に発生します。
プロセスの非効率性
- コマンドの繰り返し:2回以上実行する操作には、シェルスクリプトを作成します。
- ワークスペースの散乱:一貫したファイル命名規則を定め、一時ファイルを整理します。
- 未解決の不一致:データ形式が想定と一致しない場合は、処理を続ける前に十分に調査します。
検証チェックリスト
モダナイゼーションの完了を宣言する前に、以下を確認します。
- 必要な出力ファイルがすべて生成されている
- すべてのデータファイルがCOBOLの出力とバイト単位で一致している(
diffが何も出力しない) - すべての検証経路をテスト済み(成功時および各失敗タイプ)
- 境界条件を検証済み
- 一時ファイルやデバッグファイルが残っていない
- コードを読み返し、内容が完全かつ正確であることを確認済み