くんすとの備忘録

IT系技術メモ

移転しました。

15秒後に自動的にリダイレクトします。

【COBOL】Bash on Ubuntu on WindowsでCOBOL

ちょっとネタ記事ばかり書いてしまったので、まともな記事を書こうと思います。

このブログのアクセス解析をしたところ、ダントツのアクセス数を叩き出しているのはこの記事でした。

www.kunst1080.net

つまり、WindowsでCOBOLを動かす、ということには需要がある!!

というわけで、Bash on Ubuntu on Windows(以後「BoW」)でCOBOLを動かしてみました。 以前はMSYS2MinGWで動かしていましたが、そのときよりも若干セットアップは簡単です。

概要

COBOLのコンパイラをインストールし、簡単なCOBOLのプログラムをコンパイル・実行できるところまでを検証します。

検証環境

Windows 10 Pro 64bit

  • バージョン 1703
  • ビルド:15063.13

※Creators Update後のWindows10です

また、BoWは既に使えるようになっている前提です。セットアップ方法はこの辺り(Bash on Ubuntu on Windowsをインストールしてみよう! - Qiita)を参考にすればよさそう。

セットアップ手順

opensource COBOLのインストール

OSSコンソーシアムのサイト(https://www.osscons.jp/osscobol/)から、opensource COBOL1をダウンロードします。

wget "https://www.osscons.jp/osscobol/files/?action=cabinet_action_main_download&block_id=414&room_id=21&cabinet_id=11&file_id=380&upload_id=759" -O opensource-cobol-1.5.1J.tar.gz

ビルドに必要なライブラリをインストールします。
(何が必要か、ということは README に書いてありました)

$ sudo apt-get install build-essential libgmp-dev libdb-dev libncurses5-dev

解凍

$ tar -xvf opensource-cobol-1.5.1J.tar.gz

ビルドとインストール

$ cd opensource-cobol-1.5.1J
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig

ldconfig しないと、libcob.so.1が見つからない旨のエラーが発生してしまいます

確認

$ cobc
cobc: No input files

と表示されればインストールが成功しています。

作業フォルダの作成

BoWとWindowsで連携しながら開発を行うため、Windowsのエクスプローラから作業フォルダを作成します。

作業フォルダを C:\work\cobol に作成した場合、BoWからは /mnt/c/work/cobol のパスで参照できます。

BoWを作成した作業フォルダまで移動します。

$ cd /mnt/c/work/cobol

検証用ソースの作成

検証用のソースを適当なエディタで作成します。 文字コードはShiftJISにしてください。改行コードはLFでもCRLFでもどちらでも大丈夫です。

C:\work\cobol\test1.cbl

       IDENTIFICATION DIVISION.
       PROGRAM-ID. test1.
       ENVIRONMENT DIVISION.
      *
       DATA DIVISION.
      *
       WORKING-STORAGE SECTION.
       01  FILLER.
            03 TEST-X.
             10 VAR         PIC X(14).
             10 END-POINT   PIC X(01) VALUES '/'.
            03 TEST-9.
             10 VAR         PIC 9(08).
             10 END-POINT   PIC X(01) VALUES '/'.
            03 TEST-S.
             10 VAR         PIC S9(07).
             10 END-POINT   PIC X(01) VALUES '/'.
            03 TEST-COMP3.
             10 VAR         PIC S9(09)V9(2) COMP-3.
             10 END-POINT   PIC X(01) VALUES '/'.
            03 TEST-N.
             10 VAR         PIC N(09).
             10 END-POINT   PIC X(01) VALUES '/'.
            03 TEST-B.
             10 VAR         PIC S9(4) COMP.
             10 END-POINT   PIC X(01) VALUES '/'.
      *
       PROCEDURE DIVISION.
       MAIN-RTN.
           PERFORM EDIT-RTN.
           PERFORM OUTPUT-RTN.
           MOVE 9 TO RETURN-CODE.
       EXIT.
       STOP RUN.
      *
       EDIT-RTN SECTION.
           MOVE 'This is X Type'        TO VAR OF TEST-X.
           MOVE 12345678                TO VAR OF TEST-9.
           MOVE -12345                  TO VAR OF TEST-S.
           MOVE 123456789.12            TO VAR OF TEST-COMP3.
           MOVE 'こんにちは、世界!'    TO VAR OF TEST-N.
           MOVE 38533                   TO VAR OF TEST-B. *> 38533 = 0x9685 = '妹'
       EXIT.
      *
       OUTPUT-RTN SECTION.
           DISPLAY 'TEST-X    :'    TEST-X.
           DISPLAY 'TEST-9    :'    TEST-9.
           DISPLAY 'TEST-S9   :'    TEST-S.
           DISPLAY 'TEST-COMP3:'    TEST-COMP3.
           DISPLAY 'TEST-N    :'    TEST-N.
           DISPLAY 'TEST-BYTE :'    TEST-B.
       EXIT.
      *

実行準備

COBOLソースやファイルにはShiftJISのファイルを扱うことを想定していますが、BoWの文字コードはUTF-8です。なので、そのままプログラムを実行すると出力が文字化けしてしまいます。 文字化けを解消するためのツールとして nkf をインストールしておおきます。

$ sudo apt-get install nkf

コンパイルと実行

検証用のソースをコンパイルします。

$ cobc test1.cbl

test1 というファイルができます。

ひとまず、そのまま実行してみます。

$ ./test1

実行結果

TEST-X    :This is X Type/
TEST-9    :12345678/
TEST-S9   :001234u 
TEST-COMP3:4Vx,/  
TEST-N    :ɂ́AEI/
TEST-BYTE :/

このように、日本語の部分が文字化けしてしまっています。

出力結果に nkf を通すことで文字化けを解消できます。 もう一度実行してみましょう。

$ ./test1 | nkf

実行結果

TEST-X    :This is X Type/  
TEST-9    :12345678/  
TEST-S9   :001234u/  
TEST-COMP3:4Vx/  
TEST-N    :こんにちは、世界!/  
TEST-BYTE :妹/

日本語の文字化けが解消されました。 (pack項目はそもそもバイナリなのでこのままです。)

参考URL


  1. 執筆時のバージョンは v1.5.1J