━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■第18回 VisualBasicからのアップグレード(実施編)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
前回からの続きです。
今回から購読される方はバックナンバーをご覧ください。
http://archive.mag2.com/0000263428/index.html
●アップグレードウィザードを使ってみる
早速、アップグレードを使ってみましょう。
念のため、VisualBasic6.0のプロジェクトをバックアップしておくことを忘
れないでください。
VisualBasic2008を起動します。
起動したら、メニューから[プロジェクトを開く]を選択します。
あとは、VisualBasic6.0のプロジェクトを選択し、どんどん[次へ]を押して
いけばいいです。
画像付きの説明がほしい方はこちら↓
http://www.shiga-it-office.com/technical/vbconvert.html
アップグレードの結果は_UpgradeReport.htmというファイルに書き出されま
す。よほど小さいプロジェクトでない限り、相当数のエラーや警告が出てく
るはずです。
アップグレードウィザードは便利ではありますが、我々人間とは違って、行
間を読んではくれないので、推奨された組み方をしていないと、エラーだら
けということになるのです。
●エラーを減らす方法
最終的にはエラーも警告も無い状態にしないといけない訳ですが、その方法
は大きく2つあります。
1つ目は、VisualBasic6.0のコードを綺麗に修正した後に、改めてアップグ
レードする方法。
2つ目は、アップグレード後のコードを地道に直していく方法です。
基本的には、この2つの方法を組み合わせることになるでしょう。
つまり、VisualBasic6.0の段階でマイクロソフト推奨のコーディング規約に
沿って修正し、アップグレードする。
それでもエラーが残っているものは、VisualBasic2008で修正します。
どうせ直すなら、VisualBasic2008で修正しても同じでは?と感じる方もい
るかもしれませんが、非推奨のコードは本当に訳分からなく変換されること
が多いので、結局VisualBasic6.0のコードを見直す必要になります。
それならば、VisualBasic6.0の段階で綺麗に修正しておいた方が、結果的に
コストも削減できるということで、前回説明したツールの出番です。
●コードのクリーンアップ
「Code Advisor for Visual Basic 6.0」をインストールします。
このツールは、VisualBasic6.0のアドインです。
このツールを使うことで、アップグレードウィザードが出力したような問題
点が分かります。
大きな違いがあるとすれば、アップグレード前に知ることができるので、作
業の効率が良いですし、アップグレードするつもりが無い場合でも、綺麗な
コードに修正することで保守性を高めることができるのです。
逆に、アップグレード後のエラーメッセージでは、既に変換されてしまって
いるため、元々がどういう意味だったのかが分からなくなることも多く、結
果的に何度もアップグレードを試すということになるかもしれません。
●アップグレード内容の評価と工数見積り
「Visual Basic 6.0 to Visual Basic .NET Upgrade Assessment Tool」を
使います。
使い方は、「Upgrading Visual Basic 6.0 Applications to Visual Basic
.NET and Visual Basic 2005 - 日本語」の「第3章 評価および分析」に詳
しく書かれていますので、よく読んでおきましょう。
アップグレードのコストを見積もっておくことは重要です。
無計画に作業しても、なかなか先に進みませんし、場合によってはアップグ
レードウィザードを使わずに、新たに作り直した方が良いこともあります。
●アップグレード後の修正
アップグレードが無事に終了しても、まだまだ修正すべきコードがあるかと
思います。
例えば、VisualBasic6.0までは、ちょっと難しいことをしようとすると、
Win32APIに頼らざるを得ませんでしたが、.NETではWin32APIを使わなくても
同等の機能を持つ関数が用意されています。
参考:Microsoft Win32 と Microsoft .NET Framework API との対応
https://www.microsoft.com/japan/msdn/net/general/win32map.aspx
他には、再利用性を考えてクラス構造を再設計する必要もあるかもしれませ
ん。
VisualBasic6.0以前にもクラスは存在しましたが、プロパティの実装とイン
タフェースの継承くらいしかできませんでした。
(インタフェースの継承ができることを知っている人は少ないですが)
.NETではオブジェクト指向に沿った作り方をしているかどうかで生産性が大
きく変わってきます。
アップグレードウィザードを使った、資産の流用はこんな感じです。
正直なところ、VisualBasic6.0以前に組まれたコードで品質の高いものは、
なかなかお目にかかれません。
誰でも簡単に組めるのが売りでしたので、仕方のないことかもしれません。
特に、グローバル変数を使いまくっている場合、アップグレードウィザード
で変換できたとしても、その後のメンテナンスが大変になりますので、新た
に作り直すことが多いようです。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━