VB研公開ゼミ議事録

第2回 私はコレで、VB 6を卒業しました

デジタルアドバンテージ 遠藤 孝信
2006/12/09
Page1 Page2 Page3

利用しているコンポーネントの移行

【小川】 ところで、業務アプリケーション全体を自社内で作っていれば、新規で全部作り直せばいいと決断できますが、サードパーティ製のコンポーネントに大きく依存しているケースはどうなるのでしょうか。これは国内最大手コンポーネント・ベンダであるグレープシティの八巻さんにぜひともお聞きしたいですね。


グレープシティ株式会社
八巻 雄哉 氏

【八巻】 グレープシティとしては、アップグレード・ウィザードのように、VB 6用コンポーネントを.NETに移行するためのツールは用意していません。「移行は困難であり、一から作る方が移行するよりもはるかに簡単なケースが多い」と、わたしたちグレープシティとしても判断したからです。

 弊社では社内でコンポーネントを開発しています。当初C++で書いていたVB 6用のActiveXコンポーネントを、当初はそのまま.NETに移行しようと作業を開始したのですが、まったくうまくいかずに失敗に終わってしまいました。結局は一からC#で作り直しています。

 これはコンポーネント自体の移行の話ですが、こういった経験から、業務アプリケーションについても移行は推奨すべきでないだろうという判断に至りました。すでにVB 6用のActiveXコンポーネントをお使いいただいている方々には少し酷な話になってしまうかもしれませんが、.NETの開発では、新しい.NET用コンポーネントを使って、新たに開発し直した方が、最終的には良い結果につながると思っています。

オブジェクト指向プログラミング

【小川】 VB 6から.NETへという話になると、必ずといっていいほど登場するのがオブジェクト指向プログラミング(OOP)の話題です。何が.NETへの移行のハードルとなっているかを聞くと、やはりまだOOPが分からないという意見が非常に多いようです。

 山崎さんは、この点についてどのように考えていますか?

【山崎】 私は、OOPは大した問題ではないと思っています。私はVB.NETを始める前にUNIXでC++を経験し、そこできちんとオブジェクト指向の考え方を勉強しました。こうして一度身に付けると、その後どんなものが出てきても怖くないんですね。いろいろな新しい技術がどんどん登場してきて、言語が変わったりクラス・ライブラリが変わったりして、主流となるものは微妙に変わっているかもしれませんが、オブジェクト指向の考え方の根底はずっと変わっていません。それはこれからもしばらくは変わらないと思います。

 つまり、一度ちょっと腹をくくって勉強すれば、OOPの知識はそれ以降ずっと役立つということです。一度どこかで集中して勉強することが大事ですね。

【小川】 なるほど。ところで、そもそもOOPの知識は必要なのでしょうか?


マイクロソフト株式会社
鈴木 祐巳 氏

【鈴木】 OOPのプログラミング言語を使うことと、OOPをしっかり理解するということは別ではないかと私は思います。私自身振り返ると、OOPのプログラミング言語を使っているのに、きちんとオブジェクト指向を理解していなかった期間が3年くらいありました。当時はオブジェクト指向をきちんと理解していなくても作れていましたし、アプリケーションは正しく動作していました。

 本当にOOPの知識が必要な場面というのは、恐らくクラスあるいはクラス・ライブラリを作る側に回ったときだと思っています。例えば、Visual C++ではMFCのクラスを使ってウィンドウを開きます。これを使わずにすべてWindows APIで作ることはあまりありません。Visual C++を使って開発した業務アプリケーションのほぼ100%がMFCを使っていたと思いますが、Visual C++でMFCを使っている人すべてがOOPを理解しているかというと、私はノーだと思います。

 実際には、ウィンドウを開くにはこのクラスを使うといった程度しか覚えていなくて、そこに必要なコードを肉付けしてアプリケーションを作っているという人が多いのではないかと思います。これに対し、さまざまな場面で再利用できるクラスを設計するとなると、別の技術が要求されます。これができるのは、一部のプログラマだけではないかなと感じています。

【小川】 つまり、クラスを利用するだけならそれほど専門的なOOPの知識がなくてもいいということですね。

膨大な.NETのクラス・ライブラリ

【小川】 OOPと並び多い意見としては、クラス・ライブラリが膨大で学習が大変だということが挙げられます。

