マルチデバイス対応を進めるRAD Studio
Delphi、C++Builder(およびそのスイート製品RAD Studio)は、近年マルチデバイス開発に舵を切り、2011年のWindows/Macのネイティブクロス開発の実現を皮切りに、iOS、Androidとサポートプラットフォームを広げてきた。Delphi言語では、すでにこれら4プラットフォームへの対応は完了していたが、C++言語では、Windows、Mac、iOSまでの対応にとどまっていた(2014年3月現在)。それがこの春に登場する新バージョンで、いよいよAndroid対応も実現する。
C++BuilderによるAndroidアプリ開発は、モバイルアプリケーションウィザードから始める。アプリは、iOS / Androidのそれぞれのネイティブコードを作成できる単一のコードベースによる開発なので、開始時にAndroidかiOSかを選ぶ必要はない。いくつもあるテンプレートから、作成したいアプリに近い形式を選択すると、次のような設計画面が表示される。
C++Builderでは、モバイルデバイスのUI設計画面に、コンポーネントをドラッグ&ドロップして開発を進める。この開発スタイルは、従来Windows向けビジュアル開発ツールが提供してきたのと同じだ。モバイルデバイスの場合、デバイスの向き、解像度などが異なる場合があるため、設計時にこれらのデバイスを選択して、レイアウトを確認できる。
配置したコンポーネントのレイアウトは、XY座標の絶対値だけでなく、右寄せや画面いっぱいなどといったレイアウトオプションを選択できるため、画面サイズや向きに応じた最適な表示も可能だ。
なお、ここで紹介したモバイル開発機能は、Delphiでも同様に利用できる。
マルチデバイス対応を実現するしかけ
C++BuilderそしてDelphiでネイティブコードによりマルチデバイス対応を実現しているのが、IDE、ネイティブコンパイラ、そしてコンポーネントフレームワークだ。IDE(統合開発環境)は、マルチデバイス開発に必要な機能をすべて統合する。例えば、Android開発の場合、Android SDKやNDKのセットアップが必要だが、これらはすべてIDEに統合されており、特に個別の準備は不要だ。また、モバイル開発では実機を使ったテストも欠かせないが、これらのデバイスの接続、アプリの転送、そしてコードレベルでのデバッグまでがサポートされている。
IDEには、それぞれのプラットフォーム向けのネイティブコンパイラが搭載されており、IDEが動作するWindows上で、iOSやAndroid向けのARMネイティブのコードを生成できる。
ネイティブコードを生成できるといっても、UIの設計やデバイス機能の利用でプラットフォーム固有の開発が必要になってしまうのであれば、マルチデバイス開発といっても中途半端なものになってしまう。C++BuilderとDelphiでは、UIやデバイス機能、さらにはデータアクセスなどにマルチデバイス対応のコンポーネントを用いることで、単一のコードベースによるマルチデバイス開発を可能にしている。しかも、そのコンポーネントフレームワークは、CPU/GPUネイティブなので、デバイス機能を100%発揮できるのだ。
アプリケーション開発者は、コンポーネントを使うため、コンポーネントが用意するプロパティやイベント、メソッドを使って、開発できる。内部的には、各デバイスに最適化されたネイティブコードが使用されるが、アプリケーション開発者には隠蔽されている。もちろん、特定のデバイス固有のコードを記述したい場合には、それも可能だ。例えば、NDKのAPIをコールしたり、ブリッジ経由でインテントなどのAndroidアプリのコードを呼び出したりもできる。
次の例は、デバイスのGPS機能を用いてGoogleマップに現在地を表示するアプリだ。
このアプリが使用しているのは、LocationSensorコンポーネント。GPS機能は、Android、iOS、あるいはWindowsタブレットなど、最近のスマートデバイスやPCのほとんどに搭載されているが、これらを利用するコードは、プラットフォームごとに異なる。しかし、C++BuilderおよびDelphiでは、FireMonkeyによってプラットフォームの差異をコンポーネントが隠蔽する。つまり、アプリケーション開発者は、プラットフォームが何であれ、LocationSensorを使えばよいのだ。
例えば、GPS機能を、チェックボックスを使ってオン/オフするコードは次のようになる。
void __fastcall TForm2::swLocationSensorActiveSwitch(TObject *Sender) { // ロケーションセンサーのON/OFF LocationSensor1->Active = swLocationSensorActive->ISChecked; }
C++でAndroidアプリ開発が可能になるメリット
今回、C++BuilderがWindows、Mac、iOSに加え、Androidアプリ開発をサポートするようになり、Androidを含む複数プラットフォームをターゲットにする必要のある開発者にとって、有効な選択肢が1つ増えたことになる。しかし、C++でAndroidアプリ開発が可能になった意味はそれだけではない。
C++言語には、強力な標準ライブラリが多数用意されている。例えば、STLやDinkumwareといったライブラリは、C++Builderでも利用できるが、もちろんAndroidアプリ開発にも使える。従来、WindowsやMac、Linuxなどで標準的に使われてきたプログラミングテクニックが、そのままAndroid、iOSで活用できるのだ。
さらに、既存のC++やC言語のソースコード、ライブラリのコードなどがあれば、それをAndroidやiOSに持ってくることもできる。従来のWindows向けアプリケーションをC++で開発している開発者も多いので、これらのアプリケーションのモバイル版を開発する際にも、コードの再利用が期待できる。
ウェアラブルデバイスのサポートなど
これからのデバイスサポートにも期待
エンバカデロでは、今回のベータテスターミーティング開催に先立ち、RAD Studio、Delphi、C++Builderで、2014年以降に計画している製品機能やテクノロジーについてのロードマップを発表している。これによると、C++によるAndroidサポートのほかに、Google Glassをはじめとするウェアラブルデバイスのサポートも計画している。
ウェアラブルデバイスは、IT業界で今最もホットな話題の一つ。すでにいくつものデバイスが発表され、今後ますます増え、実用化へと進んでいくだろう。そのような流れの中で、重要性を増すのがアプリだ。しかし、形態も使い方も異なる上に、ますます多様性が増していく状況で、開発者はより一層の苦労を強いられることになる。
C++Builderなどの開発環境が、従来のモバイル開発(さらに言えばWindowsアプリケーション開発)からの延長で、新しいウェアラブルデバイスの開発をサポートする意義は大きい。ますますホットになるマーケットへの参入障壁が、著しく軽減されるからだ。
最新のC++Builder、そしてRAD Studioについては、2014年4月22日に東京・お茶の水のソラシティ・カンファレンスセンターで開催される「第28回 エンバカデロ・デベロッパーキャンプ」で発表されるとのこと。ぜひ注目したい。