KTR推しBLOG

興味でCOBOLを動かしてみた

2023-10-27

噂でよく聞くCOBOLはどんな感じなのか体験してみたいと思ってサンプルプログラムを実行してみました。ただ、時間を掛けても自分のやりたいことへの活用にあんまり効果ないと感じたのですぐに調べることを止めました。

最初は検証用の環境で実行してみようとしましたが、OSやハードウェアの関係なのか上手くプログラムを実行できなかったのでdockerを使ったコンテナ環境で試してみました。

下記のようにDockerfileを作成してCOBOLを実行できる環境のコンテナを用意します。

FROM ubuntu:lunar

RUN echo "Setup COBOL..."

RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y gnucobol vim git

Dockerfileを用意できたらビルドしてコンテナイメージを作成します。以降に記載する実行コマンドについて、適宜必要があればsudoを付けて実行してください。

docker build ./ -t cobol-platform

イメージが作成されたらコンテナ起動してください。

docker run -v {自分の作業環境のパス}:{コンテナ内のマウントしたいパス} -it cobol-platform /bin/bash

お試しでHello, World!を表示するプログラムを動かしてみました。COBOLのお作法なのか行番号を付けるのか、付けなくてもいいのか、いまいちよくわかっていないですが、以下のプログラムでHello, World!を表示することができました。

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. HELLO-WORLD.
000300 PROCEDURE DIVISION.
000400 MAIN-PROCEDURE.
000500      DISPLAY "Hello, World!"
000600 STOP RUN.
000700 END PROGRAM HELLO-WORLD.

以下のコマンドでプログラムをコンパイルします。

cobc -x hello.cbl

# 実行
./hello

Hello, World!を表示するだけだと、あんまりプログラミング言語の雰囲気を感じないので、ネット上で見つけたFizz Buzzのプログラムを動かしてみました。以下は行番号を書かないスタイルになりますが、COBOLのお作法なのか半角スペース6個分?のインデントを入れてからプログラムを書き始める形式になるのかな?とりあえず以下の形式でプログラムをコンパイルすることができました。

           IDENTIFICATION DIVISION.
           PROGRAM-ID. FizzBuzz.
           DATA DIVISION.
           WORKING-STORAGE SECTION.
           01 n   BINARY-LONG.
           01 i   BINARY-LONG.
           01 m3  BINARY-LONG.
           01 m5  BINARY-LONG.
           PROCEDURE DIVISION.
           DISPLAY "Enter a positive integer for Fizz Buzz"
           ACCEPT n
           PERFORM VARYING i FROM 1 BY 1 UNTIL i > n
               COMPUTE m3 = FUNCTION MOD(i 3)
               COMPUTE m5 = FUNCTION MOD(i 5)
               IF m3 = 0 AND m5 = 0 THEN
                   DISPLAY "FizzBuzz"
               ELSE IF m3 = 0 THEN
                   DISPLAY "Fizz"
               ELSE IF m5 = 0 THEN
                   DISPLAY "Buzz"
               ELSE
                   DISPLAY i
               END-IF
               END-IF
               END-IF
           END-PERFORM.

同様にプログラムをコンパイルします。

cobc -x fizzbuzz.cbl

# 実行
./fizzbuzz

上記を実行できたあたりでやる気が低下したというのか、あんまり自分のやりたいことが(できるかもしれないですが、)できなさそうだなぁと調べている中で感じたので調査を切り上げました。私がプログラミング言語に求めている機能はスクレピング処理であったり、データ分析であったり、機械学習であったり、ウェブサイト構築したりという内容になるので、そもそもCOBOLの用途からズレていたり、COBOLから外部コマンドを実行するのが簡単ではなさそう(調べてもまとまった情報が出てこない)と感じたので、大人しく用途に合ったプログラミング言語を動かしていこうと思いました。

参考