LoginSignup
5
2

More than 3 years have passed since last update.

COBOL初めて見たレベルからCOBOLの静的解析ツールを作った話

Last updated at Posted at 2020-11-23

作ったもの

COBOLソースファイルを読み込ませることで、その解析結果をExcel出力するツールです。
(C#で作成)
実行ファイルまたはvscodeの拡張機能として実行することができます。
私のgithubにて公開しています。
注:参画しているPJで使用することを念頭に作ったものなので、多分に汎用的なつくりではありません。
  その為、正しく解析できる保証はありません。(その辺が今後の課題でもあります)

下記はその紹介文です。詳しい機能についてはgithubのreadmeを読んでいただければと思います。

"COBOLソース解析ツール"はCOBOLで記述されたソースコードを静的に解析します。
COBOLソースファイルを手動で解析する前に実行することで、コードの目的、処理内容などの全体感を掴むことを目的としています。
解析結果はExcelに記載されます。

目視での解析前に一度実行し、ソースの全体感をつかむことを目的としています。
下記は作成される各シートのサンプルです。

【PGM情報】
image.png

【関数情報】
image.png

【構造図情報】
※ほんとはオートシェイプを配置したかったですが、closedxmlやepplusでは難しかった…
image.png

ツール作成の経緯

初めてのCOBOL

春から販売管理システムのリプレース案件の設計に携わっているのですが、そこで初めてCOBOLを読む機会に恵まれました。

周りに詳しい人はほぼいない中で読んでみると、変数が全部グローバル変数だし、変数定義されてないと思ったら別ファイルから読み込まれてるし、1行が複数のエリアに分かれていたりなど、これまでC#かVB.NETをメインに使ってきた自分にはかなり新鮮な言語でした。

ただ作業の工程上最初の2か月程度は細かく読める必要もなかったので、ネットで基本的なことを調べつつも、なんとなくこういうことやってんだなくらいの感覚で作業が進められていたと思います。

目視だけで解析するのは難しい

しかしそれも基本設計が本格的になり始めたり、仕様を詰める必要が出てきたりすれば、そうもいかなくなります。
複雑な処理はフローチャートを書いたりもしていたのですが、細かく処理を読む中では関数間をいったりきたりすることに時間を取られがちでした。
※COBOLにおいて関数という呼び方が正しいのかはよくわかっていません。
 ここでいう関数とはPROCEDUREエリア内にSECTION句で区切られた単位の処理のまとまりのことを表現しています。

具体的には変数のスコープが広すぎて、どこで何の値が入っているのかわからなくなる、といったことに振り回されました。
(今でも割と振り回されています)

自然と関数同士の繋がりや関数の役割といった、概要レベルから少し細かく見る、といったことが難しくなり、その時欲しい情報はわかったけどコードを理解したとは言えない状況でした。

そんな時、「ソース編集くん」というツールを発見しました。

テキスト形式のプログラムソースから文法を解析して、
追い易く編集したエクセルブックを作成するエクセルVBAツールです。

素晴らしいツールで、こういうのが欲しかったと思う反面、もっとこういう情報も拾えたらいいのになという想いから自作してみることにしました。

作成期間など

最初のプロトタイプは2週間ほど業務外でこつこつ作りました。実際に費やした時間はトータルで約6人日程度でしょうか。
その後、一部のメンバーにお披露目し、使い勝手や欲しい機能などの要望をヒアリングしました。
(お礼としてジュースをおごりました)

要望は難易度別にA~Cまでランク付けし、対応が容易、かつPJ固有ではなく汎用的で修正による恩恵が大きいと思われるものから対応しました。
特にイシューには上げていませんが、汎用的な対応はだいたい取り込めたのかなという状態です。

途中応用情報技術者試験等あり、なんだかんだプロトタイプ作成から2か月後くらいにPJメンバ全体にお披露目しています。

反省点

  • COBOLの言語仕様を把握しきれているわけではないので、汎用的なつくりにできなかった。 (参画PJで使えればよいという作り)
  • PJに「こういうものを作りました。よければこういう目的で使ってください。」という告知をしたが、おそらくあまり使ってもらえてはいない。
    みんなすでにある程度COBOLを読むことに慣れてきていたということもあるが、活用のイメージを積極的に伝えられなかったこと、直接成果物ができるものではないということが理由なのかなと感じています。

よかったこと

メンバへの普及には至りませんでしたが、ツールを作る中でCOBOL言語への理解を深められたことはよかったです。
また、自分自身はこのツールを使うことで解析スピードが上がった実感があります。
次回からは一部のメンバに小出しにせず、初めから(例えば解析作業の)フローに組み込んだ提案をするなど、PJ全体を巻き込んだ開発をしたいです。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2