COBOLメインフレームをモダナイズする方法

4つの戦略、それぞれに実際にかかるコスト、そして特定のワークロードにどの戦略が必要かを見極める方法。意思決定の承認を担う方に向けて書かれています。

メインフレームのモダナイゼーションに関するアドバイスの多くは、移行するかしないかという1つの問いに集約されます。そのような捉え方が、多くのプログラムが停滞する理由です。大規模な組織が抱えるメインフレームのワークロードは1つではありません。何百ものワークロードが存在し、そのすべてを同じように扱うべきではないのです。有効な意思決定はワークロードごとに行うものであり、そこには4つの妥当な答えが存在します。

4つの戦略

01

リホスト

コードを変更せず、ワークロードをそのままエミュレーターやクラウドインスタンスに移行します。

Good for
ビジネスロジックが現在も適切であり、ハードウェアコスト、キャパシティ、またはデータセンターからの撤退が課題となっているワークロード。
What it costs
ワークロード単位で最も迅速かつ低リスクな手法です。コードはそのまま実行されるため、仕組み上、動作はほぼ維持されます。
The catch
問題を別の場所に移しただけで、解決したわけではありません。COBOLはCOBOLのままであり、ドキュメント化されていないビジネスルールはそのまま残り、それを理解できるのは依然として特定の担当者だけです。内容を把握できていないワークロードをリホストしても、単なる時間稼ぎにしかなりません。
02

リプラットフォーム

アプリケーションコードをほぼそのまま維持しながら、データベース、トランザクションマネージャー、スケジューラーなどのランタイム層を入れ替えます。

Good for
アプリケーションロジック自体が健全な場合に、MIPS単位のライセンスやサポート終了を迎えたサブシステムから脱却するのに適しています。
What it costs
中間的なアプローチです。リライトよりもリスクが低く、リフト&シフトよりも大きなメリットが得られます。
The catch
アプリケーションコードとランタイム間のインターフェースには、何十年にもわたる文書化されていない前提が潜んでいます。DB2からPostgreSQLへの移行は、単なる検索と置換ではありません。分離レベル、照合順序、NULLの処理などはすべて異なり、その違いはクラッシュではなく誤った数値として表面化します。
03

リファクタリング

ビジネスロジックを維持しつつ、コードをモダンな言語に書き換える。

Good for
頻繁な変更が求められ、COBOL技術者の不足が運用面ではなくロードマップ上の制約となっているワークロード。
What it costs
コストは最も高いですが、得られる効果も最大となります。適切に実行すれば、特定のスキルへの依存を恒久的に排除できます。
The catch
これは公に失敗が報じられやすい戦略です。失敗の要因が構文になることはありません。構文はトランスパイラが処理するためです。本当の要因は、仕様が文書化されておらず、新しいシステムが正しいかどうか誰にも判断できないことにあります。これはコードの移行ではありません。振る舞いとしてのみ存在する仕様を復元する作業なのです。
04

リテイン

ワークロードを意図的にメインフレームに残します。

Good for
運用コストが低く、変更がほとんど発生しない、安定した高スループットのワークロード。バッチ決済処理がその最も分かりやすい例です。
What it costs
意図的に選択し、その理由を文書化している場合は、コストはかかりません。
The catch
「リテイン」は有効な戦略ですが、役員会議の資料には記載しづらいため、十分に活用されていません。しかし、文書化を伴わないリテインは戦略ではなく、単なる先送りです。担当チームが退職すれば、結局は知識が失われてしまいます。

ワークロード別の選択方法

各戦略を必要とするワークロードを見極めるための4つの質問があります。ポートフォリオ単位ではなく、アプリケーション単位で回答してください。

このコードは実際にどの程度の頻度で変更されているか?
個人の意見ではなく、実際の変更履歴を確認してください。8年間変更されていないコードは、言語の古さに関わらず、維持またはリホストの候補となります。未対応の変更要求が蓄積しているコードこそ、リファクタリングの費用対効果が得られる領域です。
現在、それがどのような処理を行っているか説明できる人はいますか?
その答えが特定の担当者1、2名に依存している場合、どのような移行戦略であってもまだ安全とは言えません。ドキュメント化とナレッジの収集は前提条件であり、移行の過程で作成する成果物ではありません。
誤りがあった場合のコストはどの程度か?
利息計算の誤計上とレポート出力の遅延は、同じリスクではありません。表面化しない動作の差異によるコストが高いほど、移行にはより多くの検証が必要になり、経済的な合理性はリテインやリホストへと傾きます。
実際に変化を強いている要因は何ですか?
ハードウェアコスト、コンプライアンスの期限、スキル不足の壁、製品ロードマップのどれが要因かによって、取るべき戦略は異なります。この要因を明確にできないプログラムは、最も高額な選択肢に落ち着く傾向があります。

COBOLからJavaへの移行が失敗する理由

リファクタリングのパスは、ニュースの見出しになることが多いため、個別に扱う必要があります。繰り返し発生する失敗のパターンは、どの組織でも共通しています。

仕様が一度も文書化されていない

40年間の変更内容はコードの中にのみ存在し、他のどこにも記録されていません。したがって、すべての書き換え作業は、エンジニアリングである前に、まず考古学的な調査となります。この調査を省略したチームは、本番環境でルールの欠落に気づくことになります。

動作の乖離は静かに進行する

