【COBOL:Java対応チートシート】Java開発者が読み解くCOBOL

# はじめに

Javaの開発者がCOBOL開発者と会話する際の共通言語を整理したい
「COBOLのコレはJavaでいうとコレだよね」みたいな説明をする。


## 想定読者
- Javaの技術研修を受けたのに、COBOLの現場にアサインされた方
- COBOL->Javaのマイグレーション案件にアサインされたJava経験者の方
- JavaもCOBOLも扱う現場担当。両方の現場担当とコミュニケーションをとる方


## お願い🙏
- 実務経験者のみなさま
    - 間違いや改善についてお気づきの点がございましたら、コメントいただけると嬉しいです
    - それぞれの言語の専門家からのご意見をお待ちしています
- COBOLの学習が必要な方
    - こういうカテゴリでもまとめてほしいなど、コメントいただけると嬉しいです
    - 順次、追加していきたいと思います

# COBOLとは

COBOLは、ビジネスアプリケーションを目的としたプログラミング言語の一つです。

### どのような背景から登場したのか?
COBOLは1959年にアメリカ国防総省の支援を受けて開発されました。
当時、ビジネスデータ処理に特化したプログラミング言語が不足していたため、そのニッチを埋めるべく設計されました。

### COBOLの利用用途
- 金融業界での取引処理
- 公共セクター（税金計算、社会保障など）
- 在庫管理

COBOLは既存のビジネスシステムで広く使用されており、その維持・運用の開発者は引き続き需要があります。しかし、新規のプロジェクトではあまり選ばれない傾向にあります。

# COBOL:Java対応チートシート

## 基本用語

| 用語 | カテゴリ | COBOLにおける説明 | Javaでいうと |
| --- | --- | --- | --- |
| Division | コード構造 | COBOLプログラムの主要なセクション (例: Identification Division, Procedure Division) | クラスとメソッド |
| File Section | データ構造 | ファイルのデータ構造を定義するセクション | ファイルI/Oクラス |
| Working-Storage | メモリ | 一時的なデータを格納する領域 | ローカル変数 |
| MOVE | 命令 | データを一つの場所から別の場所へ移動する | 変数代入 |
| PERFORM | 制御構造 | 指定された範囲のCOBOLステートメントを実行する | for/whileループ |
| COPYBOOK | モジュール | 共通のデータ構造や手続きを外部ファイルとして定義 | インターフェース/クラス |
| DISPLAY | 出力 | コンソールやファイルにテキストを出力する | System.out.println |
| ACCEPT | 入力 | コンソールやファイルからデータを読み取る | Scannerクラス |
| CALL | 関数呼び出し | 外部プログラムまたは内部プロシージャを呼び出す | メソッド呼び出し |
| SORT | アルゴリズム | データを指定されたキーでソートする | Collections.sort |
| READ | ファイル操作 | ファイルからレコードを読み込む | FileReader |
| WRITE | ファイル操作 | ファイルにレコードを書き込む | FileWriter |
| INDEXED | ファイル形式 | キーによってアクセスできるレコード形式のファイル | データベース/HashMap |
| COMP | データ型 | 2進数で表現された数値型 | int/byte/short |
| PIC | データ型 | データの形式を定義する（例：PIC 9(3)は、最大3桁の数値） | プリミティブ型 |


## COBOLの周辺ツール、ミドルウェアなど

