注意
本稿は個人的な感想がベースになっていますので、客観性や正確さについては保証できません。また、最新情報を把握しているわけではありませんので、現在は状況が変化している可能性もあります。
C++ Builderの紹介
コンソールベースのC++プログラミングに慣れてくると、次は、もう少し高度なアプリケーションの作成に挑戦したくなるかもしれません。
その際、開発環境として何を選ぶかが問題となります。
Windows OSの場合、もっともメジャーなのは Microsoft の Visual Stuido に含まれる Visual C++(略してVC++)だろうと思いますが、詳しくは後で述べますが、これは C++ の初心者が挑戦するにはかなり敷居が高いです。そこで私がお勧めしたいのが、エンバカデロ・テクノロジーズから発売されている RAD Studio に含まれる C++ Builder という開発環境です。C++ Builder は、以前は Borland 社から発売されており、Borland C++ Builder(略してBCB)の名称で親しまれていました。私自身も1998年から愛用しています。
プログラム例
Windows OS上でアプリケーションを作る際、個人的には Visula C++ も使いますが、ほとんどの場合は C++ Builder で組んでいます。
私が C++ Builder で、お遊びで作ったプログラムを一つ紹介します。
テトリスのピース7つを1セットとして、選択した領域にテトリスのピースを複数セット詰める方法を検索するプログラムです。
プログラムはこちら。tetris.exe(3.34MB)
左クリックorドラッグでマス目を選択、右クリックで解除できます。
マス目の個数は28の倍数になるように選択して下さい。
また、パリティ差は、マス目の個数が28×奇数のときは2に、マス目の個数が28×偶数のときは0になるようにしてください。
プログラムは、たぶんWindows XP以降なら動くと思います。
基本的に C++ Builder でのプログラミングは、フォームにボタンやテキストボックス等の部品(コンポーネント)をペタペタ貼り付けて、後はボタンが押されたり、マウスが動いたりといったイベントが発生したときの動作を記述していくだけなので、書かねばならないコードの量はかなり少なくて済みます。Visual Basicの開発環境に近い感じですね。このような開発環境を RAD(Rapid Application Development)と言います。何といっても生産性の良さが RAD 環境の利点で、このプログラム例でも、Tread化したり、領域形状の保存・読み込み機能を付けたり、ヘルプ画面を作ったりと、色々と機能を付けましたが、作業自体は、研究の合間の気分転換の一環で一日1時間~2時間取り組んで、5日ほどしかかかっていません。しかも、検索アルゴリズムや画像描画に注力していた時間がほとんどで、操作系にはあまり時間をかけずに済んでいます。
Visual C++(Visual Studio)はどうか?
C++ Builder の、ボタンやテキストボックスなどのコンポーネントのライブラリは VCL(Visual Component Library)と呼ばれています。Visual C++ にも VCL に相当する MFC(Microsoft Foundation Class)というライブラリがありますが、MFC を用いたとしても、イベントの実装やメッセージの取得などはユーザー側でやらねばならず、書かねばならないコードの量は C++ Builder に比べると格段に多くなってしまいます。しかも、それらの処理には Windows アプリケーションについての一通りの知識が必要になってきます。そういう意味では、Visual C++は厳密には RAD ではありません。
MFC があまりにも Windows OS に偏重しているのもマルチプラットフォームへの展開を考えるといまいちな点です。とは言っても、個人的には、趣味でやる分には単一プラットフォームをターゲットにすれば十分で、プラットフォームに依存しないプログラムを作りたければ Java が良いのでは、と思います。Visual Studio の中でも、マルチプラットフォーム対応の C# や C++/CLI などには RAD 環境が用意されています。このあたりは Microsoft の将来戦略が関係しているでしょうけど、詳しいことはわかりません。
話が逸れますが、wxWidgets と wxGlade というオープンソースのGUIツールキットとGUIビルダーを用いれば、C++でマルチプラットフォーム対応のGUIアプリケーションを作成できるようなので、暇があれば試してみたいところです。そういえば修士課程の学生のときには、Motifツールキットで X Window のプログラムを色々と作っていたのを思い出しました。あのころは時間がたっぷりあって良かったです。
C++ Builder の弱点と Visual C++ の利点
C++ Builder よりも Visual C++ に軍配が上がる点についても書いておきます。まず、フリーで利用できるというのが Visual Studio の大きな利点です。Visual Studio Community Edition をインストールすれば、機能や利用条件などに一部制限はありますが、MFC を含む Visual C++ を使うことができます。一方で RAD Studio は有料です。ただ、有料とはいっても、アカデミック版だと1ライセンスで15000円くらいなので、数年以上楽しめることを考えると高くはないとは思いますが。
世の中で使われている割合は Visual Studio が圧倒的です。大学の情報教育用のコンピュータにも大抵はインストールされていますし、企業でも広く使われています。Vsual C++ でのアプリケーション開発に通じていれば、ソフトウェア開発方面での就職にも有利になるかもしれません。昔は商用ソフトの開発でも C++ Builder はよく使われていたらしいのですが、今ではなかなか流行らないみたいです。
上で述べた使用人口の違いにも関連しますが、参照できるドキュメントの量が、Visual Studio は段違いに多いです。MSDNという、開発者向けの文書ライブラリが非常に充実していますし、わからない事があってもネットで検索すれば、大抵は解決策が見つかります。一方で、C++ Builder はそのマイナーさ故か、ちょっと特殊なことを調べようと思ったら英語サイトまで検索しても見つからない事が多いです。もうちょっと C++ Builder のユーザーが増えてもらいたいところですね。
スタンドアロンで実行できるプログラムを作る際、C++ Builder の場合は大きなランタイムライブラリを実行ファイルに結合しなければならず、実行ファイルのサイズがかなり大きくなってしまいます。上のプログラム例でも、大したプログラムでもないのに3MBもの大きさになっています。Visual C++ でもDLLを結合するとそこそこファイルサイズは大きくなりますが、C++ Builder よりはマシのようです(プログラムにも依るでしょうけど)。
COMを通じて、起動している他のアプリケーションを操作するとか、グローバルフック等でWindowsのシステムに介入するなど、ちょっと特殊なことをやろうとすると、Visual C++ の方が下位層のインタフェースが隠蔽されていないので、やり易い印象があります。C++ Builder でもやれないことはないでしょうけど、過去には色々と苦労した覚えもあります(今では状況は違うのかもしれませんが)。
VLC にちょっとクセがあるのも人によっては気になるかもしれません(私はもう慣れましたが)。例えば、文字列のインデックスが 1 から始まるのもC言語としてどうなのかと思います。もともと C++ Builder は Delphi が元になっているので、昔の名残りなんでしょうけど。
とりあえずのまとめ
以上のような理由で、C++によるアプリケーション開発に首を突っ込んでみたいなら、まずは C++ Builder をお勧めしますが、 C++ Builder の限界を感じたり、趣味の範囲を超えて、商用ソフトの開発やIT系への就職などを念頭に置いているなら Visual C++ も試してみるといいかもしれません。もちろん、C++ Builder にしろ Visual C++ にしろ、使いこなすには、C++におけるオブジェクト指向についてある程度は理解している必要があります。とは言いつつ、C++ Builder の場合、あまり理解していなくても見よう見まねでコードを書いていけば、簡単なプログラムだと問題なく出来てしまうのですが。私が初めて C++ Builder を購入した時(修士の学生でした)も、クラスとは構造体に関数が付いたもの、くらいの認識しかありませんでしたが、プログラムは組めていました。ただ、ずっとその程度の理解だと困りますし、少し高度なプログラムを書こうとすると壁にぶち当たってしまいます。
就職の話を書きましたが、IT系の就職で有利になるというのが目的なら、C++だけでなく、Java、ExcelのVBA、JavaScript+Ajax、PHP、perl(は微妙か?個人的には好きだが)、それと、プログラミングではないですが、HTML+CSSやLinux系サーバーのシステム管理あたりも出来た方がいいでしょうね。プログラミング言語は、一つマスターすれば他の言語にも類推が効くので、複数の言語をマスターするのは、外国語ほどは難しくありません。