- コラム
コラム|舞呉コボ郎のマイグレーション放浪記
第4回 厳冬期を耐え忍んで次のステップへ / マイグレーション時にCOBOL製品が変わるときに気を付けること [2024.11.12]
舞呉コボ郎のマイグレーション放浪記
前回「第3回 メインフレーム to UNIX 編 / COBOL IFの深掘り」はこちら
こんにちは。舞呉コボ郎です。今回は、当社のメインフレーム to UNIXがブレイクした時のお話です。
マイグレ編 シーズン1最終回~厳冬期を耐え忍んで次のステップへ~
2010年代のはじめから中頃のお話です。
黄金期も過ぎ去り、「メインフレーム to UNIX」の案件数は徐々に落ち着いてきました。要員の稼働状況に応じ、全く関係のない仕事を一時的に手伝う「出稼ぎ」を行うこともありました。
同業の他社の方と話をしても、マイグレーション案件は活況の時とそうでないときのギャップが激しいようです。極端な例では、事業自体を止められたり、一旦止めた後に再開したりしている企業もあるようです。大規模案件の要員収束に合わせて、同規模の他案件が開始するような計画を立てられればよいのですが、そんなに都合よくはいきません。お客さまに提案してから受注するまでに1年以上かかる案件も珍しくないですし、すぐに始まると思っていた案件がなくなってしまうこともあります。受注量と要員確保のバランスを取ることが大変難しいのです。閑散期が来ることはある程度仕方がないと思うのですが、閑散期の過ごし方が大切なのです。「出稼ぎ」のような一時しのぎは極力避けて、少し先を見据えて次のステップに備えるのです。種を仕込むのです。
この時の厳冬期には、「メインフレーム to Windows」の基盤ツールや変換ツールをせっせと仕込みました。なぜWindowsなのかというと……
- Windowsの信頼性が高まってきた(Linuxはまだメジャーではなかった)
- UNIXサーバーに比べるとハード/ソフトが安価
- UNIXへの移行に比べて圧倒的に安価になるような施策で市場へアピールできる
そして、当時はこんなものを仕込みました。
- マイグレーションに必要なミドルウェアのうち、Windows版が存在しないものがあったので、同等機能のミドルウェアを自社開発した
- 移行後、画面にGUI機能が追加できるものなど、受注競争でアピールできるプラスアルファの機能を自社開発した
ようやく1件目の「メインフレーム to Windows」が受注でき、順調に開発を進めていました。そんな最中、当案件ユーザーのM&Aが発表され、暗雲が立ち込めました。いやな予感は当たり、マイグレーション対象のシステムを使わないことが決まり、案件自体も消滅したのです。青天の霹靂でした。ガ、ガ、ガ、ガ-ンです。
そんな中、前回のコラムでお話ししたA社案件の関連で、すぐに別の「メインフレーム to Windows」案件が受注できました。いやー、あの時、勇気を出してA社案件をやって良かったなぁ。人と人との繋がりや義理人情は本当に大切ですね。そして、「メインフレーム to Windows」は狙いどおりにヒットしました。
一方、当時まだメジャーではなかった「メインフレーム to Linux」も技術的には「メインフレーム to UNIX」とほぼ同じなので、ツール類に新たな対応は不要で、Linuxがメジャーになるとともに案件が増えてきました。
厳冬期にもマイグレーションに向き合い仕込みをしてきたことが、当社の今のマイグレーションサービスの基礎になっています。
シーズン1は今回が最終回となります。これまで本コラムをお読みいただきありがとうございました。当社の強みは、脈々と30年以上マイグレーション専門組織を維持し、コボ次郎だけでなくコボ三郎、コボ四郎などに、舞呉家の秘伝を伝承できていることです。これから起こるエピソードについて、彼らがコラムのシーズン2を執筆するときが来るかもしれません。
COBOL編 ~マイグレーション時にCOBOL製品が変わるときに気を付けること~
COBOLの神髄は、MOVEとIFです。MOVEとIFについては、詳しく説明させていただきました。それ以外は、難しいところはありません。所詮、制御構造はどのような言語でも大きく変わりませんし、マニュアルを読めば容易に理解できます。シーズン1の最終回では、マイグレ時に気を付けるポイントについて、コボ郎の経験から得たことの一部をお話ししたいと思います。
演算精度
COMPUTE命令の計算式は、コンピュータの中で、2項ずつに分割して演算されますので、3項以上の演算では中間結果が使用されます。
(例)COMPUTE A-6 = B-2 * (C-4V1 / D-2V2)
上記の演算では、3項の演算となり、下記のように中間結果を使って計算されます。
C-4V1 / D-2V2 → 中間結果1
B-2 * 中間結果1 → A-6
ここで、重要になるのが中間結果の桁数です。COBOL製品の仕様やコンパイル指令によって、中間結果の最大桁数は、30桁だったり、31桁だったり、40桁だったりします。この3種類は、コボ郎がこれまで出会ったことのあるもので、その他にもあるかもしれません。また、中間結果の小数部桁数を決定する仕様もコンパイラやコンパイル指令によって、微妙に異なる場合があります。上記演算の各項目の属性が下記の場合、某COBOL①では中間結果①がS9(6)V(1) となり、某COBOL②では中間結果②がS9(6)V(2)となります。
01 A-6 PIC 9(6).
01 B-2 PIC 9(2) VALUE 35.
01 C-4V1 PIC 9(4)V9(1) VALUE 1234.5.
01 D-2V2 PIC 9(2)V9(2) VALUE 32.00.
某COBOL①の演算結果は次のとおり、A-6=1347となります。
C-4V1 【1234.5】/ D-2V2【32.00】 → 中間結果①【38.5】
B-2 【35】 * 中間結果①【38.5】→ A-6【1347】(A-6は小数部がないので、演算結果の1347.5の小数部は切り落とされる)
某COBOL②の演算結果は次のとおり、A-6=1349となります。
C-4V1 【1234.5】/ D-2V2【32.00】 → 中間結果②【38.57】
B-2 【35】 * 中間結果②【38.57】→ A-6【1349】(A-6は小数部がないので、演算結果の1349.95の小数部は切り落とされる)
中間結果の属性が異なると、演算結果が異なる場合があります。恐ろしいですね。当社では、移行元のCOBOLと移行先のCOBOLがコンパイル時に付与する中間結果の桁数差異を把握し、差異が出る可能性のある演算については、プログラム変換で対応しています。
エンディアン
ビッグエンディアンとリトルエンディアンの違いについては、コラムの第二回を参照してください。移行元と移行先のシステムのエンディアンが異なる場合は、注意しなければならない点が結構あります。
外部システムと連携しているファイルにバイナリ項目が含まれている場合の考慮ポイントと対応例
外部から連携されるファイルに変更を加えない場合、移行前同様にビッグエンディアンとしてバイナリ項目が移行後システムに格納されます。COBOLプログラムでビッグエンディアンのバイナリ項目として定義しなくてはなりません。
移行前に下記のように定義されていた場合、IN-BIN01は、COMP-5で定義されているので環境依存となります。移行前環境ではビッグエンディアンとなりますが、移行後環境ではリトルエンディアンとなります。IN-BIN02はCOMPで定義されているので環境によらずビッグエンディアンとなります。よって、下記例として定義されているCOBOLプログラムは移行時に下記のように変更する必要があります。
01 IN-REC.
03 IN-BIN01 PIC S9(08) USAGE COMP-5.
03 IN-BIN02 PIC S9(08) USAGE COMP.
↓
01 IN-REC.
03 IN-BIN01 PIC S9(08) USAGE COMP.
03 IN-BIN02 PIC S9(08) USAGE COMP.
DBサーバーがビッグエンディアンで移行先環境がリトルエンディアンとなる場合のDB内バイナリ項目に関する考慮ポイントと対応例
考慮点と対応方法の考え方
①DBMSの通信時のデータ変換機能によってバイナリ項目がどのように変換されるのかを確認する。(クライアント側のエンディアンに合わせられるか否か)
②移行後のCOBOLやDBMSプリコンパイラのコンパイルオプションなどにより、バイナリ項目の定義を変更する機能の有無を確認する。
③上記①と②の整合性が合うように、コンパイルオプションや各種設定、必要に応じてCOBOLプログラムの変更で対応を行い、DB内のバイナリ項目を正しくアクセスできるようにする。
浮動小数点演算
浮動小数点演算を用いる場合の注意点
COBOLの固定小数点演算で使用できる数値項目の桁数は最大18桁(整数部の桁数+小数部の桁数)です。固定小数点演算では扱えない大きな桁や小さな小数桁を用いて演算する場合に浮動小数点項目(COMP-1またはCOMP-2)を用いる場合や、非整数(小数部を含む値)のべき乗を求める演算や、浮動小数点が返却される三角関数などの組み込み関数を用いた演算が浮動小数点演算となります。浮動小数点演算は誤差を含みます。誤差を許容できない場合は、浮動小数点の規格(IEEE754 or IBM方式)と単精度か倍精度かによって、誤差の発生する条件を把握した上で、誤差が含まれる桁数を切り捨てるなどのコーディングを行う必要があります。
移行時の注意点
移行前と移行後で浮動小数点の規格が異なる場合は、小数部の末尾の方の誤差を含む桁は演算結果が異なってきます。移行前のアプリケーションプログラムで適切に誤差の対応を行っていても、移行後の規格では、なんらかの追加対応が必要となる場合が多いです。移行前と移行後の浮動小数点の規格が同じであっても、COBOL製品やコンパイルオプションによって微妙な差分が発生する場合もあるため、必ず早めに差分の有無を確認することをお勧めします。
これまで本コラムに掲載したことが、COBOLを使われている方や、COBOLを移行する方の一助になれば幸いです。ありがとうございました!
※Windowsは、米国Microsoft Corporationの、米国、日本およびその他の国における登録商標または商標です。
※記載の会社名、製品名などは、それぞれの会社の商標もしくは登録商標です。
※免責事項
・当コラムに記載した内容に関して、いかなる保証もするものではありません。
・記載内容は予告なく変更する可能性があり、記載内容に誤りがあった場合でも一切責任を負いかねます。
関連するソリューション・製品
- マイグレーション(モダナイゼーション) お客さまが作り込まれた貴重なアプリケーション資産を有効活用し、最新の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」に製品名称を変更しました。