実にベタなツールではあるけれど、VB6 用のステップカウンタを作ったので github moonmile/vb6check: VB6移行の規模見積もりツール に公開しておきます。
使い方
使い方は簡単で、.vbp ファイルか、フォルダを指定して VB6プロジェクトのファイル(.bas, *.frm)を拾ってきてステップカウントします。
こんな風に、全コード/コードのみ/空行抜きで取得できるので、Excel に出力してから、フィルターを掛けたり sum を使ってカウントすれば ok です。
- 全コードは、単なるファイルの行数
- コードのみは、*.frm の先頭にあるデザイン部分を抜いた行数
- 空白抜きは、所謂コメントや空行を抜いたときの行数
これ自体で何ができるという訳ではないけれど、つまりは VB6 から C# へ移行するときのコード調査として使います。
使いどころ
ここからが本格的な使い方で、本来の目的は VB6 から C# へ移行するときに「どの程度の規模が発生するのか?」の目安にする。
現システムが VB6 を使っていると、いよいよ Windows 7 の期限切れが発生してきて、Windows 10 に OS を移行しないといけない。しかし、既存の VB6 の業務ツールがあって簡単には移行できない。予算が潤沢にあれば、えいっと業務改善も含めて Windows 10 へ移行&クラウド利用、などに変えてしまう方法もあるのだが、なんらかの理由があってそれができない。
消極的な理由としては「予算がない」のだろうけど、実は、ある程度予算があったとしても「積極的に移行しない」理由というのが存在する。
- 現状のシステムが、会社の業務に最適化されていてシステム自体を変更する必要がない
というパターンだ。IT システムの場合、現在の AI やらクラウドやらで、最新技術を使ったほうがよいような気がしていたのでが、実はそうでもないことが分かってきた。業務をするときの「慣れ」ではないか?という理由を自分はつけて来たが、もっと良い例を最近思いついた。
明治や大正時代の鋳物で作られたような工場の機械が、現在でも丁寧に使われていると同じ理由ではないだろうか?
IT 自体はどんどん進化するし、モノの工作機械もどんどん進化する。けれども、作られるもの自体は必ずしも変化するとは限らない(伝統工芸とか昔から変わらない製品とか)。だから、昔のよいものを引き続き作る場合には、昔と同じ方法を使う必要があるし、プラス進化したものも必要になる。だから、古い工場で鋳物の工作機械が動いていて、最新のWEBやスマホで受注ができたり、工程をAIで管理/観測できたりする。そういう新旧混在した場合もある。
なので、まるごと最新にする必要はないし、場合によっては古いものをそのまま使っても良い。RPA もそのひとつの解答だろう。
無料RPAで「ソリティア」に挑んでみた 業務自動化でゲームも自動化できるか (1/2) – ITmedia NEWS https://www.itmedia.co.jp/news/articles/1903/03/news033.html
そんな訳で、RPA とは別に、手作業で VB6 から C#/WPF/MVVM に移行するパターンをいくつか実践している。
VB6 から C#/WPF への移行パターン
VB6 で作成した業務システムの移行先として、WEB アプリがあるのだけど、WEB に移行できない&デスクトップアプリである必要があるパターンがある。
- 他のデスクトップアプリと連携している
- 印刷ものが多い
- 複数の画面を同時に開いて作業することが多い
- キーレスポンスが早いことが求められる
最近は、JavaScript/Node.js/React のパターンで、画面のレスポンスは早くなったのだが、問題は「VB6 時代のベタな UI をブラウザ上で実現するのが難しい」ってこともある。UI を変えない、Look & feel を変えない場合は、ベタなデスクトップアプリのほうが忠実に作れたりする。
これは以前書いたかもしれないが、業務 VB6 にはいくつかの要素があって、
- データベース接続(ODBC, RDO, ADO)がある。
- 帳票出力(クリスタルレポート、スプレッドシート)がある
- データグリッドを使ったリスト表示がある
- 3Dコントロールのボタンがついている
- エンターキーによる項目移動が実装されている
- 数値や文字制限などが独自実装されている
このあたりを、WPF/MVVM で実装する。
- データベースは EF/LINQ を使う
- 帳票出力は Excel 出力に切り替える、あるいはクリスタルレポート
- グリッド表示は DataGrid を使い、データバインドする
- 3Dコントロールは、通常のボタンに戻す
- エンターキー移動は、独自ライブラリを作った
- 数値、文字制限は、コンバーターで実装可能
というパターンに切り替える。このあたり、VB6 のときはデータベース接続やテキストボックス内の操作でコードが肥大していたが、C# の MVVM パターンを使うことにより、1/4 から 1/3 程度のコード量に減らすことができる。
このあたりの話は後日。