| 用語 | カテゴリ | COBOLにおける説明 | Javaでいうと |
| --- | --- | --- | --- |
| JCL (Job Control Language) | バッチ処理 | メインフレームでのバッチジョブのスケジューリングと制御に使用 | Jp1 |
| CICS (Customer Information Control System) | ミドルウェア | オンライントランザクションを処理するためのミドルウェア | JTA/JTS |
| VSAM (Virtual Storage Access Method) | データストレージ | インデックス付きやシーケンシャルなデータストレージのためのファイルシステム | データベース/ファイルI/O |
| EBCDIC | 文字エンコーディング | 主にIBMのメインフレームで使用される文字エンコーディング形式 | ASCII/UTF-8 |
| RM/COBOL | コンパイラ | Micro Focusによって提供されるCOBOLコンパイラ | Oracle JDK, OpenJDK |
| IMS (Information Management System) | データベース | 階層型データベースおよびトランザクションモニター | JDBC/ORMフレームワーク |
| DB2 | データベース | IBMによって開発されたリレーショナルデータベース | Oracle, MySQL, PostgreSQL |
| TSO (Time Sharing Option) | オペレーティングシステム | 複数のユーザーが同時にメインフレームにアクセスできるようにするオプション | Linuxのマルチユーザ環境 |
| ISPF (Interactive System Productivity Facility) | ユーザーインターフェース | メインフレームでプログラムを開発、管理するためのテキストベースのUI | IDE（Eclipse, IntelliJ） |
| SPUFI (SQL Processing Using File Input) | データベースツール | SQLクエリをDB2データベースに対して実行するためのユーザーインターフェース | SQLクライアント |

## COBOLの開発者環境に関する用語集

| 用語 | カテゴリ | COBOLにおける説明 | Javaでいうと |
| --- | --- | --- | --- |
| z/OS | オペレーティングシステム | IBMのメインフレーム用のオペレーティングシステム | Linux, Windows, macOS |
| TSO/ISPF | IDE | メインフレーム上でのテキストベースの開発環境 | Eclipse, IntelliJ IDEA |
| Endevor | バージョン管理 | COBOLソースコードのライフサイクル管理とバージョン管理 | Git, SVN |
| RDz (Rational Developer for z Systems) | IDE | IBMによるEclipseベースのメインフレーム開発環境 | Eclipse |
| CobolUnit | テストフレームワーク | COBOLのユニットテスティングフレームワーク | JUnit |
| Abend | デバッグ | 異常終了のこと。デバッグ中によく遭遇する問題 | Exception |
| JES (Job Entry Subsystem) | バッチ処理 | バッチジョブのキューイングとスケジューリングを担当 | Batch Processing Frameworks |
| SYSLIB | ライブラリ | COBOLプログラムで使用される共有ライブラリやCOPYBOOKを格納するディレクトリ | Classpath |
| Assembler | 言語 | COBOLと一緒にメインフレームでよく使用される低レベルプログラミング言語 | Assembly, JNI |
| SDSF (System Display and Search Facility) | モニタリング | メインフレーム上のリソースとジョブを監視するツール | Monitoring Tools |


## COBOLのUIに関する用語集
| 用語 | カテゴリ | COBOLにおける説明 | Javaでいうと |
| --- | --- | --- | --- |
| BMS (Basic Mapping Support) | UIフレームワーク | CICSと一緒に使用される、画面設計とマッピングのためのツール | JavaFX, Swing |
| 3270 Terminal | ユーザーインターフェース | IBMメインフレームに接続するためのテキストベースの端末エミュレータ | Terminal, Command Prompt |
| MAPSET | UIコンポーネント | BMSで使用される、一連の画面マップ（UI）を含む集合体 | UI Component Set |
| SEND MAP | UI操作 | 画面マップ（UI）を端末に送信するCICSコマンド | UI Rendering |
| RECEIVE MAP | UI操作 | 端末から入力データを受信するCICSコマンド | Event Listener |
| PF Key | UI操作 | プログラム可能なファンクションキー（PFキー）を使用して、特定の操作を行う | Keyboard Shortcut |
| Attention Identifier | UIイベント | ユーザーが特定のキー（例：Enter、PFキー）を押したときに生成されるイベント | Key Event |
| CWA (Common Work Area) | UIデータ | CICSトランザクション間でデータを共有する領域 | Shared Data Model |

