【初心者向け】COBOLサブルーチンの基本と使い方を徹底解説!

2025年4月10日木曜日

COBOL

この記事では、COBOL サブルーチンの基礎から、実際の使い方までを、初心者の方にも分かりやすく解説していきます。

COBOLを学び始めたばかりだと、サブルーチンってなんだか難しそう…と感じるかもしれませんね。でも大丈夫!この記事を読めば、プログラムを部品のように分けて、もっと効率的に、もっと分かりやすくコーディングする方法が身につきます。

この記事で学べること

  • サブルーチンって何?どんな良いことがあるの?
  • どうやってサブルーチンを作るの?基本的なルールは?
  • 作ったサブルーチンをどうやって呼び出すの?(CALL文の使い方)
  • プログラム間でどうやってデータをやり取りするの?(USING句とLINKAGE SECTION)
  • 実際にサブルーチンを使ったプログラム例
  • サブルーチンを使うときに気をつけること

COBOLの「サブルーチン」とは?プログラムを部品化するメリット

まず、COBOL サブルーチンとは何か、というお話から始めましょう。

すごく簡単に言うと、プログラムの中で、ある特定のまとまった処理をする部分を、別の独立したプログラムとして切り出したもの、それがサブルーチンです。

イメージとしては、大きなプラモデルを作る時に、手や足、胴体といった部品を先に作っておいて、最後にそれらを組み合わせて完成させる感じに似ていますね。

プログラム全体をドーンと一つで作るのではなく、機能ごとに小さなプログラム(部品=サブルーチン)に分けて作るんです。

じゃあ、なんでわざわざそんな面倒そうなことをするの?と思いますよね。
それには、ちゃんと理由があるんです。プログラムを部品化(サブルーチン化)すると、こんないいことがあります。

  • コードの再利用ができる
    同じような処理をいろんな場所で使いたい時、その処理をサブルーチンにしておけば、何度も同じコードを書かなくて済みます。呼び出すだけでOK!楽ちんですよね。
  • プログラムが読みやすくなる
    メインのプログラムは処理の流れだけを書いて、細かい処理はサブルーチンに任せる、という形にすると、全体の構造がスッキリして、格段に読みやすくなります。どこで何をしているか分かりやすくなるんですよ。
  • 修正が楽になる
    もし処理内容を変更する必要が出た場合、その処理を担当しているサブルーチンだけを直せばOKです。あちこち修正して回る必要がないので、修正漏れも防げますし、時間も短縮できます。
  • 分担して開発できる
    大きなプログラムを作る時、機能ごとに担当者を決めて、それぞれがサブルーチンを作る、という進め方ができます。チーム開発がしやすくなるわけですね。

こんな感じで、サブルーチンをうまく使うと、プログラミングがもっとスマートに、効率的になるんです。

プログラムの部品化イメージ図(アスキーアート風)

メインプログラム
+---------------------+
| 処理A               |
| CALL 'SUB_KEISAN'   | <-- サブルーチン呼び出し
| 処理B               |
| CALL 'SUB_HYOJI'    | <-- サブルーチン呼び出し
| 処理C               |
+---------------------+
       |                 |
       V                 V
サブルーチン(SUB_KEISAN) サブルーチン(SUB_HYOJI)
+---------------------+ +---------------------+
| 計算処理            | | 表示処理            |
| GOBACK.             | | GOBACK.             |
+---------------------+ +---------------------+

COBOLの「サブルーチン」の基本的な仕組み

サブルーチンがどうやって動くのか、その基本的な仕組みを見ていきましょう。

ここでの登場人物は二人。「呼び出す側のプログラム」と「呼び出される側のプログラム(サブルーチン)」です。

例えるなら、あなたが上司(呼び出す側)で、部下(呼び出される側=サブルーチン)に仕事をお願いするような感じです。

