ざさいたま
アバウト ギャラリー コンピュータ その他 リンク集

マルチプラットフォームデザイン

はじめに

 コンピュータを囓ったことがあるのなら、それを構成する要素は殆ど同じであることに気づく。メーカーの差こそあれハードウェアですら、CPU、一次記憶、二次記憶等、必要な構成要素は殆ど同じである。ソフトウェアについてみても、これも殆ど同じような機構を備えている。
 こんな反論も出よう。SPARCとx86ではバイトオーダ、レジスタの役割が大きくことなり、LinuxとWindowsでは操作方法が大きく異なる。
 上述のような主張は真実であるものの、それぞれのコンピュータが提供する機能は、抽象可能なものであり、置き換え可能である。ハードウェアにしろ、ソフトウェアにしろ、その差異は根本的なものではなく、実装上の違いによるものにほかならない。
 このように一般化できるコンピュータであるが、上記のような違いによってソフトウェアデザイナは大いに悩む。実装上の違いにより一つのプログラムを、複数の環境(プラットフォーム)ごとに書き換える必要があるのだ。このことは効率化の観点からしても無意味であり、仕事が増えるだけで、生産的な創造たりえない。

プログラムの一般化

 共通の概念を拾い集め、問題を抽象化する。抽象化された問題を、それぞれのプラットフォームごとに具体化する。このようにプログラムされたものを、共通ライブラリ(モジュール)と呼ぼう。この共通ライブラリは共通の方法で、操作可能にする。この操作方法を共通API(アプリケーションプログラミングインターフェース)と呼ぼう。
 ある特定のプラットフォームに対して、共通ライブラリを用意し、共通APIで操作する。このようなアプローチを複数のプラットフォームに対して行う。それにより、プログラム自体を一般化できる。
 従って、共通ライブラリと共通APIを通してプログラムを行えば、一つのプログラムで複数に環境に対応するプログラムを書くことができる。

共通ライブラリ・API

 上記のようなプログラムの一般化を行うのには、長い時間と高いコストがつく。現実的な問題として、個人が取り組める規模ではない。たとえ取り組んだとしても、利用者が開発者一人ならばとても生産的とは呼べない。新しい言語体系を作り自分だけで使うのは、正気の沙汰ではない。
 それでも、現在プログラム作成に関わるプログラマ、就中デザイナはこのような問題に対して共通の認識を持っている。つまり、プログラムの一般化を行い、ワンソースマルチユース的な環境を実現できないかと。いわばマルチプラットフォームデザインである。
 マルチプラットフォームデザインの礎となる共通ライブラリ・APIについては現状では完璧な解答はない。近年これのに対する解答として、Javaがあることは既にご存じであろう。
 今回はJavaではなく近年注目を集めているQt、REALbasic、Python、Flashの4つを紹介しマルチプラットフォームデザインを考えてみたい。紹介する4つの技術は、実際に筆者も利用した。それらを踏まえて紹介しよう。

Qt

 Qt(キュート)はC/C++による共通ライブラリ・APIである。ハードウェアを直接アクセスしないアプリケーションにおいては、Windows、Mac、Linux一つのソースコードでGUI1)付きアプリケーションを作成することができる。通常GUIアプリケーションの作成は手間がかかる。しかし、Qtを利用するとGUIに関する部分は僅かなコードで仕上げることができる。付属するアプリケーションQt Creatorのコード補完機能等も秀逸である。
 C++で構築されているため、他の言語による実装に比べて柔軟なプログラミングが出来る。ライブラリに含まれない機能であっても、それを構築することが可能である。主にパッケージアプリケーションを開発する企業には、もってこいのライブラリであろう。
 QtはLGPL2)下における利用は無料であるが、完全な商用アプリケーションの開発には、比較的高額3)なライセンス料がかかる。現在、開発はNokiaが行っている。Adobe、AutodeskやGoogle等の大ソフトウェア企業でも利用していることから、高いライセンス料を払ってでも、有り余る価値があるのであろう。

REALbasic

 REALbasic(リアルベーシック)はBASIC言語で操作可能な共通ライブラリとAPIを実装している。昔のBASICそのままではなく、近年のオブジェクト指向にあわせた言語仕様となっている。BASIC言語のため、C/C++等と比較すると非常に敷居は低い。言語仕様はMicrosoftのVisualBasicと非常によく似ているがVisualBasicとは異なり、Windows、Mac、Linux向けのアプリケーションを一つのソースコードで作成できる。
 言語自体が簡単なため、プログラムに習熟していないユーザでも、言語の学習はそれ程苦にならないことだろう。断言しよう。簡単なアプリケーションであれば、Qtを利用して開発するよりも早く、アプリケーションを作成することが可能である。
 注意すべきことはBASIC言語のため、柔軟な処理を行うことが出来ない。REALbasicが対応しているライブラリ以外の問題を扱うことはできない。また、作成するバイナリ(マシン語コード)はREALbasicのライブラリを丸ごと含むことになるため、比較的大きくなってしまう。マルチプラットフォーム版Delphiともいえるだろう。ライセンス料は安価で、一番高くとも10万円程度である。