## COBOLのDBに関する用語集
| 用語 | カテゴリ | COBOLにおける説明 | Javaでいうと |
| --- | --- | --- | --- |
| VSAM (Virtual Storage Access Method) | データストレージ | インデックスやシーケンシャルなデータストレージのためのファイルシステム | データベース/ファイルI/O |
| IMS DB | データベース | 階層型データベースシステム | JDBC/ORMフレームワーク |
| DB2 | データベース | IBMによって開発されたリレーショナルデータベース | Oracle, MySQL, PostgreSQL |
| SQLCODE | エラーハンドリング | SQL操作後の結果やエラーを示すコード | SQLException |
| EXEC SQL | SQL組み込み | COBOLプログラム内で直接SQLクエリを実行するための構文 | JDBC |
| DCLGEN | コード生成 | DB2テーブル定義からCOBOL用のデータ構造を生成するツール | ORMツール |
| Cursor | データ操作 | 複数の行を順次処理するためのDB2のオブジェクト | ResultSet |
| COMMIT | トランザクション | データベースの変更を確定する | commit() |
| ROLLBACK | トランザクション | データベースの変更を取り消す | rollback() |
| Plan | SQL実行計画 | DB2でSQLクエリを効率的に実行するためのプラン | Query Execution Plan |

## COBOLのファイル連携に関する用語
| 用語 | カテゴリ | COBOLにおける説明 | Javaでいうと |
| --- | --- | --- | --- |
| FD (File Description) | ファイル定義 | データファイルのレコード構造を定義するセクション | File Class, POJO |
| SELECT Clause | ファイルマッピング | プログラムと外部ファイルとの関連付けを行う | FileInputStream, FileChannel |
| OPEN | ファイル操作 | ファイルを開くためのCOBOLステートメント | File.open() |
| CLOSE | ファイル操作 | ファイルを閉じるためのCOBOLステートメント | File.close() |
| READ | ファイル操作 | ファイルからレコードを読み込む | BufferedReader.read() |
| WRITE | ファイル操作 | ファイルにレコードを書き込む | BufferedWriter.write() |
| REWRITE | ファイル操作 | 既存のレコードを更新する | RandomAccessFile.write() |
| DELETE | ファイル操作 | レコードを削除する | -- |
| Sequential File | ファイル形式 | レコードが一定の順序で格納されたファイル | Text File |
| Indexed File | ファイル形式 | キーによってアクセスできるレコード形式のファイル | Database, HashMap |
| Relative File | ファイル形式 | 相対的な位置（レコード番号）でアクセスするファイル | Array, List |
| Record Layout | ファイル構造 | ファイル内の各レコードのフィールド構造 | Data Class, DTO |
| ORGANIZATION Clause | ファイル属性 | ファイルの種類（SEQUENTIAL, INDEXED, RELATIVE）を指定する | File Metadata |
| ACCESS MODE | ファイルアクセス | ファイルにどのようにアクセスするか（SEQUENTIAL, RANDOM, DYNAMIC）を指定 | File Access Mode |


## COBOLの責務配置に関する用語
| 用語 | カテゴリ | COBOLにおける説明 | Javaでいうと |
| --- | --- | --- | --- |
| Environment Division | コードセクション | ファイルやデバイスとプログラムとの関連付けを定義するセクション | コンフィギュレーションファイル |
| INPUT-OUTPUT SECTION | コードセクション | Environment Division内で、ファイル操作に関連する設定を行うセクション | I/O設定 |
| SELECT-ASSIGN | ファイル設定 | プログラム内で使用するファイルと実際の物理ファイルとのマッピング | File Path設定 |
| FILE-CONTROL | ファイル設定 | ファイルのオープン、クローズ、読み書きに関する動作を制御するための設定 | File Operations設定 |
| EXTERNAL | ファイル属性 | 複数のプログラムからアクセス可能なファイルを指定 | 共有リソース |
| RELATIVE ORGANIZATION | ファイル構造 | レコードが相対的な位置に配置されているファイル形式 | 配列、リスト |
| LOCK MODE | ファイルアクセス | ファイルに対する同時アクセスを制御するためのロックモード | Locking Mechanism |
| OPTIONAL | ファイル存在 | ファイルが存在しなくてもエラーにならないようにするキーワード | Optional File |
| Multiple File Tape | データストレージ | 単一のテープに複数のファイルを格納する方式 | マルチパートファイル |
| Record Blocking | ファイル最適化 | 複数のレコードを一つのブロックとしてディスクに保存するための最適化 | Buffered Writing |