Windows10 Home + WSL2 でCOBOLのコンパイル環境作りをした話

みなさんはCOBOLを使うことってありますか?

僕はあります。

僕が社会人になってITの業界に飛び込んだのが約20年前。

その頃からなくなるぞなくなるぞと言われ続けていますが、不思議なことにそれでもこの世の中はまだまだ溢れんばかりのCOBOLソースで満ちています。

そんな中、いくら普段はモダンなプログラマーを気取っていてもちょっとしたことから「お゛っ!?こいつCOBOLも分かるぞ!?コボラーじゃ!」と顧客先やお得意様から認識されてしまうと、そこは我らが中小企業と大企業様の悲しい力関係、『MacBookを捨てよ!ダム端を我が手に!』(※注)との掛け声も高らかに、容赦なくCOBOLのプロジェクトに放り込まれてしまうのです。

まあ、流石に今時純粋なダム端なんてお目にかかりませんが・・・

そんな40過ぎたおじさんにはなかなかしんどい事情もあり、弊社の若者にも手っ取り早くCOBOLのコンパイル環境を作ってサクッとお勉強してもらえんかな~?と色々調べた結果、Windows10 + WSL2 + GnuCOBOLの組み合わせがなかなかお手軽で良いんじゃないかと設定してみました。

A社とかB社とかC社のCOBOL製品を、勉強するから買って!と言っても高すぎてなかなか買ってもらえませんからね。


WSL2になって、Windows10 HomeでもLinux 用 Windows サブシステム (WSL)が利用できるようになりました。

バージョン 1903 以降、ビルド 18362 以上(x64の場合)であれば導入可能なのでやってみます。

まず、管理者権限でPowerShellに入り、Linux 用 Windows サブシステムを有効にします。

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

次に同様に管理者権限でPowerShellから、仮想マシンの機能を有効にします。

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

次に同様に管理者権限でPowerShellから、WSL2を既定のバージョンとして設定します。(そのままではWSL1が既定)

wsl --set-default-version 2

すると、Linuxカーネル更新プログラムパッケージをダウンロードしろというメッセージとリンク先が表示されると思います。

そのリンク先から、WSL2 Linuxカーネル更新プログラムパッケージをダウンロードし、実行します。

完了後、もう一回前回と同じくWSL2を既定のバージョンとして設定します。

wsl --set-default-version 2

正常に完了したら、WSL2が利用可能になっています。

次に、Microsoft StoreからLinuxのパッケージをインストールしますが、僕は普段Ubuntuを使っているのでUbuntuをインストールします。

Linuxで検索をかけると色々とLinuxディストリビューションが表示されるので、Ubuntuを選択

Ubuntuを起動し、ユーザーIDとパスワードを決めれば、Ubuntuが利用可能になります。


次に、GnuCOBOLのインストールです。

GnuCOBOLはCOBOL85の多くと,COBOL2002,COBOL2014の一部に対応しているLinux用COBOLコンパイラで、元はOpenCOBOLという名前でした。

普段僕たちが目にするCOBOLソースのほとんどはCOBOL85相当(時々もっと古いこともありますが・・・)なので、主要な言語仕様を覚えるには十分ではないかと思います。
apt installでインストールしますが、インストール対象は一応古い処理系でも問題ないようにopen-cobolにします。

open-cobolはgnucobolのダミーパッケージとなります。

$ sudo apt install open-cobol

これで、COBOLが使えるようになりました。

まずはお約束のHello,World!を出力してみます。ソースはこんな感じ。

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. HELLO001.
000300 PROCEDURE DIVISION.
000400 DISPLAY "Hello,World!".
000500 STOP RUN.

次にコンパイルしてみます。-xオプションを付けると実行形式のファイルを出力します。

なにもエラーが出ず、実行ファイルができていればOKです。

$ cobc -x HELLO001.CBL 
$  ls -la
total 32
drwxr-xr-x 2 root root  4096 Jun 27 06:58 .
drwxr-xr-x 1 root root  4096 Jun 16 21:32 ..
-rwxr-xr-x 1 root root 17400 Jun 27 06:58 HELLO001
-rw-r--r-- 1 root root   136 Jun 27 06:47 HELLO001.CBL

詳しいコンパイルリストを出したいときは、-Xrefオプションと-tオプションを組み合わせて、以下のような感じでコンパイルします。

$ cobc -x -Xref -t list.txt HELLO001.CBL 
$ cat list.txt 
GnuCOBOL 2.2.0          HELLO001.CBL         Sun Jun 27 06:59:34 2021  Page 0001

LINE    PG/LN  A...B............................................................

000001  000100 IDENTIFICATION DIVISION.
000002  000200 PROGRAM-ID. HELLO001.
000003  000300 PROCEDURE DIVISION.
000004  000400 DISPLAY "Hello,World!".
000005  000500 STOP RUN.

GnuCOBOL 2.2.0          HELLO001.CBL         Sun Jun 27 06:59:34 2021  Page 0002

NAME                           DEFINED                REFERENCES


      No fields defined.


GnuCOBOL 2.2.0          HELLO001.CBL         Sun Jun 27 06:59:34 2021  Page 0003

LABEL                          DEFINED                REFERENCES

E HELLO001                     4

0 warnings in compilation group
0 errors in compilation group

ワーニングもエラーもないようなので、作成された実行ファイルを実行してみます。

$ ./HELLO001 
Hello,World!

きちんと出力されました。

これでCOBOLのコンパイル環境は完成です。

Visual Studio Codeと組み合わせれば、弊社若者の学習用としてもあまり古臭さを感じさせない、いい感じな環境にできそうです。

ぴーや!

(※注)MacBookを捨てよとは別にdisり発言ではありません。多くのダム端エミュレータはキーボードの右Ctrlキーを実行キーとして割り当てているため、対応するキーがないMacではコマンドを打ってもデフォルト設定ではなにも実行できない(どころかログインすらできない)ことがあるのです

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です