COBOL言語で良いコードを書くために学ぶべき3つの事項|学習講座
COBOL(コボル)言語で良いコードを書くために学ぶべき事とは

良いコードを書くメリット
良いコードとは何でしょう?それは、実際にそのプログラムを活用する人がメリットを感じる事ができるかどうかという事になるでしょう。まずは実際に良いコードを活用する人(自分、自分以外の人(例えばチームメンバー))のメリットを考え、良いコードとは何かを考えてみましょう。
(自分のメリット)
- コードの知識(書き方)が深まり、プログラミングスピードが上がる。
 - コードの可読性が高まり、プログラムの品質が上がる。
 - プログラムの維持(改修)がしやすくなる。
 
このように良いコードとは、開発生産性の向上につながる「書き方」だったり、プログラムの品質向上につながるような「書き方」という事がわかると思います。
(自分以外の人のメリット)
- プログラムの製造が安定する事で、開発工数・納期が把握しやすくなる。
 - コードを流用する事で、開発生産性・品質が上がる。
 - コードの調査がしやすいため、問い合わせ回答や問題解決のスピードが上がる。
 
このように良いコードとは、プログラムを活用する人を「サポート」し、実際にプログラミングする人やそれを管理する人の「信頼を得る」ものである事がわかると思います。
良いコードを書くために学ぶべき事
良いコードを書くメリットを理解いただけたところで、ここからは良いコードを書くために学ぶべき事を3点ご紹介します。
1.人のプログラムに触れる、真似する。
プログラムを覚えたての初心者の方は、とにかくいろんな人のプログラムを読んだり、真似したりを繰り返す事が上達の近道です。数多くのプログラムに触れる事で、コードの知識が深まり、自分のコードの見やすさや問題点に気付く事になります。特に以下のポイントを意識して参考にするといいでしょう。
・データ定義(変数名)の書き方
データ定義(変数名)は、自由に記述できる分、後から見返しても、わかりやすい名前になっているかがポイントです。良いコードを書く人は、ファイル入出力、条件判断、繰り返し処理、配列、DBアクセスなど、そのデータ定義が何を目的にして定義されているかが、ひと目でわかるような書き方になっています。
・頻繁に登場する処理の書き方
繰り返し処理、ファイルのシーケンスチェックやマッチング処理、DBアクセスなど、COBOL言語では、頻繁に登場する処理がいくつかあります。良いコードを書く人は、プログラムが変わっても、このように頻繁に使われる処理は同じように書くよう注意されています。
・コメントの書き方
意外と差がつくのがコメントです。特に他の人が利用する事を考えない人は、ほとんどコメントが書かれていません。コメントを記載していないと書いた本人でも、その内容がわからなくなる事があります。データ定義や複雑な処理の前に概要を記載するなど、良いコードを書く人は、常に他の人に見られる事を意識したコメントが記載されています。
2.プログラムパターンを考える。
プログラミング経験のある中級者以上の方は、より良いコードを書くためにプログラミングのパターンを考えるようにしてみましょう。このパターンを理解しておくと、実用的なプログラムを開発する時に、より生産性と品質の高いプログラムを作成する事ができるようになります。
ご参考までにCOBOL言語でよく利用されているプログラムパターンを上げておきます。こういうパターンごとのコードの書き方を覚えておくと、プログラミングの幅がグッと広がります。
| プログラムパターン | 概要 | 
|---|---|
| ファイルToファイル | ・1つのファイルを読込み、レコード編集後、1つのファイルに出力。 | 
| ファイル分割 | ・1つのファイルを読込み、レコード編集分割後、2つのファイルに出力。 | 
| ファイルマッチング | ・マスターファイルとトランザクションファイルをマッチングし、照合データ、不照合データをファイルに出力。 | 
| DB検索(1件) | ・検索キーにてDBを検索(SELECT INTO:1件)。 | 
| DB検索(複数件) | ・検索キーにてDB検索(FETCH:複数件)。 | 
| DB新設 | ・DBにレコードを追加。 | 
| DB更新 | ・DBのレコードを更新。 | 
| DB削除 | ・DBのレコードを削除。 | 
3.プログラムパターンを考える。
プログラムパターンを学んだ方は、次にそのパターンをテンプレート化する事を学びましょう。テンプレートは誰でも使えるように記述する必要があるので、単にプログラムを書くよりも高度な作業になります。
以下、ご参考までに、ファイルToファイルのサンプルプログラムを掲載しておきます。
template1.cob
- IDENTIFICATION DIVISION.
 - PROGRAM-ID. TEMPLATE1.
 - ENVIRONMENT DIVISION.
 - INPUT-OUTPUT SECTION.
 - FILE-CONTROL.
 - SELECT IN01-FILE
 - ASSIGN TO "test_in.txt"
 - ORGANIZATION IS LINE SEQUENTIAL.
 - SELECT OUT01-FILE
 - ASSIGN TO "test_out.txt"
 - ORGANIZATION IS LINE SEQUENTIAL.
 - *> -------------------------------------------
 - *> データ部
 - *> -------------------------------------------
 - DATA DIVISION.
 - FILE SECTION.
 - *> ファイル定義(インプット)
 - FD IN01-FILE.
 - 01 IN01.
 - 03 IN-KOUMOKU1 PIC X(05).
 - *> ファイル定義(アウトプット)
 - FD OUT01-FILE.
 - 01 OUT01.
 - 03 OUT-KOUMOKU1 PIC X(05).
 - *> -------------------------------------------
 - *> 作業場所節
 - *> -------------------------------------------
 - WORKING-STORAGE SECTION.
 - *> スイッチ定義
 - 01 SW-AREA.
 - 03 SW-END PIC X(01).
 - *> カウンタ定義
 - 01 CNT-AREA.
 - 03 CNT-IN01-CTR PIC 9(02).
 - 03 CNT-OUT01-CTR PIC 9(02).
 - *> 定数定義
 - 01 CST-AREA.
 - 03 CST-PGM-ID PIC X(09) VALUE 'TEMPLATE1'.
 - 03 CST-1X PIC X(01) VALUE '1'.
 - *> -------------------------------------------
 - *> 手続き部
 - *> -------------------------------------------
 - PROCEDURE DIVISION.
 - TEMPLATE1-RTN SECTION.
 - *> 初期処理
 - PERFORM INIT-RTN.
 - *> 主処理
 - PERFORM MAIN-RTN
 - UNTIL SW-END = CST-1X.
 - *> 終了処理
 - PERFORM END-RTN.
 - STOP RUN.
 - TEMPLATE1-EXIT.
 - *> -------------------------------------------
 - *> 初期処理
 - *> -------------------------------------------
 - INIT-RTN SECTION.
 - *> 入力ファイルOPEN
 - OPEN INPUT IN01-FILE.
 - *> 出力ファイルOPEN
 - OPEN OUTPUT OUT01-FILE.
 - *> プログラム名 表示
 - DISPLAY CST-PGM-ID
 - *> 入力ファイル読込処理
 - PERFORM READ01-RTN.
 - INIT-EXIT.
 - *> -------------------------------------------
 - *> 入力ファイル読込処理
 - *> -------------------------------------------
 - READ01-RTN SECTION.
 - *> 入力ファイルREAD
 - READ IN01-FILE AT END
 - MOVE CST-1X TO SW-END
 - GO TO READ01-EXIT
 - END-READ.
 - *> 処理件数カウントアップ
 - ADD 1 TO CNT-IN01-CTR.
 - READ01-EXIT.
 - *> -------------------------------------------
 - *> 主処理
 - *> -------------------------------------------
 - MAIN-RTN SECTION.
 - *> 編集処理
 - PERFORM EDIT01-RTN.
 - *> 入力ファイルREAD処理
 - PERFORM READ01-RTN.
 - MAIN-EXIT.
 - *> -------------------------------------------
 - *> 編集処理
 - *> -------------------------------------------
 - EDIT01-RTN SECTION.
 - *> 編集処理
 - MOVE IN-KOUMOKU1 TO OUT-KOUMOKU1.
 - *> ファイル出力処理
 - PERFORM WRITE01-RTN.
 - EDIT01-EXIT.
 - *> -------------------------------------------
 - *> ファイル出力処理
 - *> -------------------------------------------
 - WRITE01-RTN SECTION.
 - *> 出力レコードWRITE
 - WRITE OUT01.
 - *> 処理件数カウントアップ
 - ADD 1 TO CNT-OUT01-CTR.
 - WRITE01-EXIT.
 - *> -------------------------------------------
 - *> 終了処理
 - *> -------------------------------------------
 - END-RTN SECTION.
 - *> 入力ファイルCLOSE
 - CLOSE IN01-FILE.
 - *> 出力ファイルCLOSE
 - CLOSE OUT01-FILE.
 - *> 入力ファイル件数 表示
 - DISPLAY "IN01 " CNT-IN01-CTR.
 - *> 出力ファイル件数 表示
 - DISPLAY "OUT01 " CNT-OUT01-CTR.
 - END-EXIT.
 
