カテゴリ: COBOL 更新日: 2026/01/06

COBOLのサブルーチンのエラー処理パターンを徹底解説!初心者でもわかる安全なプログラムの書き方

サブルーチンのエラー処理パターン
サブルーチンのエラー処理パターン

先生と生徒の会話形式で理解しよう

生徒

「COBOLでサブルーチンを使うときに、エラーが起きたらどうなるんですか?」

先生

「サブルーチンでエラーが起きた場合、そのままだと気づけないこともあります。でも、しっかりとしたエラー処理パターンを使えば、安全に動作を制御できるんですよ。」

生徒

「難しそうに聞こえますが、初心者でも書けるようになりますか?」

先生

「もちろんです!パソコン初心者にもわかりやすく説明しますから、一緒に学んでいきましょう。」

1. サブルーチンとは?

1. サブルーチンとは?
1. サブルーチンとは?

COBOLのサブルーチンとは、プログラムを分割して処理を再利用できる小さな部品のことです。メインプログラムからCALL文を使って、サブルーチン(別プログラム)を呼び出します。

たとえば、「合計を計算する処理」や「表示する処理」をサブルーチンとして分けておくことで、同じ処理を何回も使い回すことができます。

2. なぜエラー処理が必要なのか?

2. なぜエラー処理が必要なのか?
2. なぜエラー処理が必要なのか?

サブルーチンを使うと便利ですが、呼び出しに失敗したり、想定外のデータが渡されたりすると、プログラムが止まってしまうことがあります。

そうならないために、エラー処理を入れておくことが大切です。これにより、エラーが発生しても安全に対処でき、ユーザーに正しいメッセージを表示できます。

3. RETURN-CODEを使ったエラー通知

3. RETURN-CODEを使ったエラー通知
3. RETURN-CODEを使ったエラー通知

サブルーチンでは、RETURN-CODEという特別な変数を使って、エラーが起きたかどうかをメインプログラムに伝えることができます。

サブルーチン内で問題がなければRETURN-CODE = 0を設定し、エラーが起きたらRETURN-CODE = 199など、数字で状態を返します。

4. RETURN-CODEの使用例

4. RETURN-CODEの使用例
4. RETURN-CODEの使用例
メインプログラム(MAIN.CBL)

IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NAME     PIC A(20).

PROCEDURE DIVISION.
    MOVE "ハナコ" TO WS-NAME
    CALL "CHECK-NAME" USING WS-NAME
    IF RETURN-CODE NOT = 0 THEN
        DISPLAY "エラーが発生しました。"
    ELSE
        DISPLAY "正常に処理が完了しました。"
    END-IF
    STOP RUN.
サブルーチン(CHECK-NAME.CBL)

IDENTIFICATION DIVISION.
PROGRAM-ID. CHECK-NAME.

DATA DIVISION.
LINKAGE SECTION.
01 LK-NAME     PIC A(20).

PROCEDURE DIVISION USING LK-NAME.
    IF LK-NAME = SPACES THEN
        MOVE 1 TO RETURN-CODE
    ELSE
        MOVE 0 TO RETURN-CODE
    END-IF
    EXIT PROGRAM.

5. 実行結果

5. 実行結果
5. 実行結果

正常に処理が完了しました。

6. サブルーチンが存在しない場合の対策

6. サブルーチンが存在しない場合の対策
6. サブルーチンが存在しない場合の対策

COBOLでは、CALLで指定したサブルーチンのファイルが見つからないとエラーになります。このようなときには、ON EXCEPTIONというキーワードを使って、エラーを検出できます。


CALL "NOT-FOUND-PGM" ON EXCEPTION
    DISPLAY "サブルーチンが見つかりませんでした。"
    GO TO SKIP-CALL
END-CALL.

ON EXCEPTIONは「例外(エラー)が起きたときに実行する処理」を指定する構文です。これにより、プログラムが止まらずに別の処理へ進められます。

7. サブルーチンの中で発生するエラーへの対処

7. サブルーチンの中で発生するエラーへの対処
7. サブルーチンの中で発生するエラーへの対処

たとえば、数値を0で割ってしまった場合や、読み込んだデータが足りない場合など、サブルーチンの中で発生する予期しないエラーは、RETURN-CODEで知らせるように設計します。

以下のように、条件をチェックして問題があればエラーコードを返しましょう。


IF NUMERATOR = 0 THEN
    MOVE 99 TO RETURN-CODE
    DISPLAY "0では割れません"
    EXIT PROGRAM
END-IF

8. 呼び出し時に異常を検知するパターン

8. 呼び出し時に異常を検知するパターン
8. 呼び出し時に異常を検知するパターン

メインプログラムでは、サブルーチンの処理結果としてRETURN-CODEをチェックすることで、異常終了を防ぐことができます。

また、サブルーチン内で複数の種類のエラーをRETURN-CODEに応じて分類することで、どんな問題が起きたかを判断しやすくなります。


IF RETURN-CODE = 1 THEN
    DISPLAY "入力データが空です。"
ELSE IF RETURN-CODE = 99 THEN
    DISPLAY "計算中にエラーが発生しました。"
ELSE
    DISPLAY "正常に終了しました。"
END-IF

9. エラー処理を入れることで得られるメリット

9. エラー処理を入れることで得られるメリット
9. エラー処理を入れることで得られるメリット

