COBOLの外部サブルーチンの使い方を完全ガイド!初心者でもわかる外部プログラムの呼び出し方法
生徒
「COBOLで、他のプログラムを呼び出す方法ってありますか?」
先生
「はい、COBOLでは“外部サブルーチン”を使って、他のプログラムを呼び出すことができます。」
生徒
「外部サブルーチンって何ですか?難しそう…」
先生
「大丈夫ですよ。身近な例えを使って、ゆっくり説明していきますね!」
1. 外部サブルーチンとは?
外部サブルーチンとは、別のCOBOLプログラムを呼び出して使う機能のことです。「サブルーチン」とは、小さな処理のまとまりのことで、別のプログラムから何度も呼び出して使うことができます。
たとえば、料理で言うと「電子レンジ」や「炊飯器」のようなもの。料理の途中で「ご飯を炊く」ときに炊飯器を使うように、プログラムの途中で「計算」や「印刷」などの処理を外のサブルーチンにお願いする、というイメージです。
2. なぜ外部サブルーチンを使うの?
大きなプログラムを一つで作ると、直すのが大変だったり、動きが遅くなったりします。そんなとき、処理を分けて小さく作ると、管理しやすくなります。
また、よく使う処理を「共通部品」として外部にしておけば、他のプログラムからも呼び出して使えるので、とても便利です。プログラムを使い回す(再利用)という考え方です。
3. CALL文で外部サブルーチンを呼び出す
COBOLで外部サブルーチンを呼ぶには、CALL(コール)という命令を使います。CALLは「呼び出す」という意味です。
書き方は以下のようになります。
CALL 'SUB-PROG' USING IN-DATA OUT-DATA
『SUB-PROG』が呼び出したい外部サブルーチンの名前です。
USINGのあとにあるIN-DATAとOUT-DATAは、サブルーチンに渡すデータ(引数)です。これによって、情報を渡したり、結果を受け取ったりします。
4. 静的CALLと動的CALLの違い
CALL文には2つの使い方があります。
- 静的CALL(せいてきコール): プログラム名を文字で直接書きます。
- 動的CALL(どうてきコール): 変数に入ったプログラム名を使います。
まずは静的CALLの例から見てみましょう。
CALL 'PRINT-SUB' USING PRINT-TEXT
これが静的CALLです。呼び出すプログラム「PRINT-SUB」が文字で直接書かれています。
では次に、動的CALLの例です。
01 PROG-NAME PIC X(10).
MOVE 'PRINT-SUB' TO PROG-NAME
CALL PROG-NAME USING PRINT-TEXT
このように、変数にプログラム名を入れてからCALLすると、実行時に呼び出すプログラムを変更できるようになります。
5. 実際の例:計算用の外部サブルーチンを呼び出す
それでは、簡単なサンプルを見てみましょう。足し算の処理を別のサブルーチンに任せる場合の例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN-PROG.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM1 PIC 9(3) VALUE 100.
01 NUM2 PIC 9(3) VALUE 200.
01 RESULT PIC 9(4).
PROCEDURE DIVISION.
CALL 'ADD-SUB' USING NUM1 NUM2 RESULT
DISPLAY "計算結果は " RESULT
STOP RUN.
この例では、外部のADD-SUBというサブルーチンを呼び出し、NUM1とNUM2を渡して、計算された結果をRESULTに受け取っています。
呼び出される側(ADD-SUB)もCOBOLで、こんな風に書かれています。
IDENTIFICATION DIVISION.
PROGRAM-ID. ADD-SUB.
DATA DIVISION.
LINKAGE SECTION.
01 L-NUM1 PIC 9(3).
01 L-NUM2 PIC 9(3).
01 L-RESULT PIC 9(4).
PROCEDURE DIVISION USING L-NUM1 L-NUM2 L-RESULT.
ADD L-NUM1 TO L-NUM2 GIVING L-RESULT
EXIT PROGRAM.
6. LINKAGE SECTIONとは?
LINKAGE SECTION(リンケージ・セクション)は、外からデータを受け取るための特別な場所です。呼び出されたサブルーチンで、他のプログラムから渡されたデータを使うために定義します。
このLINKAGE SECTIONに定義した変数と、CALL文で渡す変数は、順番も型も合わせる必要があります。間違えるとエラーになりますので注意しましょう。
7. 外部サブルーチン使用時の注意点
- プログラム名は大文字で統一するのが一般的です。
- パラメータの数・順番・型は、呼び出す側と呼び出される側で一致させる必要があります。
- EXIT PROGRAMで処理を終了させることを忘れないでください。
- 動的CALLの場合、変数に正しい文字列が入っていないとエラーになります。
これらに注意することで、スムーズに外部サブルーチンを活用できます。
8. 外部サブルーチンを使うメリット
初心者にとっては少し難しそうに感じるかもしれませんが、外部サブルーチンを使うことで以下のようなメリットがあります。
- プログラムを小さく分けて管理できる
- 同じ処理を何度も使えるので、無駄な繰り返しがなくなる
- 修正や確認がしやすくなるので、バグを見つけやすい
まるで料理の「レシピ」を分けて管理するようなものです。「スープの作り方」「サラダの作り方」「ご飯の炊き方」をそれぞれレシピとして分けておけば、必要な時にすぐ使えますよね。
まとめ
COBOLで外部サブルーチンを呼び出す方法や、その仕組み、静的CALLと動的CALLの特徴、LINKAGE SECTIONの役割などを振り返ると、外部サブルーチンは大規模システムにおいて欠かせない重要な構成要素であることがよく理解できます。特に、複数のプログラム間で共通処理を再利用できる点は、大規模現場ならではの作業効率化につながり、安定した運用の基盤になります。外部サブルーチンは、単なる「別プログラムの呼び出し」ではなく、システム全体の構造を整理し、保守しやすくし、処理の明確化と再利用性向上にとても役立ちます。さらに、CALL文によって外部プログラムへ正しくデータを渡し、結果を受け取る仕組みを理解することで、COBOLのデータ連携やモジュール分割の意義も深く実感できるようになります。 また、静的CALLと動的CALLの違いを理解することは、柔軟なプログラム設計に直結します。特に動的CALLは、実行時に呼び出すプログラムを切り替えることができるため、入力に応じて処理を変えたい場合や、可変的な構造を必要とする業務ロジックでは大きな効果を発揮します。COBOLの外部サブルーチンを活用することで、プログラムを小さく分割して管理でき、必要な箇所だけ修正すれば全体に波及しないメリットがあります。 CALL文、USING句、LINKAGE SECTIONの関連性を正確に理解することは、COBOLにおけるパラメータ受け渡しの基礎であり、順番や型の一致が非常に重要である理由も実務を通して実感しやすい部分です。特にLINKAGE SECTIONにおける受け取り定義は、外部サブルーチンの振る舞いを決める大切な要素で、ここを誤ると意図した値を正しく受け取れず、結果として処理の誤動作につながります。大規模COBOLシステムでは、数百、数千のプログラムが連携するケースも多く、外部サブルーチンの正確な理解は不可欠な技術となります。 以下は、学んだ内容を整理するための外部サブルーチン構造をまとめたサンプルコードです。
IDENTIFICATION DIVISION.
PROGRAM-ID. MAIN-PROG.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 IN-VALUE1 PIC 9(3) VALUE 050.
01 IN-VALUE2 PIC 9(3) VALUE 070.
01 OUT-VALUE PIC 9(4).
PROCEDURE DIVISION.
DISPLAY "外部サブルーチン呼出開始".
CALL 'CALC-SUB' USING IN-VALUE1 IN-VALUE2 OUT-VALUE
DISPLAY "計算結果:" OUT-VALUE
STOP RUN.
IDENTIFICATION DIVISION.
PROGRAM-ID. CALC-SUB.
DATA DIVISION.
LINKAGE SECTION.
01 L-IN1 PIC 9(3).
01 L-IN2 PIC 9(3).
01 L-OUT PIC 9(4).
PROCEDURE DIVISION USING L-IN1 L-IN2 L-OUT.
ADD L-IN1 TO L-IN2 GIVING L-OUT
EXIT PROGRAM.
このように、メインプログラムからCALL文を使い、外部のCALC-SUBを呼び出し、USING句を通じて値を受け渡すことで、柔軟で整理されたプログラム構成を実現できます。外部サブルーチンは、COBOLの強みである安定性・再利用性・保守性の高さを支える根幹であり、初心者の段階でしっかりと理解しておくことで実務でも大きな助けになります。 また、外部サブルーチンを扱う際には、プログラム名の統一、EXIT PROGRAMの書き忘れ防止、USING句の順番・型の整合性などの注意点を守ることで、予期せぬエラーを回避でき、長期運用にも耐える堅牢なCOBOLシステムを作ることができます。複雑な業務ロジックを扱う現場では、このような基本の積み重ねが品質確保に直結していきます。
生徒
「先生、外部サブルーチンって複雑だと思っていましたが、CALL文の仕組みが分かると意外と理解しやすいですね!」
先生
「そうなんだよ。基本的な考え方はシンプルで、必要な処理を外に任せて呼び出すだけなんだ。プログラムの役割を分けることで、整理しやすくなるんだよ。」
生徒
「LINKAGE SECTIONで受け取るデータの順番や型が大事という理由もよく分かりました!間違えると正しい計算ができなくなるんですね。」
先生
「その通り。外部サブルーチンは複数のプログラムと連携して動くから、受け渡しが正しいかどうかがとても重要になるんだ。」
生徒
「動的CALLも便利ですね。実行時に呼び出すプログラムを切り替えられるのは業務でも役立ちそうです。」
先生
「柔軟な設計が必要な場面では特に重宝するよ。今回学んだ外部サブルーチンの仕組みをしっかり活かして、より複雑なCOBOLプログラムにも挑戦してみよう。」