実行結果

入力ファイル

出力ファイル

このようにプログラムを処理単位に分け、さらにコメントを付ける事で、どこで何の処理をしているかが一目でわかると思います。また、初期処理、ファイル読込処理・出力処理、終了処理は、ファイルToファイル処理ではそのまま他のプログラムに流用できます。編集処理に注力すればいいので、開発生産性や品質が上がる事も理解いただける事でしょう。
まとめ
今回の学習講座では、良いコードを書くために学ぶべき3つの事項についてご紹介しました。良いコードは、シンプルでわかりやすいのが特徴です。通常のシステム開発はチームで仕事をする事になりますので、誰が見ても理解しやすいプログラムを作る事を心がけましょう。
この記事を読んだ人は、こちらの記事も読んでいます
あなたのCOBOL技術を活かしませんか?
COBOL入門のカテゴリー
1. 優良社員が多数在籍しています
				2. 即日派遣、又は請負います
				3. 安心価格で請負います
				4. 同時、協力会社募集中です
1. 正社員
				2. 契約社員
				3. 個人事業主
				などの 求人情報 が閲覧できます。
目指せ!COBOLダントツ一番企業。
				創業当初の話や理念が閲覧できます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
 - 【COBOL言語】条件分岐処理の代名詞「IF文」について知ろう|用語辞典
 - COBOL言語の「MOVE文」とは?転記のルールをご紹介します|用語辞典
 - COBOL言語の「STRING文」とは?文字連結の基礎知識と注意点|用語辞典
 - 多枝分岐ってなに?COBOL言語の「EVALUATE文」を知ろう!|用語辞典
 
