- コラム
コラム|舞呉コボ郎のマイグレーション放浪記
第1回 マイグレ創成期 編 / COBOL 一番重要なのはMOVEとIF [2024.3.8]
舞呉コボ郎のマイグレーション放浪記
はじめまして。舞呉コボ郎と申します。「まいご」じゃありません。「まいぐれ」です。
私は当社で30年以上、マイグレーションとCOBOLに取り組んできました。
2024年を迎え、コボ郎のカラータイマーも点滅し始めたので、何か記録に残すことで微力ながらCOBOLに関わる方、これからCOBOLに携わる予定のある方のお役に立てるようなことがないかと思いを巡らせ、コラムを始めることにしました。
当社が約30年取り組んできたマイグレーションの軌跡と最近肩身が狭くなってきたCOBOLのお勉強に役立つ情報をお届けしていこうと思います。
COBOLに取り組まなくてはならなくなった初心者の方や、何となくCOBOLを使ってきた方に、COBOLを深く理解して活用するための虎の巻になるといいなぁ…と思っています。
初回はCOBOLとマイグレーションについて、コボ郎の所感を述べさせていただきます。
COBOLの言語特性として良いところは
- 可読性が優れている
…設計書がなくてもソースコードを読むと何をやっているかをほぼ理解できます。 - 習熟するための難易度が低い
…COBOLを知らない人でも、何かの言語でプログラミングスキルを習得していれば、早期にCOBOLを使いこなすことが できます。
悪いところは、
- 生産性が低い
…他言語なら数行でコーディングできるような内容でも、10倍以上のコーディング量が必要となることがあります。
(COBOLで正規表現が使えるようになると、かなり改善できると思う……)
COBOLは1959年に生まれ、現在まで使われ続けています。衰退期にはありますが、まだまだ大量のCOBOLが本番運用されています。
まだCOBOLが残っている企業のシステムは、超ミッションクリティカルだったり、移行が難しいアセンブラなどの資産が大量に稼働していたり、その両方だったりします。
現在の技術ではCOBOLをすべて無くすためには莫大なマンパワーが必要で、この先しばらくは、うまくCOBOLと付き合っていくことが必要だと思います。自然なJavaに変換するAIが出始めているようですが、広く使えるようになるにはまだまだ時間がかかりそうです。
もし、COBOL技術者の確保が困難で、かつ高齢化しているのであれば、若い技術者を教育して増やすのも一つの手だと思います。COBOLの習得はコツをつかんでしまえば簡単です。
若いエンジニアにとっても、JavaやC#だけでなく、COBOLを習得してハイブリッドになっておけば、ニッチなCOBOL市場で高条件の仕事に巡り合うチャンスも大いにあるでしょう。
COBOLを別言語に書き換えても、ジョブやプログラムの構成を変更しない場合は、保守のやり方は基本的に変わりません。本質的な問題は、業務ノウハウの習得や継承が難しいことなのです。例えば、あるジョブが異常終了した際に、調べなければならない対象ソースや復旧対象のデータ、再実行方法などは変わりません。移行対象システムの重要性や保守頻度と、言語を書き換えることによるメリット(COBOL撤廃によるランニングコスト低減など)とデメリット(移行時コストの増大と移行後保守性の低下など)を多面的に評価して、移行先の言語を決めるべきだと思います。
重要度の高いシステムのうち「業務ノウハウが肝だが継承がうまくいってない」システムは、再構築して自社のエンジニアに業務ノウハウを植え付けることが望ましいです。生産性を上げるために、当社製「WebPerformer」のようなローコード開発ツールを用いることもお勧めです。
■マイグレ編 ~創成期~
1990年代。バブルが崩壊し、企業は設備投資が控えられるような節約生活に突入。マイグレーションという言葉がまだマイナーだった頃のお話です。
某社が主力として使っていたメインフレームの一つが製造停止になってしまうことを契機に、別機種のメインフレームへのマイグレーションをシャカリキになって約5年やりました。大規模でミッションクリティカルなシステムが多く、アセンブラも大量にある難易度の高いマイグレーションでした。
アセンブラの再構築は、コボ郎が中心で行い、苦労と達成感が大きかったので、少しご紹介したいと思います。
移行元では、オンラインの業務プログラムの画面送受信や罫線や色の変更を簡易化して開発生産性を上げるために、アセンブラ共通プログラムを用いていました。アセンブラ共通プログラムを廃止し、移行先の標準的な画面インターフェースを用いるようにオンライン業務プログラムを手修正する方法もありますが、その場合は手修正による品質低下は免れません。オンライン業務プログラムのインターフェースを変えずに、移行先OS配下で同じ機能が実行できるように代替の共通プログラムを再構築することで、オンライン業務プログラムのツール変換を可能としました。
しかし、出来上がったフローチャートを眺めて何をしているのかを把握することは難しく、何をしているかの謎が解けた時は、パズルが解けたような感覚で喜びもひとしおでした。
約30年前のマイグレーションへの対応方法は、次のとおりでした。
- 徹底的に非互換(*1)を洗い出す
- 精度の高い変換ツールを開発して、手修正を極力なくす
(この頃は変換ツール自体もCOBOLで作っていたので大変でした) - 現新照合テスト(*2)の生産性を上げるため、テスト実行やテスト結果の比較を行うテスト支援ツールに工夫を凝らす
(*1) 非互換:移行時にCOBOL変換やJCL変換、データ変換などのなんらかの対応が必要となる事項
(*2) 現新照合テスト:移行元と移行先で同じテストを行い、それぞれのテスト結果を比較して一致することを確認するテスト
この時の「メインフレーム to メインフレーム」マイグレーション技術が当社のマイグレーションの礎になっています。
なお、当社のマイグレーションで扱ってきたメインフレームのOSは、IBM OS390/z/OS 、NEC ACOS-6/ACOS-4/ACOS-2、三菱電機 GOS、富士通 MSP、日立 VOS3です。今となっては、無くなってしまった懐かしいOSもありますね。
⇒詳細は次回へ続く
■COBOL編 ~一番重要なのはMOVEとIF~
コボ郎が社会人になって教わった初めての言語はPL/Ⅰでした。当時、講師の先生が、PL/Ⅰで「一番大切なのは移送と条件判定だ」と言われていたことがコボ郎のCOBOL技術の根底にあります。COBOLのMOVE命令とIF命令をしっかりマスターすることが、COBOL技術上達の早道です。本当にそうです。
今回は、MOVE元と先の項目属性によって転記の種類が英数字転記か数値転記に決まること、英数字転記とは何か、数値転記とは何か、IFの左辺と右辺の項目属性によって比較の種類が英数字比較か数値比較に決まること、英数字比較とは何か、数値比較とは何かについて説明します。
次の問題を解いたあと、解答と解説をご覧ください。
■問題
01 W-9-03X.
02 W-9-03 PIC 9(03).
01 W-9-04X.
02 W-9-04 PIC 9(04).
問題1 下記のMOVEを実施した後、IF条件は真となりますか?偽となりますか?
MOVE 10 TO W-9-03.
MOVE W-9-03 TO W-9-04X.
IF W-9-03 = W-9-04
DISPLAY "W-9-03 = W-9-04" UPON SYSOUT
ELSE
DISPLAY "W-9-03 NOT = W-9-04" UPON SYSOUT
END-IF.
問題1
答え:偽
DISPLAY "W-9-03 NOT = W-9-04" UPON SYSOUT が実行されます。
PICTURE句(PIC)やUSAGE句で属性が定義されている項目を「基本項目」、そうでない項目を「集団項目」と呼びます。
「MOVE 10 TO W-9-03」は、数字定数から数字項目(基本項目)への転記となるため、数値転記のルールが適用されます。
数値転記は転記元と転記先の小数点位置を合わせて値が転記され、不足する桁には0が補われます。
W-9-03は、USAGE句が省略されているため既定値であるUSAGE DISPLAY(ゾーン10進数)となるため、MOVE後のW-9-03のメモリー内容(16進数表記)は下記となります。
「MOVE W-9-03 TO W-9-04X」は、数字項目(基本項目)から集団項目への転記となります。転記元または転記先のどちらかが集団項目の場合は、英数字転記となります。
英数字転記は転記元から転記先へ左詰めで値が転記され、不足する桁は空白が補われます。
MOVE後のW-9-04Xのメモリー内容(16進数表記)は下記となります。
「IF W-9-03 = W-9-04」は、数字項目(基本項目)と数字項目(基本項目)の比較なので、数値比較となります。
数値比較は比較元と比較先の小数点位置を合わせ、右から左へ1桁ずつ値が比較されます。一方が不足する桁は0と比較されます。
問題2 下記のMOVEを実施した後、IF条件は真となりますか?偽となりますか?
MOVE 10 TO W-9-03.
MOVE W-9-03 TO W-9-04X.
IF W-9-03X = W-9-04X
DISPLAY "W-9-03X = W-9-04X" UPON SYSOUT
ELSE
DISPLAY "W-9-03X NOT = W-9-04X" UPON SYSOUT
END-IF.
問題2
答え:真
DISPLAY "W-9-03X = W-9-04X" UPON SYSOUT が実行されます。
「IF W-9-03X = W-9-04X」は、集団項目と集団項目の比較なので、英数字比較となります。
比較元と比較先の片方または両方が集団項目の場合は英数字比較となります。
英数字比較は比較元と比較先を左から右へ1桁ずつ値が比較されます。一方が不足する桁は空白と比較されます。
問題3 下記のMOVEを実施した後、IF条件は真となりますか?偽となりますか?
MOVE 10 TO W-9-03.
MOVE W-9-03 TO W-9-04.
IF W-9-03 = W-9-04
DISPLAY "W-9-03 = W-9-04" UPON SYSOUT
ELSE
DISPLAY "W-9-03 NOT = W-9-04" UPON SYSOUT
END-IF.
問題3
答え:真
DISPLAY "W-9-03 = W-9-04" UPON SYSOUT が実行されます。
「MOVE 10 TO W-9-03」後のW-9-03は、下記の通り。(詳細は問題1を参照)
「MOVE W-9-03 TO W-9-04」は、数字項目から数字項目への転記となるので、数値転記となります。
MOVE後のW-9-04のメモリー内容(16進数表記)は下記となります。
「IF W-9-03 = W-9-04」は、数字項目(基本項目)と数字項目(基本項目)の比較なので、数値比較となります。
数値比較は比較元と比較先の小数点位置を合わせ、整数部は右から左へ1桁ずつ値が比較されます。一方が不足する桁は0と比較されます。
問題4 下記のMOVEを実施した後、IF条件は真となりますか?偽となりますか?
MOVE 10 TO W-9-03.
MOVE W-9-03 TO W-9-04.
IF W-9-03X = W-9-04X
DISPLAY "W-9-03X = W-9-04X" UPON SYSOUT
ELSE
DISPLAY "W-9-03X NOT = W-9-04X" UPON SYSOUT
END-IF.
問題4
答え:偽
DISPLAY "W-9-03X NOT = W-9-04X" UPON SYSOUT が実行されます。
「IF W-9-03X = W-9-04X」は、集団項目と集団項目の比較なので、英数字比較となります。
比較元と比較先の片方または両方が集団項目の場合は英数字比較となります。
英数字比較は比較元と比較先を左から右へ1桁ずつ値が比較されます。一方が不足する桁は空白と比較されます。
MOVEとIFの動作の概略は理解いただけたでしょうか?
次回は属性のバリエーションをパック10進数や2進数などに拡げ、MOVEとIFについて深堀りします。
※記載の会社名、製品名などは、それぞれの会社の商標もしくは登録商標です。
※免責事項
・当コラムに記載した内容に関して、いかなる保証もするものではありません。
・記載内容は予告なく変更する可能性があり、記載内容に誤りがあった場合でも一切責任を負いかねます。
関連するソリューション・製品
- マイグレーション(モダナイゼーション) お客さまが作り込まれた貴重なアプリケーション資産を有効活用し、最新のITインフラやミドルウェアを用いたシステムに刷新するソリューションです。
- 端末エミュレータ IBM、富士通、日立、NECの各社メインフレーム、およびIBM i(AS/400)のオンライン端末機能(日本語3270、6680、560/20、ETOS、日本語5250)を提供する、端末エミュレータ製品と関連製品についてご紹介します。
- EDI-Master B2B for Mainframe
EDI-Master B2B Mainframe(以降、B2B Mainframe)は、各種EDI標準通信プロトコルを含むマルチプロトコルに対応し、対外的なEDIから社内のファイル転送までを一元管理できる、統合データ交換システムです。集配信管理機能、ディスパッチ(自動運用)機能による完全自動運転が可能で、データ交換業務の効率化に貢献します。
「EDI-Master B2B for TLS」と連携することで、「全銀協標準通信プロトコル(TCP/IP手順・広域IP網)」にも対応できます。
※本製品は2021年10月1日に「EDI-Master DEX for Mainframe」より「EDI-Master B2B for Mainframe」に製品名称を変更しました。