COBOLのパック10進演算とJavaの浮動小数点では、丸め処理の結果が同一にはなりません。1トランザクションあたり1セントの誤差が生じても例外は発生せず、マイグレーションの完了が宣言されたずっと後になって、四半期末の照合時に不一致として発覚するのです。

テストは「正しい動作」ではなく「現在の動作」をコード化する

レガシーシステムを対象に作成されたテストスイートがパスしたとしても、それは「誰かがテストしようと考えたパス」において、新システムが旧システムの動作を再現していることを証明するにすぎません。実際のポートフォリオには、過去10年間、誰も意図的に実行していないパスが存在します。

規制の再認証にはコストがかかる

銀行、保険、政府機関では、再構築されたシステムは監査上、新規システムとして扱われることがよくあります。そのコストは開始時のビジネスケースに組み込むべきであり、9か月目に発覚するようなものであってはなりません。

プログラム途中での専門家の離脱

複数年にわたるプログラムは、依存する人材の退職時期と直接重なります。最も必要とされる時にはすでにその知識を活用できなくなっているため、プログラムの開始前に知識を抽出しておく必要があります。

経済性を変える質問

上記のすべての戦略は、共通の制約を受けます。それは「システムが以前と同じ処理を行っていることを証明できるか」という点です。テストは入力空間をサンプリングするものです。一方、形式的検証は入力空間全体を論理的に推論し、すべての入力に対してモダナイズ後の処理がレガシーシステムと同じ出力を生成することを証明します。この証明が可能であれば、リファクタリングは不確実な賭けではなく、見通しの立つエンジニアリング作業となります。その結果、前述の「失敗した場合のコスト」に関する問いの答えも変わります。証明が不可能な場合は、保守的な姿勢をとるのが適切です。

Hypercubicの位置づけ

私たちは、ソフトウェア考古学、そして証明、という順序で構築を行います。HyperDocsは、COBOL、PL/I、JCLのソースからドキュメントを再構築します。HyperTwinは、シニアエンジニアが退職する前に、その知識を記録します。Hopperは、z/OSの日常的な運用を実行します。HyperLoopは、行レベルで正確性を証明しながら、移行そのものを実行します。もし、後の2つよりも最初の2つが重要となるような初期段階にあるのなら、これが偽りのない順序です。

よくある質問

メインフレームモダナイゼーションの4つの戦略とは何ですか?
リホスト、リプラットフォーム、リファクタリング、リテインです。リホストは、コードを変更せずにワークロードをエミュレーターやクラウドインスタンスに移行します。リプラットフォームは、アプリケーションコードに変更を加えず、ランタイム層(データベース、トランザクションマネージャー、スケジューラー)を入れ替えます。リファクタリングは、ビジネスロジックを維持しながら、コードをモダンな言語で書き換えます。リテインは、意図的にワークロードをメインフレーム上に残します。大規模な組織では通常、どれか1つを選ぶのではなく、1つのポートフォリオに対して複数の戦略を適用します。
COBOLアプリケーションはリホストとリファクタリングのどちらを選択すべきですか?
コードの変更頻度と、障害発生時のコストによって異なります。リホストは迅速かつ低リスクですが、レガシーコードと特定のスキルへの依存が残るため、ハードウェアやデータセンターの制約に迫られている安定したワークロードに適しています。リファクタリングはCOBOLへの依存を完全に排除できるため、継続的な変更要件があるワークロードに適していますが、コストが高く、既存のビジネスルールがドキュメント化されていない場合は失敗するリスクがあります。ポートフォリオ全体で一律に判断するのではなく、変更履歴に基づいてワークロードごとに決定してください。
COBOLからJavaへの移行はなぜ失敗するのですか?
構文が原因で失敗することはめったにありません。失敗の理由は、仕様が文書化されておらず、書き直されたシステムが正しいことを誰も証明できないためです。また、COBOLのパック10進数とJavaの浮動小数点数では演算が異なり、クラッシュするのではなく、気づかないうちに丸め誤差が蓄積していくためです。さらに、テストスイートがすべてのパスにおける正しい挙動ではなく、誰かがテストしようと思いついたパスの現在の挙動を正解として組み込んでいること、規制当局の再認定にかかるコストが後になって発覚すること、そしてシステムを熟知した専門家がプロジェクト期間中に退職してしまうことも原因として挙げられます。
メインフレームモダナイゼーションにはどのくらいの期間がかかりますか?
コードの量よりも、既存のシステムがどの程度理解されているかに大きく依存します。最新のドキュメントが揃っており、業務に精通した担当者がいるポートフォリオであれば、四半期単位で進捗します。ビジネスルールがシステムの振る舞いとしてしか存在しないポートフォリオの場合、移行作業を開始する前に、スケジュールの大部分を仕様の把握に費やすことになります。そのため、ドキュメント化とナレッジの抽出は、並行作業ではなく前提条件となるのです。
ワークロードをメインフレームに残すのが適切な場合はありますか?
はい。安定してスループットが高く、変更がほとんどなく、運用コストが低いワークロード(バッチ決済はその最も分かりやすい例です)は、多くの場合、すでに目的に適合しています。これらを移行しても機能は追加されず、リスクが増大するだけです。意図的に選択され、文書化されているのであれば、維持(リテイン)は正当な戦略です。戦略と呼べないのは、誰も説明できないワークロードをそのまま維持することです。チームが退職すれば、結局その知識は失われてしまうからです。

どのワークロードを最初に移行するかを見極める

4つの戦略に対するポートフォリオのマッピングについては弊社チームにご相談いただくか、社内用語を整備している場合は用語集からご覧ください。