処理の流れは、だいたいこんなステップになります。

  1. 呼び出し:メインのプログラムが、ある処理を実行中に、「この仕事はサブルーチン君にお願いしよう!」と判断します。そして、「CALL文」という命令を使って、特定のサブルーチンを呼び出します。
  2. 実行:呼び出されたサブルーチンは、頼まれた仕事(プログラムに書かれた処理)を実行します。
  3. 制御の戻り:サブルーチンは、自分の仕事が終わったら、「終わりました!」と報告して、処理を呼び出し元のプログラムに戻します。「GOBACK文」という命令が、この「戻る」合図になります。
  4. 再開:呼び出し元のプログラムは、サブルーチンが終わった次の行から、処理を再開します。

図でイメージすると、こんな感じですね。

呼び出す側 (メインプログラム)           呼び出される側 (サブルーチン)
+---------------------------+           +---------------------------+
| 処理1                     |           |                           |
| 処理2                     |           |                           |
| CALL 'SUB_A'.  ---------->|           | PROCEDURE DIVISION.       |
|                           |           |   処理X                   |
| 処理3         <----------+-----------|   処理Y                   |
| 処理4                     |           | GOBACK.                   |
| STOP RUN.                 |           |                           |
+---------------------------+           +---------------------------+
    ↑                                           ↑
    |--- 制御が戻る ---<--- 処理が終わる ---|
    |
    |--- 制御が移る --->--- 呼び出される ---|

メインプログラムはサブルーチンに処理を「依頼」し、サブルーチンはその依頼をこなしてメインプログラムに「報告」する。このやり取りが基本の形です。

COBOLの「サブルーチン」の作り方

さあ、いよいよサブルーチンを実際に作ってみましょう!
サブルーチンも独立した一つのCOBOLプログラムなので、基本的な構造は普通のプログラムと似ています。でも、サブルーチン特有の「お作法」がいくつかあるんです。

まずは、サブルーチンの骨組みとなる基本的な書き方を見てみましょう。

IDENTIFICATION DIVISION.
PROGRAM-ID. SUBROUTINE-NAME.

ENVIRONMENT DIVISION.
* 必要であれば記述します (通常、簡単なサブルーチンでは省略されることも)

DATA DIVISION.
WORKING-STORAGE SECTION.
* サブルーチン内で使う変数を定義します

LINKAGE SECTION.
* 呼び出し元からデータを受け取るための変数を定義します (後で詳しく!)

PROCEDURE DIVISION USING 受け取るデータ名など.
* ここにサブルーチンの具体的な処理を書きます

    GOBACK. * または EXIT PROGRAM.

ポイントをいくつか説明しますね。

  • PROGRAM-ID.
    ここには、サブルーチンの名前を書きます。呼び出す側はこの名前を指定して呼び出します。分かりやすい名前をつけるのがコツですよ。
  • DATA DIVISION.
    サブルーチンの中で計算したり、一時的に値を入れておいたりするための変数(作業域)は、WORKING-STORAGE SECTION. に定義します。これは普通のプログラムと同じですね。
  • LINKAGE SECTION.
    これがサブルーチンの特徴的な部分!呼び出し元のプログラムからデータを受け取るための変数を定義する場所です。あとで詳しく説明するので、今は「ふーん、そんなのがあるんだ」くらいでOKです。
  • PROCEDURE DIVISION USING ...
    処理の本体を書く部分です。もし呼び出し元からデータを受け取る場合は、USING句の後に、LINKAGE SECTIONで定義した変数名を書きます。
  • GOBACK. または EXIT PROGRAM.
    処理が終わったら、呼び出し元に制御を返すための命令です。これを書き忘れると、プログラムが戻れなくなって大変なことになるので、絶対に忘れないでくださいね!

まずはこの基本形を頭に入れておきましょう。

サブルーチンの入口と出口:PROCEDURE DIVISION.GOBACK

サブルーチンの処理はどこから始まって、どこで終わるのか。その入口と出口をしっかり理解しておきましょう。

