例のQiita記事を見ながら、Visual Basicに関する知識を整理してみました

概要

 数日前、「「VB歴18年」の私がVBの素晴らしさを語る【C#もPHPもPythonもメインで使わない理由】」といった名前の記事がQiitaに投稿されました。内容としては、初めてQiitaに記事を投稿する作者が、「Visual Basic」(以下VB)の良さを解説する……といったものになります。

 ただ、その内容があまりにも強烈過ぎたため(婉曲表現)、ネット上で物議を醸しました。私も物申した人の一人なのですが、適当にツイートするだけでは冷静な分析とは言えません。そもそも私は普段VBを使わないので、VBの良さについて正しく認識できていない可能性もあります。

 そこで、当該記事を振り返りつつ、VBの利点や欠点についてまとめてみました。なお、2018年08月30日 17時12分 (JST)版の記事を読みながら書いたものになります。

おことわり

 プログラミング言語VBとは関係ない方面から、氏の記事に問題があるだろうことは、ネット上の意見を検索するだけでも察せられます。具体的には、

  • 「1.「VB歴18年」の私「野田工房」の経歴」の説明が蛇足
  • 「Visual Basic for Application(VBA)」と「Visual Basic.NET(VB.NET)」と「VBScript(VBS)」の記述が混同しており説得力に欠ける
  • 「検索した初心者がそのままコピーして使うことをまったく考えておらず」などの記述から、サイトからソースコードをコピーすることに対して肯定的だと思われるが、それはプログラミングとして如何なものか
などの指摘です。ただ、以下の記述ではそういった方面のツッコミをすることはしていません。

氏が提唱する「VBの素晴らしさ」について


1.「Windows OS標準機能」で使える

 VBAやVBSは、特に「開発環境を入れる」ことを意識せずともWindowsマシンで利用できることが多いです。これは、Microsoft OfficeにVBAが付属していることや、Windowsに長年「Windows Script Host(WSH、VBScriptの実行環境)」が付属していることに由来します。これらがどれだけ長く利用できるかについてですが、以下に示すように当分は大丈夫でしょう……。

VBA

 Office 365にもOffice 2016にも含まれていますので、当分無くす気はないだろうと思われます(※Office Onlineでは使えない)。使った際に「なんでVB6相当の言語仕様しか無いんだよ」とは全人類が一度は思ったでしょうが、互換性の問題がありますので、言語仕様を変える気はないと思われます。

 ただし、C#などの.NET言語でOfficeアドインを書くことは可能です。Office Onlineへの対応も可能ですので、Officeツールで皆に使って欲しい機能を開発したい際はVBAより導入障壁は低いかもしれません。

VBS

 マイクロソフトコミュニティのエントリによると、「Windows 10にも含まれているので、もうしばらくは普通に使えるのではないか(要約)」といった返答になっていました。ただし、上記エントリにもある通り、Unicode対応できてない部分がある ので、その辺りが必要な人は使わない方がいいでしょう。

 なお、知名度は低いですがC#も「Window OS標準機能」で使えます。これは、.NET Frameworkに「csc.exe」というC#コンパイラが付属しているからです。ただ、DLLを叩く際はいちいち手動で参照設定する必要がありますので、これで開発することは少ないと思いますが……。方法については、次の資料を参照してください。
 ……ところで「Window OS標準機能」には、Webブラウザ(IE・Edge)上で実行できる「JavaScript」は入っていたりするのでしょうか。また、特にVBA・VBSはWindows以外で利用しづらいので、非Windows環境は守備したい範囲ではないということなのでしょうか?

2.「EXCEL」の操作をVBAで自動化できる

 Microsoft自らが「Office アプリケーションを拡張するために使用できます」と書いている通り、Microsoft Officeを操作するのにVBAを使うのは自然なことです。規模が大きくなるとVBAだけではキツいこともありますが……。

 ただ、氏が想定している「Excelの操作」はどれぐらい多彩な機能を使用する予定なのでしょうか。OfficeデータはVBA以外の言語でも、ライブラリを介してアクセスすることができます。なので、単にデータを集計したい時などは、RubyやPythonなどで書く方が楽なことも多い気がします。

※Officeデータのライブラリをスクラッチするのは非常に困難です。理由としては、「Microsoft Officeのファイルフォーマットはなぜこんなに複雑なのか?」を参照ください。OfficeデータはVBAから操作するのがベストプラクティスなことも多々あります

3. 無料で、コンソールアプリや通常アプリを作れる

 恐らく「通常アプリ」とは「デスクトップアプリ」を指すものと思われます。記事中に「Expressエディション」といった記載がありますが、今なら「Community Edition」を勧めるのが適切でしょうね。氏がVS2012までしか知らない可能性

 ただ、昔ならいざしらず、今日日「無料でダウンロードして使える開発環境」はゴマンとあります。「Visual Studio」はもちろん、「Eclipse」や「IntelliJ IDEA」や「NetBeans」や「Qt Creator」や「Unity」など、Windows開発用だけでも片手に収まらないぐらいの選択肢が存在します。ゆえに、「果たしてどれだけあるでしょうか?」といった問いかけは、裏を返せば氏の見識の程度を露呈してしまっているのではないかといった気もします……。

