カテゴリ: COBOL 更新日: 2025/12/12

COBOLのINITIALIZE文を完全ガイド!初心者でもわかる変数初期化の基本と注意点

INITIALIZE文を使った変数初期化と注意点
INITIALIZE文を使った変数初期化と注意点

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

生徒

「先生、COBOLで変数を最初の状態に戻す方法ってありますか?」

先生

「良い質問ですね。COBOLでは、INITIALIZE(イニシャライズ)文を使うと、変数を簡単に初期化できますよ。」

生徒

「初期化って、どんなことをしてくれるんですか?」

先生

「初期化とは、変数の中身を最初の状態、つまり“空っぽ”や“ゼロ”に戻すことです。プログラムを正しく動かすためにはとても大切な操作なんです。」

生徒

「なるほど!じゃあ、そのINITIALIZE文の使い方を教えてください!」

先生

「もちろん!では、基本的な使い方から順番に見ていきましょう。」

1. INITIALIZE文とは?

1. INITIALIZE文とは?
1. INITIALIZE文とは?

COBOLのINITIALIZE文は、変数を初期状態に戻すための命令文です。初期化(しょきか)とは、変数の中身をあらかじめ決まった値に戻すことをいいます。例えば、数値なら「0」に、文字列なら「空白(スペース)」に戻してくれます。

プログラムを作るとき、変数に古い値が残ったままだと、思わぬ計算ミスや表示エラーが起きることがあります。そんなときに、INITIALIZEを使うことで、変数をきれいにリセット(まっさらに)できるのです。

2. INITIALIZE文の基本構文

2. INITIALIZE文の基本構文
2. INITIALIZE文の基本構文

基本的な書き方はとてもシンプルです。


INITIALIZE 変数名

たとえば、下のように書くと、変数を初期化できます。


DATA DIVISION.
WORKING-STORAGE SECTION.
01  WS-NAME    PIC A(10).
01  WS-AGE     PIC 9(3).

PROCEDURE DIVISION.
    MOVE "TARO" TO WS-NAME
    MOVE 25 TO WS-AGE
    DISPLAY "初期化前: " WS-NAME WS-AGE
    INITIALIZE WS-NAME WS-AGE
    DISPLAY "初期化後: " WS-NAME WS-AGE
    STOP RUN.

実行すると、結果は次のようになります。


初期化前: TARO        025
初期化後:            000

このように、文字の変数(WS-NAME)は空白に、数値の変数(WS-AGE)はゼロに戻っています。

3. INITIALIZE文で初期化される内容

3. INITIALIZE文で初期化される内容
3. INITIALIZE文で初期化される内容

INITIALIZEは、変数の種類(データ型)によって、設定される値が異なります。以下が基本的なルールです。

  • 数値項目(PIC 9など):ゼロ(0)が入ります。
  • 文字項目(PIC AやXなど):空白(スペース)が入ります。
  • 編集項目(PIC Zや$などを含む):空白になります。
  • 再定義項目(REDEFINES):初期化されません。

このように、項目の種類ごとに自動で適切な初期値をセットしてくれるので、とても便利です。

4. VALUE句との違いに注意!

4. VALUE句との違いに注意!
4. VALUE句との違いに注意!

COBOLでは、変数を定義するときにVALUE句(バリューく)を使って、最初の値を設定することができます。


01  WS-COUNT   PIC 9(3) VALUE 5.

しかし、INITIALIZE文を使っても、このVALUE句に書いた値は再設定されません。
つまり、INITIALIZEを使っても、VALUE句の値には戻らないのです。これが初心者の方がよく混乱するポイントです。

次の例を見てみましょう。


DATA DIVISION.
WORKING-STORAGE SECTION.
01  WS-COUNT   PIC 9(3) VALUE 5.

PROCEDURE DIVISION.
    MOVE 123 TO WS-COUNT
    DISPLAY "初期化前: " WS-COUNT
    INITIALIZE WS-COUNT
    DISPLAY "初期化後: " WS-COUNT
    STOP RUN.

初期化前: 123
初期化後: 000

見てわかるように、初期化後の値はVALUE 5ではなく「0」になります。INITIALIZE文はVALUE句の値には戻さないということを覚えておきましょう。

5. INITIALIZE文のオプション

5. INITIALIZE文のオプション
5. INITIALIZE文のオプション

INITIALIZE文には、いくつかのオプションを付けることもできます。代表的なのが、REPLACING(リプレイシング)句です。これは、特定の種類のデータだけを指定して、別の値で初期化する方法です。


INITIALIZE WS-DATA
    REPLACING NUMERIC DATA BY 9
               ALPHANUMERIC DATA BY "*"

この例では、数値データは9、文字データは「*(アスタリスク)」で初期化されます。つまり、自分で初期化したい値を自由に設定できるのです。

6. INITIALIZEを使うときの注意点

6. INITIALIZEを使うときの注意点
6. INITIALIZEを使うときの注意点

便利なINITIALIZE文ですが、使うときにはいくつかの注意が必要です。

① 再定義(REDEFINES)には効かない

再定義された項目は初期化の対象外です。再定義とは、同じメモリ領域を別の形で使う仕組みのことです。もし必要なら、MOVE文で手動で初期化しましょう。