入口は PROCEDURE DIVISION. です。
ここからが、サブルーチンが担当する具体的な処理の始まり、スタート地点となります。呼び出し元のプログラムから制御が移ってくると、まずこの行の次から実行が開始されます。

そして、出口は GOBACK. 文(または EXIT PROGRAM. 文)です。
サブルーチンが自分の仕事をすべて終えたら、この命令を実行します。GOBACK文は、処理を実行したあと、プログラムの制御を呼び出し元のプログラム(CALL文を実行した次の命令)に戻すための大切な合図なんです。

もしデータを受け取る場合は、PROCEDURE DIVISION.USING句が付きます。

* データを受け取らないシンプルなサブルーチンの例
IDENTIFICATION DIVISION.
PROGRAM-ID. SIMPLE-SUB.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-MESSAGE PIC X(20) VALUE 'Subroutine executed!'.
PROCEDURE DIVISION.
    DISPLAY WS-MESSAGE.
    GOBACK.

この例では、PROCEDURE DIVISION. が処理の開始点で、メッセージを表示した後に GOBACK. で呼び出し元に戻ります。シンプルですよね!

「サブルーチン」の呼び出し方

さて、サブルーチンを作ったら、次はそれを呼び出す方法です。
主プログラム(メインルーチン)からサブルーチンに処理をお願いするときに使うのが、CALLです。

一番シンプルな使い方は、これ!

CALL 'サブルーチン名'.

