頼れる人材はすぐそばにいる――地元SEのすごい提案:闘うマネジャー
汎用機システムのダウンサイジングには、さまざまな課題につきあたる場面がある。しかしそこをブレークスルーするアイデアをひねりだしたのは、地元SEだった。
ファイル入出力単位の違いをどうするか
前回、OpenCOBOLがオープンソースであることを活かせば、ファイルの入出力をSQLに変えるように改造することも可能だと書いたが、試行錯誤を何度か繰り返し、現在最後の詰めの段階に入っている。
ご存じの通り、COBOLでのファイルの入出力はレコード単位であり、DBは項目単位である。ダウンサイジングを行う上では、この根本的違いをどうするかが大問題になる。
汎用機では、業務や制度が改正されると、ファイル構造を変えざるをえなくなり、ちょっとした改修なのに想定以上の費用がかかったという事例が後を絶たない。その度に、「なんでなんだ。ふざけてるのか」と文句を言われた経験も持つ読者は多いのではないだろうか。この課題はDBを利用すれば解決するが、ダウンサイジングが目的の場合、どうもなじまない。課題が全く違うのだ。
ダウンサイジングのために、大量にあるCOBOLのソースプログラムを手直ししてSQLを組み込むのは、手間がかかるだけでなく、新たなバグを生むことにつながる。大量であるがゆえに、作業の課程で必ずミスが発生するからだ。COBOLを財産・資産だと思えばこそ使おうとしているのに、バグの温床になってしまうなんて本末転倒でありばかばかしい。
では、オープンソースであることを活かして、OpenCOBOLのC言語変換部分をちょっといじって、SQL呼び出しに自動変換できるかというと、これは技術的に難しい。COBOLのフォーマット定義と、DBのフォーマット定義を結びつける外部ファイルを用意すればいいというような単純な話ではないからだ。
例えば、時刻の情報だが、1995年の10月9日の10時59分を、汎用機では文字列として 9510091059 と表現している。DBに移行するなら、datetime型にして 1995-10-09 10:59:00 としたいと思うのは作業をする県職員として極めて自然なことだが、SEの視点では「変換をするってことだよね」となる。そもそも、汎用機でプログラムが書かれた時代は、ハードが高価であったため、「そこまでするの」といいたくなるくらいに情報を詰めに詰めて格納している。それを、一般的な表現に直してDBに格納するのだから「OpenCOBOLをちょっといじって」というような単純な話ではない。
「バグの温床」を避けて通る方法
そこで、前回、「物好き」とした地場のSEと、ああだこうだと議論することになるのだが、最後に彼はこんな提案をした。
- COBOLのフォーマット定義と、DBのフォーマット定義を結びつける外部ファイルが必要なのは間違いないのだから、いっそのこと外部ファイルをperlにして、変換処理もそこで行ってはどうだ。
- そして、このperlプログラムをCOBOLのCALL文で読んだらどうだろうか。
この案には正直驚かされた。perlは大規模システムには向かないが、ちょっとしたプログラムを書こうと思ったら、これほど楽で簡単で便利なものはそうそうない。しかもCPANから便利なモジュールが山ほど公開されていて、DBの操作なんてお茶の子さいさいだ。COBOLのCALL文でperlを呼べば良いという発想も凄い。COBOLにおいて、共通ロジックなどを別プログラムで組むことは、プログラミング技法としては基本中の基本である。
具体例を示したい。ファイルのオープンをDBに切り替えるには以下のように直すだけでよい。この程度の書き換えなら、職員が悩むこともないし、バグの温床となることもない。
オリジナルCOBOLソースでの表記
OPEN INPUT INF-1.
改変したCOBOLソースでの表記
CALL "cob_perl" "MySQLDB_open" "INF-1".
このほか、MySQLDB_start、MySQLDB_read、MySQLDB_write、MySQLDB_close 等のperlサブルーチンも用意する。
長崎県庁ではDBをMySQLとしているが、perlで接続できるDBであれば何でもOKなので、DBをORACLE、SQLServer、PostgreSQLなどに変えることも可能だ。perl側でトランザクション処理をすればいいので、書き込みを失敗したときにロールバックするのも簡単だし、複数のDBに接続して処理することだって簡単だ。何ともすごい提案である。
安心や実績欲しさに、大手ベンダーにダウンサイジングを委託した場合、上記のようなことが果たしてできただろうか。もし、成果を急ぐあまり、汎用機撤去までの期間を3年としてしまったら、失敗しないダウンサイジングへの道筋を選択できただろうか。筆者はいずれも否だと思う。
長崎県庁において汎用機が撤去されるまで、まだ4年ある。道なかばではあるが、地場SEに支えられ確実なダウンサイジングへの線路は引けたようだ。地場企業だから大した仕事はできない、なんて思わないでほしい。発注側が考えを変えさえすれば、人材は確実にあなたのすぐそばにいる。
関連記事
- 複雑・怪異と思えた汎用機を丸裸に
業務知識の世代交代を着実に行いダウンサイジングを実現するために、長崎県では一気に進めるのではなく、2期構成とし、OpenCOBOLを利用することにした。 - ダウンサイジングに8年、その背景と理由
安易なシステムのダウンサイジングはコスト増に陥る結果になりやすい。次世代にしっかりと受け継がれるものを構築する必要がある。 - 着実な「業務知識の世代交代」が将来のリスクを減らす
長崎県庁では「高止まりしている運用経費の削減」を目的に汎用機のダウンサイジングを進めているが、もう1つ大きな目的がある。「システム上の業務知識の世代交代」である。
関連リンク
Copyright © ITmedia, Inc. All Rights Reserved.