② GROUP項目を初期化するときは注意

INITIALIZE文でグループ項目(複数の項目をまとめたもの)を初期化すると、下位の項目もまとめて初期化されます。部分的に残したい値がある場合は、個別に初期化する方が安全です。

③ パフォーマンスに注意

大きなデータ構造を頻繁に初期化すると、処理が遅くなることがあります。初期化する回数を減らす工夫も大切です。

7. INITIALIZE文のまとめ方のコツ

7. INITIALIZE文のまとめ方のコツ
7. INITIALIZE文のまとめ方のコツ

複数の変数をまとめて初期化することで、コードをすっきり整理できます。例えば次のように書くと、複数のデータを一度にきれいにできます。


INITIALIZE WS-NAME WS-AGE WS-ADDRESS

プログラムの最初や、繰り返し処理のたびに初期化する場所をまとめておくと、ミスを減らすことができます。

8. 実際の開発での使いどころ

8. 実際の開発での使いどころ
8. 実際の開発での使いどころ

実務のCOBOLシステムでは、帳票処理やデータ更新など、同じ変数を何度も使うケースが多くあります。そんなときにINITIALIZEを使って変数をクリアにすることで、前回の処理結果が次の処理に影響しないようにできます。

たとえば、売上データを1件ずつ読み込む処理で、前の顧客名が残ってしまうと正しい結果になりません。そこで、ループの最初にINITIALIZE文を書いておくと、毎回リセットされ、正しい処理が行えます。

まとめ

まとめ
まとめ

INITIALIZE文で理解する変数初期化の重要性

この記事では、COBOLのINITIALIZE文について、基本的な使い方から注意点、実務での活用場面までを丁寧に確認してきました。 INITIALIZE文は、変数の中身を決められた初期状態に戻すための命令であり、数値項目はゼロ、文字項目は空白というように、 データ型に応じた初期化を自動で行ってくれる便利な仕組みです。 プログラムを正しく、安全に動かすためには、変数の初期化は欠かせない基本操作であり、 COBOLを学ぶうえで必ず身につけておきたい考え方のひとつです。

特に初心者の方が最初につまずきやすいのが、「変数には前回の値が残る」という点です。 プログラムは上から順番に処理されますが、変数の中身は自動では消えません。 そのため、意図しない値が残ったまま処理が進むと、計算結果や表示内容が狂ってしまいます。 INITIALIZE文を使えば、そのようなトラブルを未然に防ぎ、毎回同じ条件から処理を始めることができます。 これは業務システムの安定性を支える、とても重要な役割です。

また、VALUE句との違いを正しく理解することも大切なポイントでした。 VALUE句は「定義時の初期値」を決めるものであり、INITIALIZE文は「実行中にゼロや空白へ戻す」ための命令です。 INITIALIZEを実行してもVALUE句の値には戻らない、という仕様を理解していないと、 思った通りに動かない原因になりがちです。 この記事で紹介したサンプルを通して、その違いをしっかり確認できたはずです。

さらに、REDEFINES項目が初期化されない点や、グループ項目を初期化した場合の影響範囲など、 実務で注意すべきポイントも確認しました。 特に大きなデータ構造を扱う場合は、どこまで初期化されるのかを意識して書かないと、 思わぬデータ消失につながることがあります。 INITIALIZE文は便利な反面、影響範囲が広いため、使いどころを考えながら利用する姿勢が大切です。

まとめとして確認するシンプルな初期化サンプル


       IDENTIFICATION DIVISION.
       PROGRAM-ID. INIT-SUMMARY.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NAME    PIC A(10).
       01 WS-SCORE   PIC 9(3).
       PROCEDURE DIVISION.
           MOVE "HANAKO" TO WS-NAME
           MOVE 85 TO WS-SCORE
           DISPLAY "初期化前:" WS-NAME WS-SCORE
           INITIALIZE WS-NAME WS-SCORE
           DISPLAY "初期化後:" WS-NAME WS-SCORE
           STOP RUN.

初期化前:HANAKO     085
初期化後:          000

このサンプルのように、INITIALIZE文を使えば、複数の変数をまとめて安全に初期状態へ戻すことができます。 繰り返し処理の前や、データを再利用する直前に初期化を行うことで、 プログラム全体の見通しが良くなり、保守もしやすくなります。 初期化の位置を意識して書くことが、読みやすいCOBOLプログラムへの第一歩です。

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

生徒:「INITIALIZE文って、ただゼロにするだけじゃなくて、プログラムを安定させるために大事なんですね。」

先生:「その通りです。変数を正しく初期化することで、前の処理の影響を防げます。」

生徒:「VALUE句と混同していましたけど、役割が違うのも分かりました。」

先生:「そこを理解できたのは大きいですね。初心者がよく間違えるポイントです。」

生徒:「ループの最初にINITIALIZEを書く理由も納得できました。」

先生:「実務では必須の考え方です。正しい初期化は品質の高いプログラムにつながります。」

生徒:「これからは、変数を使う前に初期化を意識します。」

先生:「その意識があれば、COBOLの基礎はしっかり身についていますよ。」

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