※「Visual Basicは、C++のRADツールが有償で出ていたぐらいの時代に出てきたもので、簡単にデスクトップアプリを作れることが革命的だった」といった記述をネット上で見たことああるのですが、具体的なURLを思い出せませんでした……。

4.ネット上に情報が豊富で、困らない

 せやな。

5.GUIのデザインが直感的で楽

 GUI上でぺぺぺっとUIパーツを並べて開発できるツールのことは、「Rapid Application Development(RAD)」や「What You See Is What You Get(WYSIWYG)」と呼ばれます。確かに直感的ですし、コードをガリガリ書くよりはずっと楽そうです。昔と違ってコンピューターも進歩しましたので、RAD開発でパフォーマンス低下を心配することはほぼありえないでしょう。

 しかし、この2018年になっても、TeXやMarkdownなど、「手でガリガリ書くことを要求されるツール」は普通に使われています。Web開発ではJSXやTwigなどを ガリガリ書きます し、XAMLやFXMLなどは「RAD環境があるけど コードを直接編集もよくある」といった文化があるほどです。

 コードガリガリが未だに残っているのは、「見た目と中身を分離するとコードガリガリの方が楽」ということが大きいでしょう。Web開発だと特に分かりやすいですが、「論理構造」をHTML、「見栄え」をCSSに担当させることでデザインを統一させやすく、修正が楽になるといった事情があります。

 また、データを編集する際、「マウス動かしてテキストボックスに入力するより、元のコードをいじったほうが速い」ことが多々あります。この辺りは慣れと要求スキルのトレードオフですが、例えば「複数箇所を正規表現でまとめて書き換える」ことはRADの感覚だとかなり面倒になってしまいます。

 さらに、JSXやTwigなどの場合、「JavaScriptが作用して表示用のHTMLがレンダリングされる」といった特性があります。本来のHTMLからすると 文法エラーの嵐 になってしまうような記述も、そういった「言語」なのだと仮定すればセフセフになるというわけです。この場合も、WYSIWYGで表示・編集することは困難になります。

 ……話がだいぶ逸れてしまいましたが、結局「一見直感的でない手段の方が楽なこともある」というわけですね。

6.「BASIC」(基本)言語なので、簡単で生産的

 真面目な話、氏はどれぐらいPHPやPythonやJavaScriptなどにガッツリ触れてきたのでしょう……? どれも「実践的かつ、幅広い用途で使える言語」だと思いますが。

7.古い言語ですが、新技術も取り入れられている

 VB.NETは確かにそうかも知れませんが、VBSとVBAは違いますよね?

8.1言語でクライアントアプリを大体網羅できる

 ツッコミは「3. 無料で、コンソールアプリや通常アプリを作れる」と内容が被りますので省略。OutlookのVBAで処理を自動化できることについては「2.「EXCEL」の操作をVBAで自動化できる」を参照してください。

氏が嘆く「VBAで困るあるあるケース」について

 意識したことがない人が大多数だと思いますが、VBAでもクラスは作れます。アクセス制御や初期化/破棄時に呼ばれるメソッド定義(※ガベージコレクションされる)、C#のようなプロパティ機能、継承機能などがありますので、VBAなのにオブジェクト指向プログラミングできてしまいます。

 ……ただ、その境地まで達していない(達するほどVBAしてない)人が多いため、ソースコードが読みづらい&使いづらい状態になってしまっていることが多いと氏は嘆いています。当該記事では、田中亨さんのWebサイト「Office TANAKA」のあるサンプルコードを例に、良くないコードだとして痛烈に批判しています。

 ただし、記事のコメントでnazono_murasamejohさんが、この辺りの氏の記述について多くの指摘を残しています。詳しくはリンク先を参照してください。

一般的に言われる「VB系の欠点」について

 .NET技術の恩恵により、VB.NETはC#と だいたい 同じことができます。それこそ、ソースコードをコンバートするツールもあるほどです。ですが、世間的にVisual Basicは、多くの批判にさらされてきました。有名なエントリとしては、
などがありますね。ただ、「慣れの問題では?」といった指摘もネット上でちらほら見かけますが。VBAとVBSについては、前述のように「文法が古すぎる」「Unicode未対応」などの理由から世間ではより否定的なようです。

※以下自分語り。私はスクリプト言語HSPを常用していましたが、他の言語を学びだして世界観が大きく変化しました。氏も一応複数言語の経験があり、近頃ではPythonに強い興味を抱いているようですので、この機会にしっかり学ばれることを強く推奨します。

この記事へのコメント