tag:crieit.net,2005:https://crieit.net/users/j_kitayama_hoge000/feed 北山淳也の投稿 - Crieit Crieitでユーザー北山淳也による最近の投稿 2020-12-04T18:02:21+09:00 https://crieit.net/users/j_kitayama_hoge000/feed tag:crieit.net,2005:PublicArticle/16258 2020-12-04T17:58:13+09:00 2020-12-04T18:02:21+09:00 https://crieit.net/posts/COBOL-2-5fc9fa25f1661 COBOLの基本構文その2 <p>この記事は COBOL アドベントカレンダー2020 4日目の記事です。</p> <ul> <li>COBOL Advent Calendar 2020 <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/advent-calendar/2020/cobol">https://qiita.com/advent-calendar/2020/cobol</a></li> </ul></li> </ul> <p>当分は COBOL についての基本的な話をする予定なので、<br /> 多くの部分で wikipedia などの記述とカブると思います。</p> <h2 id="TL;DR"><a href="#TL%3BDR">TL;DR</a></h2> <ul> <li>主な出典:</li> <li>COBOL | Wikipedia <ul> <li><a target="_blank" rel="nofollow noopener" href="https://ja.wikipedia.org/wiki/COBOL">https://ja.wikipedia.org/wiki/COBOL</a></li> </ul></li> <li>サルでもわかるCOBOL入門 | ひよこグミ <ul> <li><a target="_blank" rel="nofollow noopener" href="http://www16.plala.or.jp/hiyokogumi/top.html">http://www16.plala.or.jp/hiyokogumi/top.html</a></li> </ul></li> <li>ILE COBOL 解説書 | IBM Knowledge Center <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_73/rzasb/rzasbmain.htm">https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_73/rzasb/rzasbmain.htm</a></li> </ul></li> </ul> <h2 id="COBOLのプログラム 4つのDIVISION 続き"><a href="#COBOL%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0+4%E3%81%A4%E3%81%AEDIVISION+%E7%B6%9A%E3%81%8D">COBOLのプログラム 4つのDIVISION 続き</a></h2> <ul> <li>COBOLの基本構文その1 <ul> <li><a href="https://crieit.net/posts/COBOL-1-5fc8847acbffe">https://crieit.net/posts/COBOL-1-5fc8847acbffe</a></li> </ul></li> </ul> <p>では、</p> <ul> <li>IDENTIFICATION DIVISION :見出し部</li> <li>ENVIRONMENT DIVISION:環境部</li> </ul> <p>についてお話しました。<br /> 本日はこの続きからやっていきます。</p> <h3 id="DATA DIVISION:データ部"><a href="#DATA+DIVISION%EF%BC%9A%E3%83%87%E3%83%BC%E3%82%BF%E9%83%A8">DATA DIVISION:データ部</a></h3> <p>COBOL プログラムの3番目に記述する DIVISION です。<br /> 実行用プログラムが入力として受け取り、操作し、作り出し又は出力として書き出すデータについて記述します。<br /> データ部は COBOL プログラムではオプショナルであり、<br /> (実際にはほぼありませんが)データを宣言し、使用することのない COBOL プログラムでは省略可能です。</p> <p>現代のプログラミング言語では変数などは必要に応じて都度宣言することができますが、<br /> COBOL プログラムにおいてはプログラム内で取り扱う変数や定数については<br /> 全てデータ部で宣言しておいてから使用することになります。</p> <p>変数や定数といいましたが、COBOL プログラムにおけるデータは以下の3種類があります。</p> <ul> <li>変数</li> <li>定数</li> <li>表意定数 <ul> <li>あらかじめ名称が定められている特定の意味を持つ定数</li> <li><code>HIGH-VALUES</code>, <code>LOW-VALUES</code> など</li> </ul></li> </ul> <p>そして、 <code>DATA DIVISION</code> は以下4つの <code>SECTION</code> = 節 からなります。</p> <ul> <li><code>FILE SECTION</code></li> <li><code>WORKING-STORAGE SECTION</code></li> <li><code>LOCAL-STORAGE SECTION</code></li> <li><code>LINKAGE SECTION</code></li> </ul> <p><code>DATA DIVISION</code> では COBOL プログラムにおける変数宣言を用いてデータの定義を行いますが、<br /> ここでは各節の簡単な説明に留めます。</p> <h4 id="FILE SECTION:ファイル節"><a href="#FILE+SECTION%EF%BC%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E7%AF%80">FILE SECTION:ファイル節</a></h4> <p>ファイルのレコード構造を定義します。<br /> <code>ENVIRONMENT DIVISION</code> =環境部で定義したファイルに対し、データ部にてファイルのブロック長やレコード長、<br /> レコードの詳細を記述する節です。ファイルを利用する場合には必須となります。</p> <h4 id="WORKING-STORAGE SECTION:作業ストレージ節"><a href="#WORKING-STORAGE+SECTION%EF%BC%9A%E4%BD%9C%E6%A5%AD%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E7%AF%80">WORKING-STORAGE SECTION:作業ストレージ節</a></h4> <p>プログラムで使用される一時変数とファイル構造を宣言します。</p> <h4 id="LOCAL-STORAGE SECTION:ローカルストレージ節"><a href="#LOCAL-STORAGE+SECTION%EF%BC%9A%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E7%AF%80">LOCAL-STORAGE SECTION:ローカルストレージ節</a></h4> <p><code>WORKING-STORAGE SECTION</code> と似た節です。<br /> 唯一の違いは、プログラムが実行を開始するたびに変数が割り当てられ、初期化されることです。</p> <h4 id="LINKAGE SECTION:連絡節"><a href="#LINKAGE+SECTION%EF%BC%9A%E9%80%A3%E7%B5%A1%E7%AF%80">LINKAGE SECTION:連絡節</a></h4> <p>外部プログラムから受信したデータ名を説明するために使用します。<br /> 一番利用されるのはサブルーチンです。<br /> サブルーチンとは、ある特定の処理をパッケージ化して、各プログラム内で共通利用できるプログラムのことです。<br /> 呼ばれたプログラムが呼んだプログラムから引数でデータを受け取る内容を記述します。<br /> 実務的な COBOL プログラムには単独の COBOL プログラムで完結する処理は少ないため、<br /> 利用頻度は高いといえます。</p> <h3 id="PROCEDURE DIVISION:手続き部"><a href="#PROCEDURE+DIVISION%EF%BC%9A%E6%89%8B%E7%B6%9A%E3%81%8D%E9%83%A8">PROCEDURE DIVISION:手続き部</a></h3> <p>COBOL プログラムの4番目に記述する DIVISION です。</p> <p>COBOL プログラムの実行は、手続き部の宣言ではない最初の文から始まります。<br /> 原則としてCOBOLプログラムに書いてある順序で実行されます。<br /> その順序と異なる場合は、規則として示されます。<br /> 手続き部は、次に実行される COBOL ソース・プログラムの先頭の手前、<br /> またはプログラムにおいてこれ以上ステートメントが現れない物理的な位置で実行が終了します。</p> <p>上記3つのDIVISIONを記述したあとやっとこの DIVISION にて<br /> 実行されるプログラムを記述するのが COBOL プログラムです。<br /> 現代のプログラミング言語に比べると、随分前置きが長く感じますね。</p> <p>ここまでの例:</p> <pre><code>000100**************************** 000200* ここはコメント 000300**************************** 000400 IDENTIFICATION DIVISION. 000500 PROGRAM-ID. COBOL_SAMPLE01. 000600 AUTHOR. JUNYA KITAYAMA. 000700 DATE-WRITTEN. 12/03/2020. 000800 ENVIRONMENT DIVISION. 000900 CONFIGURATION SECTION. 001000 SOURCE-COMPUTER. IBM-I. 001100 OBJECT-COMPUTER. IBM-I. 001200 SPECIAL-NAMES. 001300 CONSOLE IS CONSL. 001400 WORKING-STORAGE SECTION. 001500 01 HELLO1 PIC X(15). 001600 PROCEDURE DIVISION. 001700 MOVE 'HELLO, WORLD!!!' TO HELLO1. 001800 STOP RUN. </code></pre> <p>COBOL の具体的な言語記述に関しては、明日以降触れていきましょう。</p> 北山淳也 tag:crieit.net,2005:PublicArticle/16253 2020-12-03T15:23:54+09:00 2020-12-03T15:28:22+09:00 https://crieit.net/posts/COBOL-1-5fc8847acbffe COBOLの基本構文その1 <p>この記事は COBOL アドベントカレンダー2020 3日目の記事です。</p> <ul> <li>COBOL Advent Calendar 2020 <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/advent-calendar/2020/cobol">https://qiita.com/advent-calendar/2020/cobol</a></li> </ul></li> </ul> <p>当分は COBOL についての基本的な話をする予定なので、<br /> 多くの部分で wikipedia などの記述とカブると思います。</p> <h2 id="TL;DR"><a href="#TL%3BDR">TL;DR</a></h2> <ul> <li>主な出典:</li> <li>COBOL | Wikipedia <ul> <li><a target="_blank" rel="nofollow noopener" href="https://ja.wikipedia.org/wiki/COBOL">https://ja.wikipedia.org/wiki/COBOL</a></li> </ul></li> <li>サルでもわかるCOBOL入門 | ひよこグミ <ul> <li><a target="_blank" rel="nofollow noopener" href="http://www16.plala.or.jp/hiyokogumi/top.html">http://www16.plala.or.jp/hiyokogumi/top.html</a></li> </ul></li> <li>ILE COBOL 解説書 | IBM Knowledge Center <ul> <li><a target="_blank" rel="nofollow noopener" href="https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_73/rzasb/rzasbmain.htm">https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_73/rzasb/rzasbmain.htm</a></li> </ul></li> </ul> <h2 id="COBOL の基本構文について"><a href="#COBOL+%E3%81%AE%E5%9F%BA%E6%9C%AC%E6%A7%8B%E6%96%87%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">COBOL の基本構文について</a></h2> <ul> <li>COBOLってなぁに?その2 <ul> <li><a href="https://crieit.net/posts/COBOL-2">https://crieit.net/posts/COBOL-2</a></li> </ul></li> </ul> <p>では、COBOL プログラムの第一歩として<br /> 1行ごとの書き方についてお話しました。<br /> 最後に出てきたコード例はこんな感じでしたね。</p> <p>例:</p> <pre><code>000100**************************** 000200* ここはコメント 000300**************************** 000400 IDENTIFICATION DIVISION. 000500 PROGRAM-ID. COBOL_SAMPLE01. 000600 </code></pre> <p>今回はここで出てきた<br /> <code>IDENTIFICATION DIVISION.</code> などの<br /> COBOL の基本構文について触れていきましょう。</p> <h2 id="COBOLのプログラム 4つのDIVISION"><a href="#COBOL%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0+4%E3%81%A4%E3%81%AEDIVISION">COBOLのプログラム 4つのDIVISION</a></h2> <p>COBOL プログラムの基本構造として、<br /> 以下に挙げる 4つのDIVISION を順に記述していきます。<br /> COBOL プログラムを構成する基礎となる部分なので、順に追っていきましょう。</p> <h3 id="IDENTIFICATION DIVISION :見出し部"><a href="#IDENTIFICATION+DIVISION+%EF%BC%9A%E8%A6%8B%E5%87%BA%E3%81%97%E9%83%A8">IDENTIFICATION DIVISION :見出し部</a></h3> <p>COBOL プログラムの一番最初に記述する DIVISION です。<br /> 見出し部では必須の項目として <code>PROGRAM-ID</code> を記述します。<br /> COBOL プログラムでは、ファイル名などではなくこの <code>PROGRAM-ID</code> を用いてプログラムを区別するため、<br /> 他のプログラムと被らない <strong>一意なプログラムID</strong> を指定する必要があります。<br /> プログラム名は英字で始まる英数字で構成される文字列を指定します。</p> <p>また、見出し部では <code>PROGRAM-ID</code> の他に任意の項目として</p> <ul> <li>AUTHOR <ul> <li>作成者</li> </ul></li> <li>DATE-WRITTEN <ul> <li>作成日</li> </ul></li> <li>INSTALLATION <ul> <li>設置環境</li> </ul></li> </ul> <p>などがあります。<br /> これら任意の項目は現在のCOBOLでは廃止とされており、<br /> 新たにCOBOLプログラムを書くときには記述すべきではないとされていますが、<br /> <code>AUTHOR</code> や <code>DATE-WRITTEN</code> に関しては引き続き使われているような気がします(要出典)。</p> <p>例:</p> <pre><code>000100**************************** 000200* ここはコメント 000300**************************** 000400 IDENTIFICATION DIVISION. 000500 PROGRAM-ID. COBOL_SAMPLE01. 000600 AUTHOR. JUNYA KITAYAMA. 000700 DATE-WRITTEN. 12/03/2020. 000800 </code></pre> <h3 id="ENVIRONMENT DIVISION:環境部"><a href="#ENVIRONMENT+DIVISION%EF%BC%9A%E7%92%B0%E5%A2%83%E9%83%A8">ENVIRONMENT DIVISION:環境部</a></h3> <p>COBOL プログラムの2番目に記述する DIVISION です。<br /> ソース作成マシン名、利用ファイルの定義など、実行に必要な環境を記述します。<br /> あまりありませんが、もし仮に入出力を全く行なわないプログラムであれば省略可能となります。</p> <p>ENVIRONMENT DIVISION は 大きく<br /> CONFIGURATION SECTION = 構成節 と INPUT-OUTPUT SECTION 入出力節の2つからなります。</p> <h4 id="CONFIGURATION SECTION:構成節"><a href="#CONFIGURATION+SECTION%EF%BC%9A%E6%A7%8B%E6%88%90%E7%AF%80">CONFIGURATION SECTION:構成節</a></h4> <p>プログラムの作成・実行環境を提示する節です。<br /> 以下の3つの段落があります。</p> <ul> <li><code>SOURCE-COMPUTER</code> 段落 <ul> <li>ソース・プログラムをコンパイルするコンピューターを記述します。</li> <li>構文検査は行われますが、実行そのものに影響はありません。</li> <li><code>IBM-I</code> と記述されるものを多く見かけます。慣例的な表現でしょうか。</li> </ul></li> <li><code>OBJECT-COMPUTER</code> 段落 <ul> <li>オブジェクト・プログラムが実行されるシステムを指定します。</li> <li>構文検査は行われますが、実行そのものに影響はありません。</li> <li>こちらも <code>IBM-I</code> と記述されるものを多く見かけます。慣例的な表現でしょうか。</li> </ul></li> <li><code>SPECIAL-NAMES</code> 段落 <ul> <li><code>CONFIGURATION SECTION</code> における主要な記述となります。</li> <li>以下のような指定を行います。</li> <li>IBM 指定の環境名とユーザーが定義した簡略名の関連づけ</li> <li>通貨符号のための、単一または複数の通貨文字ストリングおよび置換文字を指定</li> <li>PICTURE 文節および数字リテラル内のコンマと小数点の機能が交換されることを指定</li> </ul></li> </ul> <h4 id="INPUT-OUTPUT SECTION:入出力節"><a href="#INPUT-OUTPUT+SECTION%EF%BC%9A%E5%85%A5%E5%87%BA%E5%8A%9B%E7%AF%80">INPUT-OUTPUT SECTION:入出力節</a></h4> <p>プログラム上でファイルやプリンターなどを利用する場合には、必須になる項目。<br /> ファイルを扱わない COBOL プログラムはほとんど存在しないため、<br /> ここの節が環境部ではメインの記述となります。</p> <ul> <li><code>FILE-CONTROL</code> 段落 <ul> <li>ファイルに名前を付け、<code>SELECT</code> 文節を記述することでァイルやプリンターなどの割り当てを記述します。</li> </ul></li> <li><code>I-O-CONTROL</code> 段落 <ul> <li>さまざまなファイルが共用する記憶域を指定します。</li> <li>COBOL プログラムではオプショナルな指定となっており、現在使うことはほぼないようです。</li> </ul></li> </ul> <h3 id="環境部のまとめ"><a href="#%E7%92%B0%E5%A2%83%E9%83%A8%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81">環境部のまとめ</a></h3> <p>標準出力に出力をプリントするような COBOL プログラムの場合、このような指定になります。<br /> (早速 <code>INPUT-OUTPUT SECTION</code> を指定しない例外的なコードになってしまいましたがご容赦ください)</p> <p>例:</p> <pre><code>000100**************************** 000200* ここはコメント 000300**************************** 000400 IDENTIFICATION DIVISION. 000500 PROGRAM-ID. COBOL_SAMPLE01. 000600 AUTHOR. JUNYA KITAYAMA. 000700 DATE-WRITTEN. 12/03/2020. 000800 ENVIRONMENT DIVISION. 000900 CONFIGURATION SECTION. 001000 SOURCE-COMPUTER. IBM-I. 001100 OBJECT-COMPUTER. IBM-I. 001200 SPECIAL-NAMES. 001300 CONSOLE IS CONSL. </code></pre> <h3 id="次回に続く"><a href="#%E6%AC%A1%E5%9B%9E%E3%81%AB%E7%B6%9A%E3%81%8F">次回に続く</a></h3> <p>今回は COBOL 基本構文である 4つの DIVISION の中から<br /> <code>IDENTIFICATION DIVISION</code> と <code>ENVIRONMENT DIVISION</code> についてお話しました。<br /> 次回は残り2つの DIVISION についてお話します。</p> 北山淳也 tag:crieit.net,2005:PublicArticle/16251 2020-12-02T23:56:15+09:00 2020-12-03T00:05:49+09:00 https://crieit.net/posts/COBOL-2 COBOLってなぁに?その2 <p>この記事は COBOL アドベントカレンダー2020 2日目の記事です。</p> <ul> <li>COBOL Advent Calendar 2020 <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/advent-calendar/2020/cobol">https://qiita.com/advent-calendar/2020/cobol</a></li> </ul></li> </ul> <p>当分は COBOL についての基本的な話をする予定なので、<br /> 多くの部分で wikipedia などの記述とカブると思います。</p> <h2 id="TL;DR"><a href="#TL%3BDR">TL;DR</a></h2> <ul> <li>COBOL | Wikipedia <ul> <li><a target="_blank" rel="nofollow noopener" href="https://ja.wikipedia.org/wiki/COBOL">https://ja.wikipedia.org/wiki/COBOL</a></li> </ul></li> </ul> <h2 id="COBOL プログラムの前提となる思想"><a href="#COBOL+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E5%89%8D%E6%8F%90%E3%81%A8%E3%81%AA%E3%82%8B%E6%80%9D%E6%83%B3">COBOL プログラムの前提となる思想</a></h2> <ul> <li>COBOLってなぁに?その1 <ul> <li><a href="https://crieit.net/posts/COBOL-1">https://crieit.net/posts/COBOL-1</a></li> </ul></li> </ul> <p>でも触れましたが、<br /> COBOL は「理系ではない事務員や役人でも扱えるように作られ」ました。<br /> これは、COBOLの言語仕様の根本として考えられたものなので、<br /> これからCOBOLの言語仕様や構造について触れていく時にたびたび登場する思想です。</p> <p>Ruby on Rails の精神として "Convention over configuration" = 設定より規約 というものがありますが<br /> 設定などによって柔軟な記述ができるようにしておくよりも、<br /> 規約を定義しその規約に則って記述することで開発者の考えることの負担を少なくすることができます。</p> <ul> <li>Convention over Configuration | Ruby on Rails <ul> <li><a target="_blank" rel="nofollow noopener" href="https://rubyonrails.org/doctrine/#convention-over-configuration">https://rubyonrails.org/doctrine/#convention-over-configuration</a></li> </ul></li> </ul> <p>COBOL も「理系ではない事務員や役人でも扱えるように作られ」ているため、<br /> 現在のプログラミング言語では柔軟に記述できる部分も<br /> 見方によっては不便とも取れるほど書き方が決まっている部分があり、<br /> そのことにより理系の知識や詳しい言語仕様の把握をせずともCOBOLプログラムが書けるように<br /> 考えられているのです。</p> <p>例えば C# コードの Hello World として</p> <pre><code class="cs">using System; public class Hello{ public static void Main(){ Console.WriteLine("hello world!"); } } </code></pre> <p>このようなコードがある時、</p> <pre><code class="cs">public static void Main(){ Console.WriteLine("hello world!"); } </code></pre> <p>は Hello クラスの1行目で定義されていようが<br /> 様々なプロパティやメソッドなどの後に定義されていようが<br /> どこで定義されてあっても(どこに書いてあっても)デフォルトのエントリポイントとして機能しますが、<br /> COBOL では後述の基本構造として定義された順で記述する必要があります。<br /> これにより、「定義されている基本構造」に則った書き方で書くことで<br /> COBOLプログラミングを行う上で考えることを少なくしているのです。</p> <h2 id="COBOL プログラムの1行ごとの書き方"><a href="#COBOL+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE1%E8%A1%8C%E3%81%94%E3%81%A8%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9">COBOL プログラムの1行ごとの書き方</a></h2> <p>では早速 COBOL プログラムの構文定義に触れていきましょう。</p> <p>まず、今回は COBOL プログラムで定義されている1行ごとのルールについてお話します。<br /> 多くのプログラミング言語ではタブの数や予約語について書き順は柔軟であることが多いですが、<br /> COBOL では1行ごとの書き方についても定義があります。<br /> (Python などではインデントでブロックを定義するので似たような考え方とも言えますね)</p> <ul> <li>インデント | Python 3.9.1rc1 ドキュメント <ul> <li><a target="_blank" rel="nofollow noopener" href="https://docs.python.org/ja/3/reference/lexical_analysis.html#indentation">https://docs.python.org/ja/3/reference/lexical_analysis.html#indentation</a></li> </ul></li> </ul> <p>また、COBOLプログラムの1行ごとのルールが決まっている理由は<br /> COBOLプログラムは昔パンチカードという紙に記述していたところにも起因しています。<br /> コンピュータに直接テキストファイルとしてプログラミングを行う現在のプログラミング言語と異なり、<br /> パンチカードという紙にコードを記述していたがために<br /> 行ごとのルールが存在しないと簡単に記述量超過(ホールドオーバー)が起きてしまったんですね。</p> <p>なお、以下に出てくる「n列目」という記載は<br /> COBOL プログラムにおける領域の単位となりますが、<br /> 少なくとも7列目までは「7文字目」までと同一と考えてもらって問題ありません。</p> <h3 id="1列目〜6列目 シーケンシャル番号"><a href="#1%E5%88%97%E7%9B%AE%E3%80%9C6%E5%88%97%E7%9B%AE+%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B7%E3%83%A3%E3%83%AB%E7%95%AA%E5%8F%B7">1列目〜6列目 シーケンシャル番号</a></h3> <p>COBOL プログラムにおける<br /> 各行の識別を行うためのシーケンシャル番号を6桁で記述します。<br /> 現代のプログラミング言語ではエラーが発生した時に<br /> プログラムファイルの何行目でエラーですよ、などというエラー出力があるのが一般的ですが、<br /> COBOL が考えられた当時はそのような親切なものはなく、自前で用意していました。<br /> そのため、途中でプログラムが停止した時などにどの位置かを理解しやすくなるために<br /> 各行の頭にシーケンシャル番号を記述したのです。<br /> シーケンシャル番号自体の記述ルールはありません。</p> <p>例:</p> <pre><code>000001 000002 000003 000004 000005 </code></pre> <p>ただし、1ずつ加算するシーケンシャル番号の場合は<br /> プログラムの修正などで途中行に追記が発生した場合、上や下の行と同じ番号を振るなど<br /> 破綻したシーケンシャル番号の記述が発生してしまうので、<br /> 最初にプログラムを書くときは慣例として10桁や100桁ごとのシーケンシャル番号を振ることが多いようです。</p> <p>例:</p> <pre><code>000100 000200 000300 000400 000500 000600 </code></pre> <p>なお、この記述は大変冗長であるため<br /> 昨今のCOBOLコンパイラでは不要とされています。<br /> いきなり最初から今は不要、みたいな定義になってしまいましたね……。</p> <h3 id="7列目 標識"><a href="#7%E5%88%97%E7%9B%AE+%E6%A8%99%E8%AD%98">7列目 標識</a></h3> <p>COBOL プログラムの7文字目はコードの標識を記述する部分となります。<br /> 多くの場合はスペースを記述しますが、<code>*</code> を記述することでその行はコメント行となります。<br /> また、<code>-</code> を記述すると前の行の単語またはリテラルが継続という扱いになります。</p> <p>例:</p> <pre><code>000100**************************** 000200* ここはコメント 000300**************************** 000400 000500 000600 </code></pre> <h3 id="8列目〜11列目、12列目〜72列目 コード記述領域"><a href="#8%E5%88%97%E7%9B%AE%E3%80%9C11%E5%88%97%E7%9B%AE%E3%80%8112%E5%88%97%E7%9B%AE%E3%80%9C72%E5%88%97%E7%9B%AE+%E3%82%B3%E3%83%BC%E3%83%89%E8%A8%98%E8%BF%B0%E9%A0%98%E5%9F%9F">8列目〜11列目、12列目〜72列目 コード記述領域</a></h3> <p>COBOL プログラムを記述します。</p> <p>例:</p> <pre><code>000100**************************** 000200* ここはコメント 000300**************************** 000400 IDENTIFICATION DIVISION. 000500 PROGRAM-ID. COBOL_SAMPLE01. 000600 </code></pre> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>今回は COBOL の1行ごとの記述方法についてお話しました。<br /> サンプルの最後にはいよいよ COBOL プログラムが出て来ましたね。<br /> 明日は、最後のサンプルに書いた <code>IDENTIFICATION DIVISION</code> など<br /> COBOL の基本構文について触れていきましょう。</p> 北山淳也 tag:crieit.net,2005:PublicArticle/16248 2020-12-01T23:54:56+09:00 2020-12-01T23:54:56+09:00 https://crieit.net/posts/COBOL-1 COBOLってなぁに?その1 <p>この記事は COBOL アドベントカレンダー2020 1日目の記事です。</p> <ul> <li>COBOL Advent Calendar 2020 <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/advent-calendar/2020/cobol">https://qiita.com/advent-calendar/2020/cobol</a></li> </ul></li> </ul> <p>当分は COBOL についての基本的な話をする予定なので、<br /> 多くの部分で wikipedia などの記述とカブると思います。</p> <h2 id="TL;DR"><a href="#TL%3BDR">TL;DR</a></h2> <ul> <li>COBOL | Wikipedia <ul> <li><a target="_blank" rel="nofollow noopener" href="https://ja.wikipedia.org/wiki/COBOL">https://ja.wikipedia.org/wiki/COBOL</a></li> </ul></li> </ul> <h2 id="COBOL とは?"><a href="#COBOL+%E3%81%A8%E3%81%AF%EF%BC%9F">COBOL とは?</a></h2> <p>COBOL とはプログラミング言語の1つです。<br /> "Common Business Oriented Language" = 共通 事務処理向けの 言語 という名のように、<br /> 開発年といわれている 1959年当時にコンピューターで事務処理をするための<br /> 専用言語として登場したプログラミング言語です。<br /> アメリカ国防総省主導で開発されました。</p> <h2 id="事務処理向けとは"><a href="#%E4%BA%8B%E5%8B%99%E5%87%A6%E7%90%86%E5%90%91%E3%81%91%E3%81%A8%E3%81%AF">事務処理向けとは</a></h2> <p>「事務処理向け」というのはどういうことかというと、<br /> COBOLが持っている機能を挙げることで少し理解することができます。</p> <ul> <li>ファイルの読み込み</li> <li>データの順次処理</li> <li>データのソート</li> <li>データをまとめる処理(マージ)</li> <li>大量のデータのファイルへ順次書き込み</li> <li>帳票の作成</li> <li>印刷</li> <li>データを10進数で扱うことによる簡易で正確な金額計算</li> </ul> <p>現代のモダンなプログラミング言語はもちろんこれらの言語機能を有しており、<br /> COBOLが「事務処理向け」であると言われてもピンと来ないかもしれません。<br /> しかし、1959年当時はこのような機能を揃えた言語は少なかったのでしょう。<br /> (そもそもプログラミング言語の歴史を紐解くと、<br />  1959年当時は現在よりも遥かにプログラミング言語の種類自体が少ない状況にありました)</p> <p>また、事務処理向けとしてCOBOLの目指したものとして言語仕様を強く方向付けたものとして</p> <ul> <li>理系ではない事務員や役人でも扱えるように作られた</li> </ul> <p>ということがあります。</p> <h2 id="理系ではない事務員や役人でも扱えるように とは"><a href="#%E7%90%86%E7%B3%BB%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E4%BA%8B%E5%8B%99%E5%93%A1%E3%82%84%E5%BD%B9%E4%BA%BA%E3%81%A7%E3%82%82%E6%89%B1%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB+%E3%81%A8%E3%81%AF">理系ではない事務員や役人でも扱えるように とは</a></h2> <p>日本語ネイティブ話者であれば、日本語で記述できるプログラミング言語である<br /> 「なでしこ」や「ひまわり」と合わせて見てみるとイメージしやすいのですが、<br /> 自然言語に近い記法(COBOL の場合は英語)で記述できるというのは、<br /> それだけで記述のハードルが下がるものです。</p> <p>また、ブロックを組み合わせるようにして開発する「Scratch」を使ってみるとわかるのですが、<br /> 数学やアルゴリズムの知識を持ち合わせていなくても、<br /> 構文上の約束事さえ覚えて記述することができればプログラムを組むことは可能です。</p> <p>COBOLは、</p> <ul> <li>自然言語に近い記法で記述できる</li> <li>数学やアルゴリズムの知識を持ち合わせていなくても記述できる</li> </ul> <p>という点を抑えることで「理系ではない事務員や役人でも扱えるように」考えられています。</p> <p>では実際にどういう言語記述をしていくのか?<br /> 明日以降はもう少しCOBOLでの記述も合わせて、見ていきましょう。</p> <h2 id="参考リンク"><a href="#%E5%8F%82%E8%80%83%E3%83%AA%E3%83%B3%E3%82%AF">参考リンク</a></h2> <ul> <li>日本語プログラミング言語 なでしこ <ul> <li><a target="_blank" rel="nofollow noopener" href="https://nadesi.com/top/">https://nadesi.com/top/</a></li> </ul></li> <li>日本語プログラミング言語 ひまわり <ul> <li><a target="_blank" rel="nofollow noopener" href="https://kujirahand.com/himawari/">https://kujirahand.com/himawari/</a></li> </ul></li> <li>プログラミング言語 Scratch(スクラッチ) <ul> <li><a target="_blank" rel="nofollow noopener" href="https://scratch.mit.edu/">https://scratch.mit.edu/</a></li> </ul></li> </ul> 北山淳也 tag:crieit.net,2005:PublicArticle/16227 2020-11-19T00:39:09+09:00 2020-11-19T00:39:09+09:00 https://crieit.net/posts/COBOL COBOLアドベントカレンダーをやります <p>Qiita で COBOLアドベントカレンダーをやります。</p> <ul> <li>COBOL Advent Calendar 2020 | Qiita <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/advent-calendar/2020/cobol">https://qiita.com/advent-calendar/2020/cobol</a></li> </ul></li> </ul> <h2 id="なぜやろうと思ったのか"><a href="#%E3%81%AA%E3%81%9C%E3%82%84%E3%82%8D%E3%81%86%E3%81%A8%E6%80%9D%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%8B">なぜやろうと思ったのか</a></h2> <p>私はエンジニア歴12年目ぐらいになるのですが<br /> 12年前に新卒で入社した小さな"ソフトハウス"="ソフトウェアを開発・販売する企業"では<br /> 当時まだメインフレーム向けのCOBOL案件を受託していました。<br /> (今はもう辞めてしまったのでまだやってるかは知りません)<br /> ソフトハウスってなんだよ!って会社説明会の時に思ったのを覚えています。</p> <p>創業当時はCOBOL案件をメインに受託していたようで、<br /> 新人研修もフローチャートから始まりCOBOL紙プログラミングを経て<br /> 研修後にCOBOL案件に刺さりました。2008年ごろの話です。<br /> 当時、入社前に学生としてはJavaを学んでいたので結構ビビったのを覚えています。<br /> えっ…… 何これは……(絶句)という気持ちでした。<br /> その流れで今は亡き基本情報処理技術者試験の午後COBOLを受験したのも<br /> 今では良い思い出ですね。</p> <p>閑話休題。</p> <p>それで、去年くらいにCOBOLをやったことのないエンジニアと<br /> 話をしているときに謎に盛り上がったのが<br /> COBOLアドベントカレンダーをやろうと思ったきっかけです。</p> <p>相手「COBOLってパソコンでプログラミングするんですよね?」<br /> ぼく「紙ですよ」<br /> 相手「嘘でしょ?」<br /> ぼく「もちろん今はパソコン使いますけど」<br /> 相手「間違ったらどうするんですか?Ctrl+z とかないですけど」<br /> ぼく「消しゴムですね」<br /> 相手「嘘でしょ?」</p> <p>1人にウケるならもう何人かには面白がってもらえるかな、ぐらいの気持ちです。<br /> 楽しんでもらえると良いなあ。</p> <h2 id="どこに投稿するのか"><a href="#%E3%81%A9%E3%81%93%E3%81%AB%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E3%81%AE%E3%81%8B">どこに投稿するのか</a></h2> <p>私は普段はzennで活動しているのですが、<br /> 自分で言い出しておいて自分の記事一覧がCOBOLで埋まるのは<br /> うーん…という気持ちがあり、かといってQiitaは気軽に書けないしで<br /> Qrunch終了時に利用を検討した一つであったここCrieitを主な投稿先として<br /> Advent Calendar をやっていこうと思っています。<br /> 文字数カウントがあって文章量を調整しやすいのはCrieitの良いところですね。<br /> ボードや下書き公開もうまく使っていけると面白いかなと思っています。<br /> CrieitのCOBOLエンジニアの座はいただきだ!<br /> この記事を書いている時点でもCrieitにはCOBOLの話をしている記事がいくつかありますね。</p> <ul> <li>Crieit | 北山淳也 <ul> <li><a href="https://crieit.net/users/j_kitayama_hoge000">https://crieit.net/users/j_kitayama_hoge000</a></li> </ul></li> <li>zenn | 北山淳也 <ul> <li><a target="_blank" rel="nofollow noopener" href="https://zenn.dev/junki555">https://zenn.dev/junki555</a></li> </ul></li> </ul> <h2 id="誰とやるのか"><a href="#%E8%AA%B0%E3%81%A8%E3%82%84%E3%82%8B%E3%81%AE%E3%81%8B">誰とやるのか</a></h2> <p>一人で走りきるつもりでいます。</p> <h2 id="どうなって欲しいのか"><a href="#%E3%81%A9%E3%81%86%E3%81%AA%E3%81%A3%E3%81%A6%E6%AC%B2%E3%81%97%E3%81%84%E3%81%AE%E3%81%8B">どうなって欲しいのか</a></h2> <p>COBOLに対してどうなって欲しいう気持ちも<br /> 今後COBOLの仕事を請けたいとも思っていないのですが、<br /> Twitterのフォロワーが増えると嬉しいなとは思っています(自分本位)</p> 北山淳也