- COBOL言語の「PICTURE句」とは?基本事項を解説します!|用語辞典
 - COBOL言語で計算処理をするなら「COMPUTE文」|用語辞典
 - COBOL言語の「REDEFINES句」とは?使い方を確認しよう!|用語辞典
 - 覚えておけば楽ができる?COBOL言語の「COPY文」の使い方|用語辞典
 - COBOL言語の文字列操作のパターンを理解しよう!|基礎ガイド
 - COBOL言語の初期化処理に重宝する「INITIALIZE文」とは?|用語辞典
 - COBOL言語の「LOW-VALUE」の使い方について理解しよう!|基礎ガイド
 - COBOL言語の「OCCURS句」について知ろう!学ぶべき基本とは|用語辞典
 - COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|用語辞典
 - COBOL言語の「PERFORM文」とは。実行制御について解説!|用語辞典
 - COBOL言語の繰り返し処理のパターンを理解しよう!|基礎ガイド
 - COBOL言語の「定数」の種類と使い方について理解しよう!|用語辞典
 - COBOLのDBアクセスパターンを学ぼう!「FETCH」|応用ガイド
 - COBOL言語の「DISPLAY文」は、ディスプレイ出力の為にある|用語辞典
 - COBOL言語の「VARYING句」は便利?使用方法を学びましょう|用語辞典
 