PROGRAM-IDで指定したサブルーチンの名前を、シングルクォーテーション(')で囲んで指定します。たったこれだけで、指定したサブルーチンに処理をジャンプさせることができるんです。

例えば、さっき作った `SIMPLE-SUB` というサブルーチンを呼び出すには、主プログラム側でこう書きます。

IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN-PROGRAM.
PROCEDURE DIVISION.
    DISPLAY 'Main program start.'.
    CALL 'SIMPLE-SUB'. * ここでサブルーチンを呼び出し!
    DISPLAY 'Main program end.'.
    STOP RUN.

これを実行すると、まず 'Main program start.' が表示され、次に `CALL 'SIMPLE-SUB'` で `SIMPLE-SUB` が呼び出されます。`SIMPLE-SUB` の中で 'Subroutine executed!' が表示され、`GOBACK.` でメインプログラムに戻ってきます。最後に 'Main program end.' が表示されて終了、という流れになります。

簡単でしょ? まずはこの基本形をマスターしましょう!


「サブルーチン」へのデータの渡し方:USING句とLINKAGE SECTION

サブルーチンが便利なのは、ただ処理を分担できるだけじゃないんです。
主プログラムからサブルーチンへ、あるいはサブルーチンから主プログラムへ、データをやり取りできるところが、さらに強力なポイント!

例えば、「この値をサブルーチンに渡して計算してきてもらう」とか、「サブルーチンで作った結果をメインプログラムで受け取る」といったことができるわけです。

このデータの受け渡しを実現するのが、以下の二つの組み合わせです。

  • 呼び出す側(主プログラム)の CALL文のUSING
  • 呼び出される側(サブルーチン)の LINKAGE SECTIONPROCEDURE DIVISIONUSING

どういうことか、図で見てみましょう。

呼び出す側 (メインプログラム)                 呼び出される側 (サブルーチン)
+---------------------------------+         +---------------------------------+
| DATA DIVISION.                  |         | DATA DIVISION.                  |
| WORKING-STORAGE SECTION.        |         | WORKING-STORAGE SECTION.        |
| 01 MAIN-DATA-1 PIC 9(3).       |         |   01 SUB-WORK-A PIC 9(3).       |
| 01 MAIN-DATA-2 PIC X(10).      |         |                                 |
|                                 |         | LINKAGE SECTION.                | <-- 受け皿を定義
| PROCEDURE DIVISION.             |         | 01 LINK-DATA-1 PIC 9(3).       |
|   MOVE 100 TO MAIN-DATA-1.      |         | 01 LINK-DATA-2 PIC X(10).      |
|   MOVE "ABC" TO MAIN-DATA-2.    |         |                                 |
|   CALL 'SUB-B' USING MAIN-DATA-1, | ------> | PROCEDURE DIVISION USING      | <-- 受け取る宣言
|                      MAIN-DATA-2. |         |     LINK-DATA-1, LINK-DATA-2. |
|                                 |         |   MOVE LINK-DATA-1 TO SUB-WORK-A|
|   DISPLAY MAIN-DATA-2. <--------|---------|   MOVE "XYZ" TO LINK-DATA-2.  | <-- 値を変更
|   STOP RUN.                     |         |   GOBACK.                       |
+---------------------------------+         +---------------------------------+

流れはこんな感じです。

  1. 主プログラム側:
    • WORKING-STORAGE SECTIONで、サブルーチンに渡したいデータ(MAIN-DATA-1, MAIN-DATA-2)を用意します。
    • CALL文でサブルーチンを呼び出すときに、USING句を使って、渡したいデータを指定します。CALL 'SUB-B' USING MAIN-DATA-1, MAIN-DATA-2. のように書きます。
  2. サブルーチン側:
    • LINKAGE SECTIONという特別な場所に、主プログラムからデータを受け取るための「受け皿」となる変数を定義します。この時、主プログラムで渡すデータの順番、型、長さをピッタリ合わせる必要があります。(例:LINK-DATA-1MAIN-DATA-1 を、LINK-DATA-2MAIN-DATA-2 を受け取る)
    • PROCEDURE DIVISIONにもUSING句を付けて、LINKAGE SECTIONで定義した受け皿の変数名を指定します。PROCEDURE DIVISION USING LINK-DATA-1, LINK-DATA-2. のように書きます。
  3. データの共有:こうすることで、主プログラムのMAIN-DATA-1とサブルーチンのLINK-DATA-1MAIN-DATA-2LINK-DATA-2が、メモリ上で同じ場所を指すようになります。つまり、サブルーチン側でLINK-DATA-1の値を読み書きすると、それは主プログラム側のMAIN-DATA-1の値を直接読み書きしていることになるんです!すごくないですか?

この仕組みを使えば、サブルーチンに情報を渡して処理を依頼したり、サブルーチンでの処理結果を主プログラムに戻したりすることができるわけです。データの受け渡し、最初はちょっとややこしく感じるかもしれませんが、慣れると非常に便利ですよ!

具体例で理解するデータの受け渡し

言葉だけだと分かりにくいので、簡単な計算をする例で、実際のデータの受け渡しを見てみましょう。
ここでは、主プログラムから二つの数字をサブルーチンに渡し、サブルーチンがその合計を計算して主プログラムに返す、という処理を作ってみます。

まずは、呼び出す側の主プログラム(MAINADD)です。

IDENTIFICATION DIVISION.
PROGRAM-ID. MAINADD.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 VALUE-A   PIC 9(3) VALUE 100.
01 VALUE-B   PIC 9(3) VALUE 50.
01 RESULT-C  PIC 9(4) VALUE ZERO.
PROCEDURE DIVISION.
    DISPLAY "渡す値A: " VALUE-A.
    DISPLAY "渡す値B: " VALUE-B.

    *> サブルーチン 'SUBADD' を呼び出し、データを渡す
    CALL 'SUBADD' USING VALUE-A, VALUE-B, RESULT-C.

    DISPLAY "サブルーチンからの戻り値C: " RESULT-C.
    STOP RUN.

次に、呼び出される側のサブルーチン(SUBADD)です。

IDENTIFICATION DIVISION.
PROGRAM-ID. SUBADD.
DATA DIVISION.
LINKAGE SECTION.
*> 主プログラムから渡されるデータを受け取るための定義
01 LINK-VAL-A PIC 9(3).
01 LINK-VAL-B PIC 9(3).
01 LINK-ANS-C PIC 9(4).
PROCEDURE DIVISION USING LINK-VAL-A, LINK-VAL-B, LINK-ANS-C.
    *> 受け取った2つの値を足して、3つ目の変数に入れる
    COMPUTE LINK-ANS-C = LINK-VAL-A + LINK-VAL-B.
    GOBACK.

この2つのプログラムを動かすと、何が起こるか見てみましょう。

  1. MAINADDが始まります。
  2. VALUE-A (100) と VALUE-B (50) の値が表示されます。
  3. CALL 'SUBADD' USING VALUE-A, VALUE-B, RESULT-C. が実行されます。
    この瞬間、SUBADDのLINK-VAL-AはMAINADDのVALUE-Aを、LINK-VAL-BVALUE-Bを、LINK-ANS-CRESULT-Cを指すようになります。
  4. SUBADDの処理が始まります。
  5. COMPUTE LINK-ANS-C = LINK-VAL-A + LINK-VAL-B. が実行されます。
    LINK-VAL-A (つまりVALUE-A=100) と LINK-VAL-B (つまりVALUE-B=50) が足され、その結果150が LINK-ANS-C (つまりRESULT-C) に格納されます。LINKAGE SECTIONで定義した項目は、呼び出し元から渡されるデータを受け取るための特別な場所であり、ここで値が変更されると呼び出し元のデータも変わるという点を覚えておいてくださいね。
  6. GOBACK. が実行され、制御がMAINADDに戻ります。
  7. MAINADDのDISPLAY "サブルーチンからの戻り値C: " RESULT-C. が実行され、RESULT-C の値(150)が表示されます。
  8. MAINADDが終了します。

実行結果はこんな感じになります。

渡す値A: 100
渡す値B: 050
サブルーチンからの戻り値C: 0150

どうでしょう? 主プログラムとサブルーチンでデータがうまくやり取りされているのが分かりますよね!

実践!COBOLの「サブルーチン」を使ってみよう

では、もう少しだけ実践的な例を見てみましょう!

ここでは、主プログラムからメッセージ文字列を受け取って、それを画面に表示するだけのシンプルなサブルーチンを作ってみます。

まずは、呼び出す側の主プログラム(MAINDISP)です。

IDENTIFICATION DIVISION.
PROGRAM-ID. MAINDISP.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MESSAGE-AREA PIC X(30) VALUE 'Hello from Main Program!'.
PROCEDURE DIVISION.
    DISPLAY '--- Main Program Start ---'.

    *> メッセージ表示サブルーチンを呼び出す
    CALL 'SUBDISP' USING MESSAGE-AREA.

    DISPLAY '--- Main Program End ---'.
    STOP RUN.

次に、呼び出される側のサブルーチン(SUBDISP)です。

IDENTIFICATION DIVISION.
PROGRAM-ID. SUBDISP.
DATA DIVISION.
LINKAGE SECTION.
01 DISPLAY-MESSAGE PIC X(30).
PROCEDURE DIVISION USING DISPLAY-MESSAGE.
    *> 受け取ったメッセージを表示する
    DISPLAY 'Subroutine says: ' DISPLAY-MESSAGE.
    GOBACK.

このプログラムを実行すると、次のような結果になるはずです。

--- Main Program Start ---
Subroutine says: Hello from Main Program!
--- Main Program End ---

メインプログラムで用意したメッセージが、ちゃんとサブルーチンに渡されて表示されていますね!

サンプルプログラムの実行方法(概要)

さて、プログラムのコードは分かりましたね。でも、「で、これをどうやって動かすの?」と思うのが当然です! COBOLプログラムを動かすには、ちょっとした手順が必要になります。

すごく大まかな流れですが、こんな感じです。

  1. ファイルを作る
    まず、さっき紹介した主プログラム(MAINDISP)とサブルーチン(SUBDISP)のコードを、それぞれ別々のテキストファイルに保存します。ファイル名は、PROGRAM-IDに合わせて、例えば MAINDISP.cblSUBDISP.cbl のようにするのが一般的です。(拡張子は .cbl.cob が多いですね)
  2. コンパイルする
    COBOLのコード(ソースコード)は、人間には読めますが、コンピューターはそのままでは理解できません。そこで、「コンパイル」という作業をして、コンピューターが分かる言葉(機械語)に翻訳します。
    主プログラム(MAINDISP.cbl)とサブルーチン(SUBDISP.cbl)の両方を、それぞれコンパイルする必要があります。サブルーチンは、多くの場合「オブジェクトファイル」と呼ばれる中間ファイルや、「ライブラリ」という形でまとめられます。
  3. リンクする
    主プログラムがサブルーチンを呼び出すためには、「あのサブルーチンはここにあるよ!」と教えてあげる必要があります。そのために、主プログラムのオブジェクトファイルと、サブルーチンのオブジェクトファイル(またはライブラリ)を合体させる「リンク」という作業を行います。これで、呼び出し関係が結びつけられます。
  4. 実行する
    コンパイルとリンクが無事に終わると、実行できるファイル(実行可能ファイル)が出来上がります。このファイルを実行すれば、プログラムが動き出し、さっき見たような結果が画面に表示されるはずです!

【とっても大事なこと!】

具体的なコンパイルやリンク、実行のコマンド(命令文)は、あなたが使っている環境によって全然違います! 

使っているパソコンのOS(Windows, macOS, Linuxなど)や、COBOLコンパイラの種類(GNU Cobol, Micro Focus COBOL, 富士通COBOLなど、いろいろあります)によって、やり方が異なります。

なので、「自分の環境ではどうやるんだろう?」と思ったら、使っているCOBOL開発環境のマニュアルや、ネットで「(使っているコンパイラ名) コンパイル方法」のように調べてみるのが一番確実です。

まずは、「ファイル作成 → コンパイル → リンク → 実行」という流れがあるんだな、ということを掴んでおいてください。

サンプルプログラムの解説

今のサンプルプログラムがどう動いているか、もう少し詳しく見てみましょう。

主プログラム(MAINDISP)の動き

  1. WORKING-STORAGE SECTIONで、画面に表示したいメッセージを入れるための変数 MESSAGE-AREA を用意し、初期値として 'Hello from Main Program!' を設定しています。
  2. PROCEDURE DIVISIONに入り、まず '--- Main Program Start ---' を表示します。
  3. 次に、CALL 'SUBDISP' USING MESSAGE-AREA. で、サブルーチン `SUBDISP` を呼び出します。この時、USING句で変数 MESSAGE-AREA をサブルーチンに渡しています。
  4. `SUBDISP` の処理が終わって制御が戻ってきたら、'--- Main Program End ---' を表示して、プログラムを終了します。

サブルーチン(SUBDISP)の動き

  1. LINKAGE SECTIONで、主プログラムから渡されるメッセージを受け取るための変数 DISPLAY-MESSAGE を定義しています。この変数の型(PIC X(30))は、主プログラム側の MESSAGE-AREA と合わせておく必要があります。
  2. PROCEDURE DIVISION USING DISPLAY-MESSAGE. で、DISPLAY-MESSAGE を使ってデータを受け取ることを宣言しています。
  3. 具体的な処理として、DISPLAY 'Subroutine says: ' DISPLAY-MESSAGE. を実行します。ここで、主プログラムから渡された MESSAGE-AREA の内容('Hello from Main Program!')が、DISPLAY-MESSAGE を通して表示されます。主プログラムから渡されたメッセージを、サブルーチンが画面に表示するという連携がここで実現されていますね。
  4. 最後に GOBACK. で、処理を主プログラムに戻します。

このように、USING句とLINKAGE SECTIONを使うことで、プログラム間でデータを簡単に受け渡せるようになるんです。慣れてくると、プログラムの作り方の幅がぐっと広がりますよ!

COBOLの「サブルーチン」を使う上での注意点

サブルーチンはとても便利ですが、使うときにいくつか気をつけておきたい点があります。

初心者の頃に「あれ?うまく動かないぞ?」となりがちなポイントをいくつか挙げておきますね。

  • LINKAGE SECTIONの変数は初期化できない
    LINKAGE SECTIONで定義する変数は、あくまで呼び出し元からデータを受け取るための「受け皿」です。そのため、VALUE句を使って初期値を設定することはできません。もし初期化しようとすると、コンパイルエラーになることが多いでしょう。
  • 呼び出す名前とPROGRAM-IDは一致させる
    CALL文で指定するサブルーチン名(例:CALL 'SUBDISP')と、サブルーチン側のIDENTIFICATION DIVISIONで定義したPROGRAM-ID(例:PROGRAM-ID. SUBDISP.)は、大文字・小文字も含めて完全に一致させる必要があります。ここが違うと、プログラムが見つからずエラーになってしまいます。
  • 渡すデータの数、順番、型、長さを合わせる
    CALL文のUSING句で指定するデータの並び順と、サブルーチン側のLINKAGE SECTIONおよびPROCEDURE DIVISION USING句での受け皿の並び順は、ぴったり合わせる必要があります。また、それぞれのデータの型(数字なのか文字なのかなど)や長さ(桁数や文字数)も一致していないと、予期せぬエラーや誤動作の原因になります。ここは特に注意が必要です!
  • GOBACK文(またはEXIT PROGRAM文)を忘れない
    サブルーチンの処理の最後には、必ずGOBACK.EXIT PROGRAM.を書いて、呼び出し元に制御を戻すようにしましょう。これを忘れると、プログラムが終わらなくなったり、おかしな動きをしたりすることがあります。
  • 意図しないデータの書き換えに注意
    LINKAGE SECTIONを通じてデータを共有しているということは、サブルーチン側で受け取った変数の値を変更すると、呼び出し元のプログラムの変数の値も変わってしまう、ということです。これが便利な場合もありますが、意図せずに元のデータを書き換えてしまわないように注意が必要です。もしサブルーチン内だけで使いたいデータなら、WORKING-STORAGE SECTIONに定義するようにしましょう。

これらの点に気をつければ、サブルーチンをもっと安全に、効果的に使うことができるようになりますよ。

【まとめ】

今回はCOBOLのサブルーチンについて、基本的な考え方から実際の作り方、呼び出し方、データの渡し方、そして注意点まで、一通り見てきました。

最初はちょっと複雑に感じるかもしれませんが、サブルーチンはCOBOLプログラミングにおける強力なテクニックの一つです。

この記事で学んだことをおさらいすると…

  • サブルーチンはプログラムを機能ごとに部品化するもの
  • 部品化すると、コードの再利用や修正が楽になり、プログラムも読みやすくなる
  • CALL文でサブルーチンを呼び出し、GOBACK文で戻ってくる
  • USING句とLINKAGE SECTIONを使って、プログラム間でデータをやり取りできる

これらの知識を使えば、これまで一つの大きなプログラムとして作っていた処理を、もっとスマートに、もっと効率的に作れるようになるはずです。

特に、同じような処理を何度も書いている場合は、それをサブルーチンにまとめるだけで、プログラム全体がかなりスッキリするのを実感できるでしょう。

もちろん、すぐに完璧に使いこなせなくても大丈夫。まずは簡単なサブルーチンから作ってみて、少しずつ慣れていくのが一番です。この記事で紹介したサンプルプログラムを実際に動かしてみるのも、理解を深める良い方法ですよ。

【関連記事】

>> 今さら聞けない「COBOLとは?」

このブログを検索

  • ()

自己紹介

自分の写真
リモートワークでエンジニア兼Webディレクターとして活動しています。プログラミングやAIなど、日々の業務や学びの中で得た知識や気づきをわかりやすく発信し、これからITスキルを身につけたい人にも役立つ情報をお届けします。 note → https://note.com/yurufuri X → https://x.com/mnao111

QooQ