Visual Basicさん、よく分かりません
ひでみさんのコラム「Visual Basicさん、ごめんなさい」を読ませていただきまして、なんか呼ばれたような気がした(←多分、気のせい)ので、ピロピロっと書いてみました。
ちなみに、当方はプログラマというわけではありません。ちょろっとコードを書いたり読んだりする程度の人です。Visual Basic .NETも5.0とか 6.0もほとんどお付き合いがない(ぶっちゃけ、あんまりお付き合いしいようなしたくないような微妙)です。
■ ■ ■ ■
■まだ熱かった頃の勘違い
Visual Basicに関しては、個人的に何とも言えない思い出がある。IT系の仕事をやりだした頃、とりあえずITに関連することを片っ端から勉強していた。そんなハングリーな時期があった。その時、私はVisual Basicに出会った……というよりすれ違った気がします。
とりあえず、プログラミングについては、一応CとC++とPHPをかじった。今はほとんど忘れている。駆け出しの新人のころで、社内SEなどやっていたが、なかなかCとかC++をがっつりいじる機会がなかった。そこで弄っていたのがVBAとVBSだ。
この、VBAやVBSがVisual Basicと同等のものと思っていたのが私の大きな勘違いだった……。
■できると思っていたができなかった
そんな勘違いから、VBAやVBSが書けてればVisual Basicも難なく書けるだろう。そう思っていた。が、現実はそんなに甘くはなかった。ちょうど、Visual StudioのExpressが無料で使えるようになった頃だったろうか。たかをくくってダウンロードしてみたものの、全く使いこなせなかったのを覚えている。
厳密に言えば、プログラミングとスクリプトを書く感覚の違いを知らなかったのかもしれない。VBSでスクリプトを書くなら、テキストエディタでピロピロ書いていればそれなりに動くものができる。しかし、Visual Basicをやろうと思ったが、あのVisual Studioの使い方がさっぱり分からなかった。そしてあえなく撃沈した。
スクリプトを書くことと、プログラミングを書くことの難易度の違いを思い知った。そんな暑い夏の日の思い出がある。
■プログラマになれなかった自分
別にプログラマになりたかったわけではない。結果として、サーバ系のエンジニアとして落ち着いたので、自分の歩んだ方針に後悔はない。ただし、マイクロソフトに変な逆恨みのような感情を抱くようになった。
そもそも、Officeに搭載されているVBAが中途半端だ。かろうじてクラスの作成はできるが、継承やポリモーフィズムとか、高度なプログラミングの手法が使えない(もしかしたら私が知らないだけかもしれないが)。大規模なものを組もうとすると、かなりしんどくなってくる。
それとも、VBAで大規模開発しようという発想がおかしいのだろうか? だったらVisual Basicのフル機能使えるようにしやがれ! とどなり散らしたくなったが、Visual Studio Professionlか以上を使えばOfficeの開発ができるとか。ここらへんが知らない人にとってはややこしい。
■Visual Basicと聞いて思うこと
Microsoftって、ごちゃごちゃしてるなぁ。Visual Basicと聞いて思い浮かぶのはそれだ。分かる人にとっては簡単なことかもしれない。VBとつくものでもVBSとVBAと2つある。また、VBSと似たようなものにjscriptがあったりする。それでいて、スクリプトとして使う人もいればWebで使う事もあった。それからしばらくして.NETが出て云々と。
ここら辺が整理できずに駆け出しの頃、いったい何を覚えればいいんだと戸惑ったのを覚えている。たぶん、私と同じように戸惑った人もいるんじゃないかと思う。ただ、VBAとVisual Basicでは似通った部分はある。VBAやVBSが書ければ、Visual Basicを使える資質くらいは備わるんじゃないかと思う。
たまにAccessで複雑に組まれたVBAを見ると思う。そこまでやるなら、Visual Basic使ってアプリを開発した方がいいんじゃないかと。Accessで大規模なDB作るとVBAの機能な限界を感じる。VBSでスクリプトを作りこむなにしても、いっそプVisual Basicでツール作った方が早くないか? と思ったりすることもある。
ある程度の複雑さをが増したら、VBAやVBSからVisual Basicに切り替える。そういう流れが成り立つなら、Visual Basicの潜在的な需要は大きいのかもしれない。そんなことで、Visual Basicを覚えようかどうしようか、微妙な気分な今日この頃だったりします。
コメント
ジェットマグロ
VBAで継承は使えないが、ポリモーフィズムはできますよ。
標準モジュール Module1 に、以下のコードを記述
Sub Test()
Dim Lang As Object
Set Lang = New english
MsgBox (Lang.Arigato())
Set Lang = New chinese
MsgBox (Lang.Arigato())
End Sub
クラスモジュール english に、以下のコードを記述
Public Function Arigato() As String
Arigato = "Thank you!"
End Function
クラスモジュール chinese に、以下のコードを記述
Public Function Arigato() As String
Arigato = "謝謝!"
End Function
この状態で、Test() を実行。
バカみたいな例ですが。
はろはろ
あくまで主観ですが、おしい。
VBAで大規模開発しようという発想がおかしいんじゃなく、VB(6以前)で大規模開発するのがおかしいんです。
元々アレって、パパッと書いて、それなりに動くことを目指してますから。
多人数でガッツリ作ろうとすると、すぐに破綻しそうになるので、調整コストがバカになりません。
VB.NET は、C#とほぼ同等の機能を備えてるので、大規模開発でも使えなくないです。
ただ、旧VBから移ってきた人は、オブジェクト指向とかあまり設計には拘らず「動けばええやん」的な考えの人だったり、
逆に勉強の仕方を間違ったのか、凄い癖のある設計思想を持った人が多いように個人的には思います。
私はVBAでいろいろ複雑なものも作りました。
どのPCにもExcelは入っているので、新たなものをインストールしなくてもすぐに実行できるのがVBAの強みだと思っています。
どの言語でも強みと弱みがあって、その環境に応じて何を使うかを柔軟に選択すればいいんじゃないでしょうか。
存在を否定されるような言語は無く、どれも長所があると私は思ってます。
Anubis
>>ジェットマグロ さん
このやり方は知りませんでした。
そもそも、VBAでオブジェクト指向をやろうと試行したが無理がありました。
>>はろはろさん
同じように、VBAやってる人と他の言語で開発を行っている人との差も大きいように思います。