1. 導入:なぜNAME句が必要なのか
COBOLでJSONデータを作成する際、もっとも頭を悩ませるのが「命名規則のギャップ」です。COBOLでは伝統的にハイフン(-)を多用した命名を行いますが、Web APIやJavaScriptの世界ではキャメルケース(camelCase)やスネークケース(snake_case)が標準です。
これまでは、JSON出力用に専用の変換領域を作成し、値を詰め替えるという非常に非効率な作業が必要でした。しかし、モダンCOBOL(2002規格以降)のJSON GENERATE文のNAME句を活用すれば、COBOL側の変数名を変更することなく、出力時のJSONキー名だけをWeb側の期待する形式に変換できます。これにより、コードの保守性が飛躍的に向上します。
2. 基礎知識:JSON GENERATEとは
JSON GENERATEは、COBOLのデータ構造(グループ項目や基本項目)を、自動的にJSON形式の文字列に変換する命令です。通常、JSONのキー名はCOBOLのデータ名がそのまま使用されます。
ここで登場するNAME句は、特定のデータ項目に対して「JSON出力時のキー名」を個別に指定するための機能です。これにより、COBOLのコーディング規約を守りつつ、外部システムとの連携に必要な命名規則にも柔軟に対応できます。
3. 実装と解決策
JSON GENERATE文の直後にNAME句を記述することで、データ名と出力名をマッピングします。
書き方の基本ルールは以下の通りです。
JSON GENERATE [出力先変数] FROM [対象データ]
NAME OF [COBOL変数名] IS “[JSON上のキー名]”
END-JSON.
これにより、COBOLのソースコードを読みやすく保ちながら、相手先システムが要求するフォーマットでデータを提供することが可能になります。
4. サンプルプログラム
以下のコードは、COBOL特有のハイフン付き変数名を、Webで一般的なキャメルケースに変換して出力する例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. JSON-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
- COBOL側の変数名にはハイフンを使用
01 CUSTOMER-RECORD.
05 CUSTOMER-ID PIC X(10) VALUE “C123456789”.
05 CUSTOMER-NAME PIC X(20) VALUE “YAMADA TARO”.
01 JSON-OUTPUT PIC X(200).
PROCEDURE DIVISION.
> JSON GENERATEでNAME句を使用してマッピングを行う
JSON GENERATE JSON-OUTPUT FROM CUSTOMER-RECORD
NAME OF CUSTOMER-ID IS “customerId”
NAME OF CUSTOMER-NAME IS “customerName”
END-JSON.
> 出力結果を表示(確認用)
DISPLAY “JSON: ” FUNCTION TRIM(JSON-OUTPUT).
STOP RUN.
5. 応用・注意点:現場で陥りやすい罠
実務で活用する際、以下の点に注意してください。
1. 記述順序の注意
JSON GENERATE文に複数のNAME句を記述する場合、順番は問いませんが、すべての項目を明記する必要はありません。変更したい項目だけをNAME句で指定し、残りは自動的にCOBOLのデータ名が採用されます。
2. 文字列の長さ
JSON GENERATEで生成される文字列は、指定した出力先変数の長さを超えると例外が発生します。特にJSONはインデントやクォーテーションで容量を食うため、受け側の変数は余裕を持ったサイズ(PIC X(n))で定義してください。
3. 文字コードの意識
Web連携ではUTF-8が主流です。COBOLの実行環境(エンコーディング)と、最終的に出力されるJSONの文字コードが一致しているか、運用前に必ずテストツールで確認することをお勧めします。
この機能を使いこなせば、レガシーな基幹システムと最新のWeb APIを繋ぐ架け橋が、よりシンプルで堅牢なものになりますよ。ぜひ現場のプログラムで試してみてください。

コメント