開発者から見て、iPhoneとAndroidはどう違うのか。ITproの記事を読むためのiPhoneアプリAndroidアプリを開発し、「Androidで広がる、携帯アプリ開発の世界」と「オール・イン・ワンiPhone開発」を執筆したアシアルがアプリケーション開発過程における両者の比較をお届けする。

 開発者の視点からiPhoneとAndroidを比較する連載の第2回。今回は、「OS」の観点から両者を比較してみよう。一言で言えば、iPhoneは「ユーザー体験」、Androidは「オープン」を重視しており、その設計思想の違いがOSのアーキテクチャにも現れている。

Mac OS Xを基盤としたiPhone OS

 まずiPhoneだが、OSは「iPhone OS」を採用している。iPod TouchやiPadにも搭載されているこのOSは、Mac OS Xのアーキテクチャを基盤としている。ソフトウエアの「核」とも言えるカーネルはOS Xと同じ、オープンソースのマイクロカーネルMachをベースにしたDarwinを基にしている。アプリケーションはすべてこのOSの管理下に置かれ、デバイスのハードウエアと直接やり取りする。OSは4つのレイヤで構成され、最上位にあたるのがフレームワークの「Cocoa Touch」レイヤである。以下、下位に向かって「Media」レイヤ、「Core Services」レイヤ、「Core OS」レイヤと続く。

 Cocoa Touchはいくつかの重要なフレームワークで構成され、大きく「Foundationフレームワーク」と「UIKitフレームワーク」の2つに分けることができる。前者は主に基本的なデータの処理を、後者は主にGUI(グラフィカル・ユーザー・インタフェース)の構築をつかさどる。Cocoa TouchフレームワークによるiPhoneアプリ開発の実際に興味を持たれた方は、アシアルが執筆した「オール・イン・ワンiPhone開発」をご覧いただきたい。

Linuxベース、オープンソースのAndroid

 一方のAndroidだが、Androidとは本来、Googleと推進団体「Open Handset Alliance」の手によってモバイル用途向けに開発された、オープンソースの汎用プラットフォームを指す。Androidには、オープンソースのLinuxカーネルをベースとしたOSをはじめとして、ミドルウエア、アプリケーション・フレームワーク、豊富なコード・ライブラリ、エンドユーザー向けの標準的なアプリケーションなどが一つのパッケージとして包括的に含まれる。

 Googleは、カーネルを除いたこれらAndroidプラットフォームの大部分を、Apacheライセンスのもとに無償で配布している。Linuxカーネルに適用されるGPLに比べて、Apacheライセンスは商用化がしやすく、ベンダーやデベロッパたちはその膨大なソースコードを自由に改変し、再配布することができる。

 Androidは、Java VMをベースに、Googleにより独自にカスタムされた「Dalvik VM」という名の仮想マシンを備えている。モバイル用途向けに最適化されているのが特徴だ。デベロッパにとっては、アプリケーション・プラットフォームとしてJavaが採用されたことで、Javaの豊富な資産を活用できることの恩恵は大きい。Java言語で開発されたすべてのAndroidアプリケーションは、このDalvik上で対等に動作する。

Androidのアプリ連携機能「Intent」

 これらのアプリケーションは、「Intent」と呼ばれる仕組みを使って比較的容易に相互連携することができる。Intentは、アプリケーションが他のアプリケーションを呼び出すことができる機能である。開発者はIntentにより、例えばTwitterへの投稿などは他のアプリケーションの機能を利用することで、少ない労力で目的を実現するアプリケーションを作成できる。

 Intentには明示的なものと暗黙的なものがある。明示的なIntentは呼び出すアプリケーションを具体的に指定する。それに対して後者の暗黙のIntentは、「電話をかける」、「Webページを開く」などのアクティビティを指定するもので、具体的なアプリケーション名を指定しなくとも、その機能を使うことができる。Intentの詳細は、「Androidで広がる、携帯アプリ開発の世界 第6回 詳細画面を付けて、簡易RSSリーダーの完成」を参照されたい。