レガシーシステムとは
レガシーシステムとは、過去の技術や仕組みで構築されており、最新のシステムに見劣りするものをいいます。
ベンダーの独自OSを使うメインフレームやオフコン(オフィスコンピュータ)で稼働するCOBOLなどのプログラミング言語を使って開発されたシステムが一般的です。
1990年代後半以降には、UNIXなどで稼働するオープン系などと呼ばれるシステムが開発されました。
しかし、この時期に開発されたオープン系システムであっても、最新の技術に対応することが難しいことから、レガシーシステムと呼ばれることがあります。
2018年に経済産業省が公表したDXレポートでは、約8割の企業がレガシーシステムを抱えており、その保守・運用に貴重なIT人材が浪費されていると指摘しています。
よくある失敗例
レガシーシステムを抱えている企業は、新システムへの移行を考えます。
そのとき、古いシステムをそのまま新しいプラットフォームに置き換えようとしがちです。
すると開発ベンダーに対し、つぎのような要求をします。
「古いシステムの仕様がそのまま新システムの仕様だ。
古いシステムと同じインプットに対し、同じアウトプットを出すようにしてくれ。」
これを受け入れたプロジェクトは失敗します。
多くの失敗プロジェクトが犯している誤りではないでしょうか?
失敗の理由
なぜ、古いシステムと同じアウトプットを要求すると失敗するのでしょうか?
古いシステムのドキュメントが不完全
古いシステムのドキュメントがない場合があります。
あったとしても最新の状態に更新されていないこともあります。
そもそも人が書いたドキュメントに完全であることを期待することが間違いです。
ドキュメントには誤りがあることを想定しなければなりません。
すると、古いシステムの仕様を確認するためには、
プログラムそのものを確認しなければなりません。
ソースプログラムがない
コンパイラ言語の場合はソースプログラムがないこともあります。
また、本番業務で動いているプログラムのソースプログラムが、最新のものでない場合もあります。
プログラムの修正を始めたところ何かの理由で中断し、そのままにしてしまったときなどに起こります。
いずれもプログラムの管理が悪いために発生することですが、ありえることだと覚悟しておく必要はあります。
コンピュータでプログラムが動くときは、コンピュータが理解できる機械語で動きます。
しかし、機械語を人間が理解することは難しいので、人間に分かりやすい言語で書いて、それを機械語に翻訳する方法などが取られます。
プログラムを実行する前にまとめて機械語に翻訳するプログラミング言語をコンパイラ言語と言い、人間に理解しやすい言語で書かれた翻訳前のプログラムをソースプログラムと言います。
その結果起こること
- 古いシステムが仕様である
- ドキュメントには間違いがある可能性がある
- ソースプログラムもなかったり、正しいものでない可能性がある
このような状況で新システムを開発しようとすると
一般に次のような手順になります。
- 存在するドキュメントを新システムの仕様と考える
- ドキュメントで不明な点はソースプログラムを確認する
- ソースプログラムがなかったり、稼働中のシステムと動作が異なると思われるときは稼働中のシステムを分析する
- 同じインプットに対する新システムと古いシステムのアウトプットを比較する
結局、古いシステムの仕様は、古いシステムの動作を調査して確認することになります。
そして、新システムが古いシステムと同じ仕様であることを確認するためには、
あらゆる場合において、新システムと古いシステムのアプトプットを比較するしかありません。
あらゆる場合について調査し、
あらゆる場合の処理結果を比較しなければならないため、
そのための工数は莫大なものとなり、見積することさえ困難です。
さらに古いシステムにはバグもありえます。
古いシステムが内在しているバグによる結果のアウトプットも、
正しいものとして扱わなければなりません。
以上の理由で、古いシステムと同じアウトプットを出すという仕様を受け入れてしまうと
いつまでたってもアウトプットが一致しないということになり、
プロジェクトの費用も期間も膨れ上がることになります。
レガシーシステムの移行でやるべきこと
それでは、レガシーシステムを移行するためにはどうすればよいのでしょうか?
新規に仕様を定める
まず、仕様は新規に定める必要があります。
「古いシステムと同じ」としてはいけません。
この機会に、システムの仕様を根本から見直すことです。
見直しのポイントは次のとおりです。
ムダなアウトプットはないか
帳票・画面などをなくせないかを検討します。
以前は使っていた帳票が今は不要になっていたということは珍しいことではありません。
簡素化できないか
手作業で行っていた処理をそのままコンピュータ化したようなシステムでは、
必要のない処理がたくさん含まれています。
そのような処理を洗い出し、処理を簡素化します。
そのためには、ステークホルダー(システムに関わるすべての人)が
処理を簡素化することに合意しなければなりません。
これにはたいへん手間のかかることもあります。
しかし、手作業をそのままコンピュータ化したことが間違いだったのです。
この機会に見直し、合理的な処理に変更することが必要です。
まとめ
新システムの仕様を古いシステムと同じとしてはいけません。
古いシステムと同じとすると莫大な工数が必要になります。
新システムの仕様は新規に考え直し、可能な限り簡素なものにすべきです。