Python

 Python(パイソン)のアプローチは共通ライブラリ・APIによる一般化ではなく、それらより上位の言語による一般化である。Pythonという言語を通して共通ライブラリ・APIが動作する。
 言語の特徴はインデント(プログラムソースコード内の字下げ)にある。インデント自体が意味をもつため、プログラマによる記述方法の差異は少なくなる。このことは、複数人でチームを設けた場合、コーディングの共通化がはかりやすくなることに直結するだろう。
 Pythonはインタープリタで動作するため、実行速度は期待できないと思われがちである。しかし、コンパイル行い、予めプラットフォームに適したバイナリコードを作成することも出来る。実行速度を心配する必要は皆無である。
 C/C++などと比較すると、万人が習得しやすいといえるものであろう。メモリを直接扱えない、ハードウェアに直接アクセスできない等の代償は確かにある。しかし、反対にメリットもあるのである。間違ったプログラムを書いたとしても、意図しないメモリ破壊等は起こりにくい。実行するプラットフォームの差異は、考えなくていい。OSや実行するCPUの違いは、Python自体が吸収する。
 文字コードに対する対応も特徴的である。エンコーディング方法と内部コードの区別が明確に行われており、文字列を中心に利用するプログラムにも強い。
 また、Pythonから先ほど紹介したQtを呼び出すこともできる。他ライブラリのバンドリングはQtだけでなく複数4)ある。
 以上のことからPythonはますます発展するプラットフォームであることは間違いなさそうだ。しかもPythonは無料で利用できる。

Flash

 Flash(フラッシュ)は上記とは全く異なったアプローチで、マルチプラットフォームプログラミングを可能とする。Webブラウザのプラグインという形で実装されており、Webプラウザを仮想のコンピュータに見立てプログラムが動作する。もともとFlashはWebブラウザ上で動作する動画プラグイン(主にインターネット上の動く広告に利用されている)であった。それが近年、内部のスクリプト言語の近代化5)により、プログラムの実行環境たり得るものになった。
 FlashもWindows、Mac、Linuxで動作するという点では上記の3つと変わらない。しかし、Webブラウザのプラグインを介して動作するため、基本的にローカルにあるデータを処理するのではなく、サーバ上にあるデータを参照してサーバ上にあるデータを処理するような使い方となる。インターネット上にデータがある、クラウド的な利用法が想定されている。

現時的での選択

 一つの技術に依存することは、非常に危険であり、そして融通が利かない。マルチプラットフォームへの対応は重要である。コンピュータ自体を一般化し、それぞれのプラットフォームごとに、具体的なコードを作成することは、一つの技術に依存する弊を免れることができる。その意味でもマルチプラットフォームデザインに対する現実的な解答が必要である。勿論、それを実現する手段自体を複数持っておく必要がある。
 紹介した共通ライブラリ・APIにはそれぞれ一長一短がある。同じプログラムを書いたとしても、その効率や合理性は選択するライブラリにより大きく依存する。解決すべき問題の性質をデザイナが見極め、開発するライブラリを選定しプログラムを作成する必要がある。
 情報産業を自負する企業は、マルチプラットフォームデザインを念頭に置いた開発体制が必要になってくるだろう。
(小宮和寛)

注:
 1)グラフィックユーザインターフェイス。マウス等を使って画面のアイコンをクリックしたりして対話式にコンピュータを利用する方法。WindowsやMacintoshがそれである。
 2)社内や個人的に利用するにあたってのソースコード改変、再コンパイルには制限がないが、配布されたプログラムを再配布する際にはソースコードを公開する必要がある。GNU劣等一般公衆利用許諾契約書。http://www.gnu.org/copyleft/lesser.htmlを参照。
 3)商用版はシングルプラットフォームで53万円、マルチ版は77万円。http://www.sra.co.jp/qt/licence/を参照。
 4)wxWindows、GTK等ともにGUIライブラリ。
 5)JavaScriptに似たActionScript 3.0という言語を搭載した。オブジェクト指向が強化された。
  戻る
saitama web-framework (c) 2007-2012 thesaitama. All Rights Reserved.