無料でランタイム不要のBasicコンパイラ

 ActiveBasicの話。


 私が現在主に使用しているプログラミング言語は、マイクロソフトVisual Basic系のものばかりである(以下、Visual BasicVBと略す)。Excelのマクロ然り、AccessVBA然り、VB6.0はもちろんの事、VBScriptASPで使用する言語としてサーバでも、あるいはバッチファイル代わりにクライアントでも使う事がある。
 とは言え、これらのどれも欠点がある。単体で実行できるexeファイルが作成できないことである。ExcelマクロにはExcelが必要(持ってる人も多いだろうけど)だし、Accessは製品版か、何十MBもあるランタイム版が必要だし、VB6.0もランタイムライブラリが必要だ。VBScriptをクライアントで動かすにしても、Windows 95や98の一部では別途プログラムのインストールが必要な上、ウイルスとして悪用されることもあるためか、ウイルス対策ソフトの制限にひっかかってしまい、自分のマシンでは大丈夫でも、客先マシンではうまく実行できない事もある。


 Windows上で単体で実行できるexeファイルを作るとしたら、C言語とかC++を使う事が多いだろう。私もMS-DOS用プログラムを作成する時なら、それらを大いに活用していたが、しかしWindowsプログラムの開発となると、まるで勝手が違う。ちょっとウィンドウに文字や図形を描いたり、キーボード入力を取得するだけでも、DOSの時のような比較的わかりやすい関数の代わりに、ハンドルやらメッセージやらデバイスコンテキストやらを扱う構造体やらポインタやら難解なコードの山と格闘せざるを得ない。
 しかも、そのCコンパイラも何万もするわけで、初心者には敷居の高い世界である。私もWindows用のC++コンパイラは持っていたものの、最初に少し使っただけで、今は全く使っていない。ちょっとした事をさせるだけでもたくさんコードを書かなくてはいけないCやC++よりも、マウスでチョコチョコッと画面を作って、メニューやボタンが呼び出された時の処理をチョコチョコッと書けばハイ終わりというVBの方が断然お手軽で、時間短縮にもメンテナンス性向上にもなるからである。
 私の場合は、SQL ServerとかOracle等のデータベースと連結してデータ処理するプログラムを作る事が多いので、データベースとの親和性が高く、SQL文の生成に重宝する文字列型変数の使えるVB系開発環境を使う事がどうしても多い。こういうプログラムをわざわざC言語で作ってたら、速度は向上しても開発効率と安定性が大幅にダウンする。


 VBはいわゆる「ぬるぽ*1知らずなのも大きなメリットだ。Windows API等を使う時を除けばポインタを使う必要がまずほとんど無いからである。C言語での開発では、Basic系言語やPascal系言語と違い、ポインタがらみのバグが原因でシステムが不安定になって再起動を余儀なくされることも少なくないものだ。


 しかし、時にはどうしても単体で実行可能なexeファイルを作りたい時がある。たとえばCD-ROMで自動起動させるプログラム、特にインストーラである。プログラムの実行環境が整っていないところにその環境を作り上げるためのソフトであり、しかもそのインストール前の環境も場所によってまちまちであるから、ランタイムライブラリが入っているか否かとか、そのライブラリのバージョン等に左右されずに、確実に実行できることが要求される。そうなると、ランタイムライブラリ無しで単体で動くexeファイルを作らざるを得ない。
 それにはいくつかの選択肢があり、難解なWindows APIと闘いながらC言語を使う方法、難解なMFCと闘いながらVisual C++を使う方法、他にもPascal系言語であるDelphiを使う方法等もあったが、最近、選択肢がもう一つ増えた。それが冒頭に挙げたActiveBasicである。


 このソフトの最大の長所は、何と言っても無料であることだ。突然必要になっても、パソコンショップに行くことなく、無料でダウンロードしてセットアップすればすぐ使える。自分で作った実行形式プログラムの配布も、特に制限なく自由にできるようだ。
 そして、ランタイムライブラリ不要の実行形式ファイルを作れるだけにとどまらず、DLLも作れるし、64ビットCPU用の実行ファイルを作成することもできる。
 無償公開されているコンパイラと言っても、単なるコマンドラインツールであるものも多いが、このActiveBasicは、コードエディタ・フォームデザインツール・デバッガ・プロジェクト管理ツールも含んだ統合開発環境になっているのがとても便利である。


 また、VBに比べるなら、Windows APIとの親和性が比較的高いのも特徴である。よく使うAPI関数や定数や構造体があらかじめ登録されているし、ポインタ変数という概念があるのは、Windows APIを駆使する上では強みである。HWNDとかWPARAMとかLPARAMとか、Windows API独特の型名も、多くがそのままの名前で使える。この型は符号付き32ビット型だからLongで宣言しておこうとか、いちいち書き直す必要がないのが有難い。


 一言で言うなら、このBasicコンパイラVBとCコンパイラの中間といったところである。VBに似た構造化プログラミング構文が使えるけれども、GUIプログラムをちょっと作るとなると、Windows APIの知識が大いに求められる。ちょっと凝ったフォームを作ろうと思うと、Visual Basicでは標準機能だけでできた事が、ActiveBasicではコードを記述しなければいけなかったり、フォーム上のコントロールの値を取得するのもいちいちAPI関数を呼び出す必要があったりと、VBに慣れた人には不便な部分も多い。この点においては、VBほど簡単に使えるというわけにはいかない。
 その代わり、Windows APIを駆使して複雑な処理をさせるのには便利である。C言語的な感覚で使えるBasicというのが何とも(良い意味で)奇妙であり、しかしうまく使えば便利なものである。本格的なGUIアプリケーションを作るには、ライブラリが貧弱である感が否めないが、それは自分で少しずつ作ればいいし、作ることによってWindows APIの勉強にもなるだろう。


 なお、そこまで使いこなせなくとも、とりあえず簡単なアプリケーションを作れれば良いのであれば、N88BASIC互換モードという敷居の低いモードもある。昔8ビットマイコンのBasicプログラミングに親しんできた人は、古いプログラムリストを引っ張り出してきて打ち込んでみるのも良いだろう。

参考リンク

AB開発日記 作者のブログ。

*1:null pointerエラーの俗称。