【鈴木】 これについては、クラス・ライブラリが巨大だと考えるか、VBでできる範囲が広がったと考えるかの違いだと思います。標準のVB 6でできることは限られており、その枠から外れようとした瞬間に、WindowsのAPIを直接使わなくてはいけないということは多々ありました。

 そのため、VB 6で、いかにしてWindows APIを呼ぶかに多くの開発者が注力していた時期がありました。とりわけコールバック関数などのポインタ操作が必要なAPIをVBから無理やり呼び出すテクニックなどを身に付けて、一所懸命Windows APIを使っていたと思います。

 .NETの標準のクラス・ライブラリを使えば、そのようなことをしなくても、ほとんどの機能にアクセスできます。これは、VBの持っている標準機能が増えたと考えることができます。できることが増えれば、覚えなければならないことも増えるというのは、ある程度仕方ありません。これまでにWindows APIで無理やりやってきたことだって、結局は覚えなければならなかったわけですから。

 ただし、Windows APIを駆使することに比べれば、.NETのクラス・ライブラリは体系立っており、素直なプログラミングができます。トリッキーなプログラミングは無用であり、結果としてバグが入る可能性も減ります。

 最初からクラス・ライブラリ全体を把握しようとする必要はありません。自分の必要なところから、クラス・ライブラリを眺めていただければよいと思います。

【小川】 .NETのクラス・ライブラリが、過去のものに比べて優れているのはよく分かるのですが、いずれにしろ、昔から慣れ親しんだ作法や知識が、.NETでは通用しなくなるということですね。

【鈴木】 ただ、場合によっては、昔のような作業が必要な部分も若干残っています。.NET Framework 2.0での良い例がすぐ思いつかないので、1.1ベースで話をしますと、実は音を鳴らすことができませんでした。そのため、例えばDirectX用のフレームワークを導入してマネージDirectXのクラスを呼んだり、これは本来VB 6との互換性を保つための機能なんですが、VB用のクラス・ライブラリにあるビープ音を鳴らすための機能を使ったりする必要がありました。

【会場の参加者】 確か、INIファイル(.iniファイル)のアクセスも.NETではできませんよね。たいていの業務アプリケーションでは、アプリケーションの設定を保存するのにINIファイルを使っており、これにアクセスするためにVB 6でWindows APIを使っていたと思います。

 .NETだとXMLベースのCONFIGファイルやレジストリを使うのが基本になっていますが、いまなお実際の現場では、INIファイルへのアクセスがどうしても必要となるケースがあり、その場合には.NETの世界でもWindows APIが必要になります。

【小川】 なるほど。既存のアプリケーションを移行しようとしたときなどでは、そういう問題が出てしまうということですね。

【鈴木】 ちなみに、.NET Framework 1.x時点でのものですが、Win32 APIと.NET Frameworkのクラス・ライブラリの対応表というのがMSDNの「Microsoft Win32 と Microsoft .NET Framework API との対応」に用意されています。

必要なクラスが見つけられない

【小川】 クラス・ライブラリがあまりに膨大なために、何をどうすればよいのか分からないという意見もあります。これについてはどうですか?

【会場の参加者】 体験者として意見を述べさせていただくと、VB 6を使っている人がOOPに対して非常に抵抗を感じるのは、クラス・ライブラリのどこにどういう機能があるのか分からない点です。

 例えば、ファイルを読むにはどのクラスを使えばよいのか、あるいは、その機能を持ったクラスがどの名前空間にあるのか。そもそも「名前空間」というところでつまずく人もいます。これはVB 6にはなかった概念ですので。

【小川】 いままでは、何のクラスかなどを考えなくても済んでいたのに、何かやるにはまず、それがどこのクラスにあるんだ? というところから出発しなければいけないということですね。

【会場の参加者】 そうです。だから、クラス・ライブラリについての体系的なノウハウを持って、初めてそれが克服できたということになるのではないでしょうか。

【小川】 ちなみに、あなたはどのようにされたんですか?

【会場の参加者】 MSDNのライブラリ・リファレンスを小まめに参照するようにしていましたが、やはり最初はすごく大変でした。1年くらいかかって、何とか慣れてきたし、内容も理解できるようになりましたが、このやり方は忍耐が必要でしたね(笑)。

【八巻】 クラス・ライブラリを全部覚えている人は、たぶんどこにもいないと思います。実は私もほとんど覚えていません。ほとんど毎回のように調べています。私の場合は一番始めにWebで調べます。最近はブログなどでも個人的に情報を出されている方が多いため「XXをしたい」「XXの機能を実現したい」といった目的から検索してもけっこうヒットするようです。


 INDEX
  VB研公開ゼミ議事録
  第2回 私はコレで、VB 6を卒業しました
    1.アップグレード・ウィザードはやはり使えない?! 移行せずに新規作成すべきか?
  2.オブジェクト指向プログラミング/膨大な.NETのクラス・ライブラリ
    3.コンビニ的に便利なMy機能/アプリケーション・モデルの違い
 
インデックス・ページヘ  「VB研公開ゼミ議事録」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH