COBOLのUSAGE句(DISPLAY・COMPなど)をやさしく解説!初心者でもわかる効率化の基本
生徒
「COBOLのUSAGE(ユーセージ)って何のために使うんですか?よくわからなくて…」
先生
「いい質問ですね。USAGE句は、データの使い方やコンピュータ内での保存の仕方を指定するために使います。」
生徒
「保存の仕方?なんだか難しそうです…」
先生
「たとえば“表示専用なのか”、“計算に特化しているのか”を選ぶための設定なんです。具体的な使い方を一緒に見てみましょう!」
1. USAGE句とは?
USAGE句(ユーセージ句)は、COBOLで使うデータが「どのように格納され、どんな用途で使われるか」を指定するためのものです。たとえば、「文字を表示するため」や「計算を効率よく行うため」に使い分けることができます。
COBOLの変数は、単に「数値」や「文字」を表すだけでなく、パソコンの中でどういう形式で保存されるかを決めることで、メモリの節約や計算の高速化ができるようになります。
初心者にとってはちょっと難しそうに感じるかもしれませんが、料理で使う器のサイズや形を選ぶようなものと考えてみてください。表示するのに向いた「お皿」もあれば、計算に強い「ボウル」もあるのです。
2. USAGE DISPLAY:画面に表示したりする一般的な形式
USAGE DISPLAY(ユーセージ・ディスプレイ)は、COBOLで最もよく使われる形式です。この指定を使うと、変数は文字や数字を「人が読める形」で扱うことができます。特に画面に表示したり、印刷したりする場合に使われます。
DISPLAYは、パソコンの中では「1文字=1バイト(8ビット)」で保存されるため、とてもわかりやすい形式です。
例を見てみましょう。
01 USER-NAME PIC X(10) USAGE DISPLAY.
01 AGE PIC 99 USAGE DISPLAY.
この例では、「USER-NAME」や「AGE」は、どちらも人が見やすい形で保存されます。「X(10)」は文字列10文字分、「99」は2桁の数字を意味します。
3. USAGE COMP:計算処理を高速にする形式
USAGE COMP(コンプと読みます)は、「計算に特化した形式」で、パソコンの中では2進数(二進法)で保存されます。つまり、人が読める形ではなく、機械が扱いやすい形に変換して保存されます。
そのため、数値の四則演算(たし算、ひき算、かけ算、わり算)などをたくさん行う処理では、USAGE COMPを使うことでスピードアップが期待できます。
具体例を見てみましょう。
01 TOTAL-AMOUNT PIC 9(6) USAGE COMP.
このように書くと、「TOTAL-AMOUNT」は、6桁の数値を「2進数」で保存し、計算処理がとても高速になります。ただし、DISPLAYのように直接画面表示すると文字化けする可能性があるので注意が必要です。
4. USAGE COMP-3:少ないメモリで多くの数字を扱いたいとき
USAGE COMP-3(コンプスリー)は、「パック10進数」と呼ばれる特殊な形式で、メモリを節約しながら数字を保存したいときに使います。
これは、1バイトに2桁の数字を詰め込んで保存する仕組みで、金額などの桁数が多いデータに使われることが多いです。
たとえば、以下のように記述します。
01 SALES-AMOUNT PIC 9(7)V99 USAGE COMP-3.
この変数「SALES-AMOUNT」は、「9999999.99」のように最大9桁の数値(小数2桁)を扱えますが、メモリの使用量は非常に少なく済みます。
ただし、こちらも画面表示には向いておらず、DISPLAYに変換してから表示する必要があります。
5. USAGEの違いを実行例で見てみよう
では、実際にUSAGE DISPLAYとUSAGE COMPを比較して、画面に表示してみます。
IDENTIFICATION DIVISION.
PROGRAM-ID. USAGE-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 DISPLAY-VALUE PIC 9(4) USAGE DISPLAY VALUE 1234.
01 COMP-VALUE PIC 9(4) USAGE COMP VALUE 1234.
PROCEDURE DIVISION.
DISPLAY "DISPLAY形式: " DISPLAY-VALUE.
DISPLAY "COMP形式 : " COMP-VALUE.
STOP RUN.
出力結果は次のようになります。
DISPLAY形式: 1234
COMP形式 : (文字化けまたは意図しない表示)
このように、COMPで定義した変数を直接DISPLAYすると、うまく表示されないことがあります。これが「人に見せるか」「機械に使わせるか」の違いです。
6. 初心者が注意すべきポイント
- 画面に出力するならUSAGE DISPLAYを使いましょう。
- 数値計算をたくさんする処理ではUSAGE COMPを使うと高速になります。
- メモリを節約したいならUSAGE COMP-3も選択肢になります。
- ただし、COMPやCOMP-3は表示に不向きなため、表示の前に変換が必要です。
用途に合わせて使い分けることで、無駄のないプログラムを作ることができます。
まとめ
ここまで、COBOLのUSAGE句についてじっくりと学びながら、DISPLAYやCOMP、さらにCOMP-3といった形式の違いを丁寧に整理してきました。最初は言葉の響きだけで難しく感じてしまう人も多いですが、USAGE句はとても身近で、目的に応じて正しく選ぶことで、変数の扱いが格段に使いやすくなる重要な仕組みです。ひらがなや数字をそのまま画面に見せたいとき、計算をすばやく処理したいとき、少ないメモリで金額の計算を行いたいときなど、場面ごとにふさわしい形を選ぶことができ、それがCOBOLで作られた多くの業務システムを支えています。文字や数字の表示のために使うDISPLAYは、人が読みやすい形で扱えるため、画面表示や帳票出力にとても向いていました。数字をそのまま「見せたい場所」では、この形式が一番親しみやすい選択肢になると言えるでしょう。
一方、計算を何度も繰り返し行うような処理では、COMPを使うことで、機械が扱いやすい形の二進数に変換して保存することができます。人間が読むと意味がわかりにくい形になりますが、機械にとっては軽くて速い動きができる大きな利点があります。大量の数値を扱う大規模な処理や、検索と集計を何度も繰り返すシステムでは、COMPが活躍する場面がとても多く、画面表示よりも計算を優先したいときに選ばれることがよくあります。同じように、数字が何桁も続く金額や商品数を少ないメモリで管理したい場合には、COMP-3という形式が役立ちました。ひとつのバイトに二桁の数字を詰め込む仕組みはとても効率的で、記憶装置が貴重だった時代から長く使われ続けてきた理由がよくわかります。
しかし、それぞれの形式には得意と不得意がありました。DISPLAYなら画面表示にとても向いていますが、計算が得意とは言えません。COMPなら計算には優れていますが、表示には向いていません。COMP-3はメモリの節約ができる一方で、表示するときには専用の変換が必要でした。このように、どんなプログラムにも万能な選択肢があるわけではなく、目的に合わせてちょうど良い器を選ぶことが大切だということが、USAGE句の学習を通して理解しやすくなったのではないでしょうか。「なぜこの形式を使うのか」という理由を考えながら選べるようになると、COBOLのプログラムはぐんと読みやすく、そして作りやすくなります。
また、どのUSAGE句を使っていても、DISPLAYでそのまま見せられるかどうかを意識することはとても大事です。画面に出す必要があるのにCOMPのままDISPLAYしてしまうと、文字化けや意図しない結果になることがあり、実務ではよくあるつまずきポイントでもあります。開発者が直接見るログ、利用者が見る帳票、画面に表示する金額など、どこで見られる値なのかを考えることで、形式の選び方も自然に決まっていきます。もし迷ったときには、DISPLAYなら見やすく、COMPなら速く、COMP-3なら節約できる、という三つの軸で考えるととても整理しやすくなるはずです。
実際にサンプルプログラムを動かしてみると、この違いがさらにわかりやすくなります。数字が同じでも、内部の扱われ方や画面出力の結果が変わることで、COBOLのデータ管理の考え方がとてもはっきりと感じられます。ここでもう一度、わかりやすい例を用意しました。
USAGE句のサンプルプログラム
IDENTIFICATION DIVISION.
PROGRAM-ID. USAGE-CHECK.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRICE-DISPLAY PIC 9(6) USAGE DISPLAY VALUE 123456.
01 PRICE-COMP PIC 9(6) USAGE COMP VALUE 123456.
01 PRICE-COMP3 PIC 9(6) USAGE COMP-3 VALUE 123456.
PROCEDURE DIVISION.
DISPLAY "DISPLAY形式 : " PRICE-DISPLAY.
DISPLAY "COMP形式 : " PRICE-COMP.
DISPLAY "COMP-3形式 : " PRICE-COMP3.
STOP RUN.
DISPLAY形式は読みやすく表示できますが、COMPとCOMP-3はそのままでは意図した数字で表示されないことが多く、作った人だけが正しく扱える裏側の形式として使われます。内部で扱うときにはとても便利ですが、利用者に見せる前にはDISPLAY形式へ変換するなど、ひとつ手順を挟むことで、安全で丁寧なプログラムが作れるようになります。このような積み重ねによって、COBOLのシステムは長い年月にわたり改修されながら安定して動き続けているのだと考えると、USAGE句はとても奥深い役割を持った存在だと実感できます。
さらに、USAGE句を意識すると、同じデータでも全く別の目的で使い分けることができるようになります。たとえば、計算用の値をCOMPで保存し、結果を画面に見せるときだけDISPLAYに変換するなど、必要な場面に合わせて柔軟に動かせます。これは、料理で材料を切り分けて器に盛り付けるような感覚に似ていて、どこで使うかを考えて形を変えるという考え方は、初心者でも理解しやすい発想ではないでしょうか。ひとつひとつの設定には意味があり、それを選び取る判断力が身につくと、COBOLでできることがとても多く感じられるはずです。
今回学んだことの中で、特に大切なのは「表示が必要かどうか」「計算が多いのか」「メモリを節約したいのか」を考えながらUSAGE句を選ぶことでした。プログラムはただ動けばよいのではなく、読みやすさや保守のしやすさもとても重要です。数年後に別の人が見ても、なぜその設定が選ばれているのかがわかるプログラムは、長く使われるシステムではとても価値があります。COBOLが支えてきた多くの企業システムは、このような積み重ねによって安定して動き続けています。
もし現場で作られたシステムの中に、DISPLAYやCOMP、COMP-3が混ざって登場しても、戸惑う必要はありません。それぞれに役割があり、意図を持って書かれています。今回の学習で、USAGE句の意味がしっかりと理解できたなら、どんなシステムを読んでも、「なぜこの形式なのか」を読み解くことができるようになるでしょう。知識は繰り返し使うことで深まっていきますので、今後の学習でも積極的に試してみてください。
生徒
「数字の保存の仕方が違うだけで、こんなに特徴が変わるとは思いませんでした。DISPLAYは見やすくて、COMPは速くて、COMP-3は節約できるんですね。」
先生
「そうなんです。用途に合わせて選ぶことで、無駄のないプログラムが書けるようになりますよ。特に計算が多い処理ではCOMPが役立ちます。」
生徒
「画面表示するときに間違えやすいところもわかりました。COMPやCOMP-3はそのまま出すと文字化けしたりすることがあるんですね。」
先生
「その通りです。DISPLAYは見せるため、COMPは計算のためと覚えると整理しやすくなりますよ。」
生徒
「次は、自分でも変数を作りながら試してみます。USAGEの違いを意識して書いてみると面白そうです。」
先生
「とても良いですね。実際に手を動かすことで、さらに理解が深まりますよ。これからもいろいろな形式に触れてみましょう。」