サブルーチンにしっかりとエラー処理を入れておくことで、以下のようなメリットがあります。

  • プログラムが止まらずに安全に動作する
  • 問題の原因がわかりやすくなる
  • 開発チームでの修正やテストがスムーズになる
  • ユーザーに丁寧なメッセージを出せる

COBOLのサブルーチンは古いシステムでも今でも多く使われています。そのため、エラー処理パターンの理解は非常に重要なのです。

まとめ

まとめ
まとめ

COBOLのサブルーチンを安全に活用するためには、呼び出し元とサブルーチン側の両方で丁寧なエラー処理を行うことが欠かせません。特にRETURN-CODEを使ったエラー通知は、古くからのCOBOLプログラムでも幅広く用いられている標準的な方法であり、サブルーチンが正常に動作したかどうかを正確に判断するための大切な仕組みです。サブルーチンの役割を明確にしつつ、異常が発生した際には安全に処理を戻せるように設計することで、長年稼働し続ける基幹システムでも安定した動作を維持することができます。さらにON EXCEPTIONによる呼び出し時のエラー検出や、サブルーチン内部での条件分岐を用いた異常判断は、複雑な処理を行う現場で特に有効なテクニックです。

また、RETURN-CODEに複数のエラー区分を設定しておくことで、「入力が空」「計算エラー」「データ不足」など、エラーの種類ごとに判定を行えるため、問題箇所の特定がしやすくなり、保守作業の効率化にもつながります。COBOLは企業の重要な業務を支える信頼性の高い言語として長く利用されてきましたが、その背景には、こうした堅牢なエラー処理パターンが存在します。初心者ほど「どこまで対応するべきか」が分かりにくい部分ではありますが、基本的な判断基準を理解しておくことで、安全で読みやすく、再利用性の高いプログラムを書くことができるようになります。

以下では、今回学んだ内容を踏まえて、エラー処理をより実践的に使うためのサンプルを示します。文章だけでは理解しにくい部分も、実際のCOBOLコードを見ながら確認することで、エラー処理の流れやRETURN-CODEの活用方法がより具体的にイメージできるでしょう。

サンプルプログラム:複数エラーコードの判定例


IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN-CHECK.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-AGE        PIC 9(3).
01 WS-RESULT     PIC 9(2).

PROCEDURE DIVISION.
    MOVE 0 TO WS-AGE
    CALL "CHECK-AGE" USING WS-AGE
    MOVE RETURN-CODE TO WS-RESULT

    IF WS-RESULT = 1 THEN
        DISPLAY "年齢が未入力です。処理を中止します。"
    ELSE IF WS-RESULT = 2 THEN
        DISPLAY "年齢が不正です。再入力してください。"
    ELSE IF WS-RESULT = 99 THEN
        DISPLAY "サブルーチン内部で想定外のエラーが発生しました。"
    ELSE
        DISPLAY "年齢チェックが正常に終了しました。"
    END-IF

    STOP RUN.
サブルーチン(CHECK-AGE.CBL)

IDENTIFICATION DIVISION.
PROGRAM-ID. CHECK-AGE.

DATA DIVISION.
LINKAGE SECTION.
01 LK-AGE       PIC 9(3).

PROCEDURE DIVISION USING LK-AGE.
    IF LK-AGE = 0 THEN
        MOVE 1 TO RETURN-CODE
        EXIT PROGRAM
    END-IF

    IF LK-AGE < 0 OR LK-AGE > 130 THEN
        MOVE 2 TO RETURN-CODE
        EXIT PROGRAM
    END-IF

    MOVE 0 TO RETURN-CODE
    EXIT PROGRAM.

このように、サブルーチン側でRETURN-CODEに細かなエラー区分を割り当てることで、メインプログラム側ではよりきめ細かなエラー処理を行えるようになります。COBOLの堅牢なエラー処理を正しく理解しておくことで、どんな規模のシステムでも安定したプログラム設計が可能になります。業務データを扱う場面が多いCOBOLだからこそ、ミスが許されない環境でも正確に処理できるよう、こうしたパターンを身につけておくことが重要なのです。

先生と生徒の振り返り会話

生徒

「RETURN-CODEって単なる数字だと思っていましたが、こんなに細かくエラーを分類できるんですね!」

先生

「そのとおりです。数字を工夫して使うことで、サブルーチンの状態をわかりやすくメインプログラムに伝えられるんですよ。」

生徒

「ON EXCEPTIONを使えば、そもそもの呼び出し失敗も検知できるというのが安心ですね。」

先生

「ええ、CALL時のエラーとサブルーチン内部のエラーは別物なので、それぞれに合った方法で対処する必要があります。」

生徒

「これで、COBOLのサブルーチンを使うときの怖さがかなり減りました!安全にエラー処理ができる自信がつきました。」

先生

「その調子です。正しいエラー処理を身につければ、どんな基幹システムでも安心して管理できますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

COBOLのサブルーチンとは何ですか?

COBOLのサブルーチンとは、プログラムの一部を切り出して別の処理単位として再利用できる機能です。CALL文を使って呼び出し、処理の共通化やコードの簡略化ができます。
カテゴリの一覧へ
新着記事
New1
C#
C#のLINQでAny・Allなど条件確認メソッドの使い方を完全ガイド!初心者でもわかるデータ検証
New2
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New3
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New4
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.3
Java&Spring記事人気No3
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.4
Java&Spring記事人気No4
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.5
Java&Spring記事人気No5
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決
No.8
Java&Spring記事人気No8
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法