カテゴリ: COBOL 更新日: 2025/07/05

COBOLのREDEFINESを使ったデータ再定義の仕組みとは?初心者にもわかるやさしい解説

REDEFINESを使ったデータ再定義の仕組み
REDEFINESを使ったデータ再定義の仕組み

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

生徒

「先生、COBOLのREDEFINES(リディファインズ)って何に使うんですか?なんだか難しそうです……」

先生

「いい質問ですね。REDEFINESは、一つのデータ領域を別の形で再利用できる仕組みなんですよ。」

生徒

「ひとつの変数を、違う形でも使えるってことですか?」

先生

「そうです!身近な例を使ってわかりやすく説明しますね。」

1. REDEFINESとは?COBOLの再定義を理解しよう

1. REDEFINESとは?COBOLの再定義を理解しよう
1. REDEFINESとは?COBOLの再定義を理解しよう

COBOLのREDEFINES(リディファインズ)は、ひとつのメモリ領域(変数の記憶場所)を、複数の形式で使い分けるための機能です。英語の“redefine”は「再定義する」という意味があり、COBOLでもまさにこの意味で使われます。

たとえば、ひとつの変数に文字列データを入れたり、数値データとして扱ったりすることができます。同じデータを目的に応じて違う形で使いたい時にとても便利です。

2. REDEFINESの具体的な例を見てみよう

2. REDEFINESの具体的な例を見てみよう
2. REDEFINESの具体的な例を見てみよう

ここでは、REDEFINESを使った簡単なサンプルを紹介します。たとえば、4桁の郵便番号と、2つに分けた市区町村コードと町域コードを同じメモリ領域に持たせる場合などに活用できます。


       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE-REDEFINES.

       DATA DIVISION.
       WORKING-STORAGE SECTION.

       01 ZIP-CODE-AREA         PIC X(4) VALUE "1234".
       01 LOCATION-DETAILS REDEFINES ZIP-CODE-AREA.
           05 CITY-CODE         PIC X(2).
           05 TOWN-CODE         PIC X(2).

       PROCEDURE DIVISION.
           DISPLAY "郵便番号: " ZIP-CODE-AREA
           DISPLAY "市コード: " CITY-CODE
           DISPLAY "町コード: " TOWN-CODE
           STOP RUN.

このプログラムでは、ZIP-CODE-AREAが元の変数で、LOCATION-DETAILSはその再定義です。つまり、同じ4文字分の領域を使って、CITY-CODETOWN-CODEという形に分けて使っているのです。

実行結果


郵便番号: 1234
市コード: 12
町コード: 34

このように、元の変数の中身を、別の構造で見直すことができるのがREDEFINESの大きな特徴です。

3. REDEFINESのルールと注意点

3. REDEFINESのルールと注意点
3. REDEFINESのルールと注意点

REDEFINESを使うときは、いくつかのルールと注意点があります。

  • 同じレベル番号(たとえば01レベルなど)で宣言されたデータにしか使えません。
  • REDEFINESを使う側が、元の変数のすぐ後に続けて書かれる必要があります。
  • REDEFINESを使うと、どちらか一方しか有効にならない(同じメモリを使っているため)ので、片方に値を入れるともう一方の中身も変わります。

REDEFINESはとても便利な機能ですが、意図せずデータが上書きされることがあるため、使い方には注意が必要です。

4. 実生活でのREDEFINESのイメージ

4. 実生活でのREDEFINESのイメージ
4. 実生活でのREDEFINESのイメージ

プログラミング初心者でも理解しやすいように、REDEFINESを実生活に例えてみましょう。

たとえば、「お財布」に1000円入っていたとします。これは数字として「1000」と見えます。でも、別の見方をすると、「500円玉が2枚」や「100円玉が10枚」と見えるかもしれません。

このように、「同じお金(データ)を、別の視点(形式)で見ている」状態が、REDEFINESの考え方とよく似ています。

5. 文字列と数値の再定義例

5. 文字列と数値の再定義例
5. 文字列と数値の再定義例

もう一つの例として、文字列と数値の変換にREDEFINESを使うケースを見てみましょう。以下のように、文字列として受け取ったデータを数値に変換せず、そのまま再定義して扱うことができます。


       01 INPUT-DATA             PIC X(4) VALUE "0050".
       01 NUMERIC-VALUE REDEFINES INPUT-DATA PIC 9(4).

       PROCEDURE DIVISION.
           DISPLAY "文字列データ: " INPUT-DATA
           DISPLAY "数値としての扱い: " NUMERIC-VALUE
           STOP RUN.

実行結果


文字列データ: 0050
数値としての扱い: 0050

この例では、INPUT-DATAは文字列(X型)ですが、NUMERIC-VALUEは数値(9型)として再定義しています。実際には同じ値を使っていますが、使う時に「数値」として扱いたいのか、「文字列」として表示したいのかによって、REDEFINESを使い分けられるのです。

6. なぜREDEFINESが使われるのか?

6. なぜREDEFINESが使われるのか?
6. なぜREDEFINESが使われるのか?

REDEFINESは、限られたメモリ資源を効率よく使うために設計された機能です。昔のコンピュータは今ほどメモリが豊富ではなかったため、同じ領域を別の意味で使いまわすという工夫が求められました。

現代のシステムでも、ファイル形式や外部データとの連携で、同じデータをさまざまな角度で処理したい場面があります。そのため、REDEFINESは今でも現役で使われている大事な機能です。

7. REDEFINESと他のCOBOL機能の関係

7. REDEFINESと他のCOBOL機能の関係
7. REDEFINESと他のCOBOL機能の関係

REDEFINESは、COBOLの変数定義(DATA DIVISION)の中で使う重要な構文のひとつです。この機能を理解することで、COBOLのデータ型や構造の仕組みがさらに深くわかるようになります。

また、ファイルデータを読み込んだあとに形式を変える場面や、異なるフォーマットのデータを共通で扱う場面などでREDEFINESは非常に役立ちます。

カテゴリの一覧へ
新着記事
COBOLの変数名の付け方を解説!初心者でもわかる命名規則とコツ
C#のbreakとcontinueの使い方!ループ制御の基本テクニック
COBOLのFILLERの使い方とは?未使用領域を上手に管理する基本テクニック
C#のforeach文の基本!配列やコレクションを簡単に繰り返し処理する方法
人気記事
No.1
Java&Spring記事人気No1
COBOLのDISPLAY文の使い方を完全ガイド!初心者でもわかる出力方法
No.2
Java&Spring記事人気No2
C#のwhile文の使い方!条件付きループを基礎から学ぼう
No.3
Java&Spring記事人気No3
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.4
Java&Spring記事人気No4
C#のfor文の基本!繰り返し処理をわかりやすく解説