Android を使用してクラウドの上を行く

クラウド・コンピューティングと Android ソフトウェア・スタック

場所を問わずに高度なクラウド・コンピューティング・アプリケーションの実行を可能にするオープンソースのオペレーティング・システム、Android が一世を風靡しています。T-Mobile G1 スマートフォンなどのバッテリー駆動の機器で優れた効率性を発揮するように設計されたAndroid の中核は Linux® です。そしてクラウド・コンピューティングに合わせてカスタマイズしたセキュア・アプリケーションを作成できるように、Android プログラミング・モデルに従った複数のレイヤーがあります。Android で新たな高みへの飛躍を果たし、今までに経験したことのないようなモバイル・コンピューティングを経験してください。

Bill Zimmerly, Freelance Writer and Knowledge Engineer, Author

Bill Zimmerly はさまざまなバージョンの UNIX および Microsoft® Windows® の専門知識を持つナレッジ・エンジニアであり、下位レベルのシステム・プログラマーである、また Logic の祭壇で礼拝する自由な考えの持ち主です。彼は非常識な人としても知られています。ここで言う非常識は、「常識的な人は自身を世界に適応させ、非常識な人は世界を自身に適応させると試みる。したがって、すべての進歩は非常識的な人に依存する」という George Bernard Shaw の言葉による非常識を意味します。彼は、新しい技術を作成し、それらについて書くことを情熱としています。彼が住んでいるのは、空気は新鮮で景色は霊感を与えるほど美しく、そして素晴らしワインが年中手に入るミズーリ州ヒルズボロです。完璧に透明なワイン・グラスで Stone Hill Blush をすすりながら UNIX シェル・スクリプトに関する記事を執筆すること以上に素晴しいことはありません。



2009年 3月 17日

気取った比喩で溢れる業界では、新しい比喩が出現すると、それが独創的なビジネスと IT の人々の想像力を虜にするのは当然のことです。クラウド・コンピューティングはそのような比喩の 1 つで、(こう言うのも何ですが) 一世を風靡しました。そんな、クラウド・コンピューティングとは正確には何を意味するのでしょう。

クラウド (雲) は言うまでもなく、数億にも達する膨大な数の水蒸気の粒子からなります。中央で制御されることのないクラウドは、基本的には風向きに従って、どこにでも流れていきます。このような意味から、インターネットの多数のクライアント・コンピューターとサーバー・コンピューターの集まりは、それぞれがさまざまに異なる目的を持ち、またそれぞれの制御エンティティーが処理の進行を左右するため、クラウドに例えられます。このクラウドと、携帯電話会社がもたらしたワイヤレス・データ革命を考え併せると、私たちはまさに、目に見えない計算処理能力の「クラウド」にどっぷり漬かっているかのように思えます。

電子計算機時代の幕開け以来、コンピューターの作業は、以下の主要な 4 つの役割の部分に明確に分けられてきました。

  • 人間とコンピューターとの間にインターフェースを提供する入出力 (I/O) デバイス
  • 中央処理装置
  • 揮発性 RAM (Random Access Memory)
  • 不揮発性メモリー

上記のうち、最初の 3 つの部分はコンピューターでの「計算」を表します。通常、重要なデータ資産が保管されるのは 4 番目の部分ですが、この点において根本的な変化をもたらしたのが、クラウド・コンピューティングの出現です。元々コンピューターでは重要なデータ資産は不揮発性メモリー内に置かれることから、電源断 (意図的な電源断であるかないかによらず) が発生しても保護されます。不揮発性メモリー・デバイスはハード・ディスクであることが一般的ですが、SD (Secure Digital) カードや、さらには磁気テープ装置 (今ではほとんど使われていません) などのソリッド・ステート装置にすることもできます。ただし、そのようなストレージ・デバイスには限界があります。

時は進み、技術の進化に伴ってコンピューター・ネットワークが生まれました。コンピューター・ネットワークでは、1 つのコンピューターに組織の重要なデータ資産を集め、そのコンピューターを複数の端末で共有し、IT 部門の必要に応じて定期的にバックアップすることができます。メインフレーム・モデルとして知られるこのモデルは、多くのメリットをもたらしました。その 1 つが、端末を用意する側の負担が軽減されることです。小さな端末 (キーボード、マウス、ディスプレイ、および PC 本体) が 1 台だけ置いてあるような小規模なオフィスでも、ケーブルでつながっている限り、オフィスを端末でいっぱいにすることなく、数ギガバイトの企業データ、そして大規模なメインフレームの計算能力を利用することができます。

次の大きなパラダイム・シフトは、私たちが親しみを込めてインターネットと呼ぶ、複数のネットワークで構成されるネットワークに伴って訪れました。インターネットでは、パラボラ・アンテナを設置可能な場所であれば (訳注: 有線インフラによるインターネットが普及する以前に米国で提供していた衛星を介したインターネット・サービスのことを言っているようです) 世界中のどこででも衛星を介して、とてつもなく巨大なコンピューター・システム (ローカル・ネットワーク) によって無数の小さな端末にサービスが提供されます。この構成が持つワイヤレス、そしてリモートという性質が、クラウドとして知られるようになりました。

インターネットに続いて登場したのが、PDA (Personal Digital Assistant)、携帯電話、スマートフォンです。コンピューターの小型化が進化したことによって、この愛すべきコンパクトな形態になったわけです。これをきっかけに、小型端末は突如として情報をやりとりする数えきれないほどの人々の手に渡り、桁はずれの量の情報が生産され、利用されるようになっています。

1990年代の半ばから後半にかけて、最も人気のあるアプリケーションとしてクラウドを占拠したのは E メールと World Wide Web です。大多数の人々は Web ブラウザーを使ってクラウドと対話し、それによってインターネットが比較的単純なアプリケーションであることを理解しました。さらに、Yahoo! や Google などが商業的に成功したことをきっかけに、ローカル・ハード・ディスクに代わって、ネットワーク接続を利用したテラバイトのサーバーが不揮発性ストレージ・デバイスとして使用されるようになりました。先見の明のある多くの人々が予想した通り、クラウドは水や電話、電気のような現代の公共施設のようになっています。携帯電話のデジタル・ネットワークを使用して主要なサービスを提供する ISP (Internet Service Provider) では、サーバーに置かれたデータを表示するための主要なツールとして、クラウド内に何百万台もの小型の携帯機器が存在するまでに成長しました。

クラウドがあちこちに移動し、風向きの変化によって変わるように、携帯機器の運用パラダイムも変わってきています。端末は小型化され、さまざまな面でより強力になり、遙かに持ち運びしやすくなっています。同様に、サーバーも一層強力になり、ソフトウェアの仮想化とリソースの使用量の測定によって、ユーザーのデータのニーズへの対応能力も改善されています。

企業はもはや、大規模でコストもかかるサーバー「ファーム」を 24 時間体制で管理する必要はありません。それよりもコストのかからない手段として、Google、Amazon、IBM® などのベンダーのサービスにアウトソースすればよいだけの話だからです。仮想化により、以前はカスタム環境で実行していたアプリケーションを複製 (イメージ化) して、ベンダー・サーバーのクラウドで実行できるようになっています。さらに、サービスの使用量が適切に測定されるため、企業がサービスをごくわずかしか使用していない時間に対して、サービスの使用量がピークのときの価格を支払う必要もありません。

ハードウェア技術とともにソフトウェア技術も進歩するなかで、新しいアプリケーションが次々と作成されています。例えば、携帯電話の基地局または組み込み GPS (Global positioning system) がユーザーのいる場所を判断し、その近くにある会社を地図に出力するサービスなどです。有用なプログラムとデータ・ファイルをダウンロードおよびテストするための市場も新たに登場しました。例えば、音楽を購入してダウンロードする Android Market および Amazon MP3 Market です。このようなクラウド・コンピューティングを利用した独特の新しいアプリケーションがさらに発展していくであろうことについては疑う余地がありません。例えば企業がある地域の連絡先情報を分類して選択し、その地域販売員が寝ている間に、その販売員の Android ベースの携帯電話にその日にかける売り込み電話のリストを自動的に転送するなどいったことが考えられます。

携帯機器によって強力なサーバーを補完するクラウド・コンピューティングには、サーバーの設計者とプログラマーが小型のクライアント・マシン上で最大限のことを実現できるようにするオペレーティング・システムが必要です。Android は、まさにそのようなオペレーティング・システムです。

Android のアーキテクチャー

何よりもまず、Android は携帯機器を対象としたソフトウェア・スタックです。つまり、このスタックに要求される事項の優先順位の上位にリストされるのは、バッテリーを長く持たせられること、そして限られたメモリー・リソースの効率的な管理ができることを意味します。Android システム・スタックには以下の 5 つのレイヤーがあります。

  • ARM (Acorn RISC Machine) Linux コア。他のすべてのレイヤーはこのレイヤーを堅固なベースとして構築されます。Linux は、極めて信頼性に優れた実績のある技術であり、ARM プロセッサー・ファミリーは極めて低い消費電力でも優れたパフォーマンスを実現できることで知られています。
  • ライブラリー。これらのライブラリーは、再利用可能で共有できる下位レベルの基本機能のコードを提供します。例えば小型ディスプレイにリッチなグラフィックを表示するためのコーデック (デジタル・サウンドおよびビデオのコード化およびデコード用ソフトウェア) 機能や、セキュア・シェルによるクラウドとの暗号化 TCP/IP トラフィックのサポート、そして Web ブラウズ (WebKit)、SQL データベース機能 (SQLite)、および Linux システムで通常必要とされる C 標準ライブラリー機能に対するコンポーネント・サポート、などのためのコードを提供します。
  • Dalvik ランタイム・バイト・コード・インタープリター。Java™ 言語のバイト・コード・インタープリターに非常によく似ていて、Android のセキュリティーおよび電力維持モデルを一意に定義する独特な機能をいくつか追加します。現在実行中のすべてアプリケーションは、例えばアプリケーションごとに固有のユーザー ID と実行中インタープリターのコピーによって、セキュリティーのためのプロセスと信頼性のためのプロセスとを厳密に区別します。
  • Android アプリケーション・フレームワーク。このフレームワークが、ユーザーがコンポーネントを使用すること、そして適切だと判断したときにコンポーネントを置換することを可能にします。これらの上位レベルの Java クラスは強固に統合されたコンポーネントで、これらのコンポーネントによって Android API が定義されます。
  • Android コア・アプリケーション。WebKit ブラウザー、Google カレンダー、Gmail、Maps アプリケーション、SMS メッセンジャー、標準 E メール・クライアントなどがあります。Android アプリケーションは Java プログラミング言語で作成されています。さらに、Android マーケットに多数用意されたアプリーションをオンザフライでダウンロードして追加することもできます。

それぞれの Android アプリケーションはさらに、以下の機能単位に分割することができます。

  • アクティビティー
  • インテント
  • サービス
  • セキュリティー・モデル

アクティビティー

Android アプリケーションのコンポーネントであるアクティビティー は、Activity 基底クラスを継承し、イベントに応答するビューで構成されたインターフェースを定義します。アプリケーションが 3 つのウィンドウ (例えば、ログイン・ウィンドウ、テキスト表示ウィンドウ、ファイル表示ウィンドウ) で構成されている場合、各ウィンドウは通常、それぞれに異なる Activity クラスで表されます。

Android は、ホーム・ページから実行されたすべてのアプリケーションに対して履歴スタックを保持するため、「戻る」ボタンをクリックすればアクティビティーの履歴をスクロールバックすることができます。

インテント

インテントはアクティビティーと似ていますが、これはアプリケーションが目的とする実行内容を記述および定義するアプリケーション・コードの特殊なクラスです。インテントは、高度なコンポーネントの再利用および置換を可能にする間接レイヤーを追加します。例えば、Clients というラベルの付いたボタンを表示し、このボタンがクリックされるとクライアントの連絡先リストを表示するアプリケーションがあるとします。このような場合に活躍するのが間接レイヤーです。間接レイヤーによって、連絡先リストのデフォルト・ビューアーを使用する必要がなくなり、代わりに別のビューアーに置き換えることができます。

アプリケーションによっては、このインテントが極めて強力なアプリケーション統合機能になります。例えば、特定の情報を表示するにはデフォルト・マップのビューよりも地形マップのほうが適している場合などです。

BroadcastReceiver などのクラスは、外部イベントによってトリガーされた時点で実行するコードを定義するため、タイマーの停止や電話の呼び出しなどのイベントを監視するために使用することができます。通常、このようなコードはウィンドウを表示しませんが、NotificationManager クラスを使用すれば、ユーザーに注意を促すアラートを表示することができます。

サービス

サービスとは、下位レベルで実行され、ディスプレイも UI も使用しないアプリケーションのことです。一般的には、これはバックグラウンドで長時間にわたって実行されるようなアプリケーションです。その好例としては、プレイ・リストの曲を再生するメディア・プレイヤー・プログラムが挙げられます。メディア再生アプリケーションはユーザーがプレイ・リストを定義するための UI を表示しますが、プログラムは制御をサービスに渡すため、実際には指定されたプレイ・リストの曲はサービスによって再生されることになります。

セキュリティー・モデル

Android のセキュリティー・モデルでは、プログラムがそれぞれに固有のデータを持てるようになっています。プログラマーが複数の異なるプログラムの間でデータを共有したい場合には、データ共有を目的としたコンテンツ・プロバイダーを定義することができます。

android.provider パッケージは、アプリケーションが Android に組み込まれた多数のデータベースを読み取るためのクラスとインターフェースを定義します。これらのインターフェースによって、連絡先、写真、曲などの情報をアプリケーション間で簡単に共有することができます。

自由で想像力のある人々の力を見くびってはいけないのと同様に、オープンソースの威力を見くびるべきではありません。ソフトウェア・エンジニアリングの進化を妨げる独自仕様の API と企業の利益から解放された Android プラットフォームには、大規模で非常に活発な開発者コミュニティーがあり、このコミュニティーに集結した才能はまさに相乗効果をもたらしています。プログラミングのキャリアを強化したいのだったら、Android プラットフォームでのプログラミングを学んでください。そうすれば、いつの日か何百万人もの携帯電話のユーザーが集まる潜在的な市場で、ユーザーの一部があなたの作成したプログラムを必要とするようになるはずです。

Android の心臓部は ARM Linux です。この点だけをとっても、このプラットフォームの重要性が瞬く間に大きくなるという自信を抱かせます。Linux は高速かつセキュアなオペレーティング・システムで、何千人ものプログラマーが使い慣れているからです。多くの Linux ベースのシステムは、今後何年も稼動し続け、クラウドに接続してクラウドでの要求に対応することがわかっています。これはすなわち、Android の信頼性が確実に裏付けられているということです。


開発環境: Eclipse、Windows、Linux

どの Android 開発環境を使用するかとなると、プログラマーにはいくつかの選択肢があります。具体的な選択肢は、Microsoft® Windows® XP または Windows Vista®、Macintosh OS X (V10.4.8 以降、x86 のみ)、あるいは Desktop Linux (Ubuntu を推奨) です。ダウンロード可能な SDK (Software Ddevelopment Kit ) は、これらの汎用オペレーティング・システムすべてに対応しています。

Eclipse や Sun Microsystems の NetBeans などの GUI IDE を使用することもできれば、お馴染みの「正真正銘のプログラマー」の手法としてコマンドラインと標準エディターを使用することもできます。どちらを使うかは、各自の自由です。

Android コミュニティーではコミュニケーションを促しています。それは、Android の作成を支援している Google、HTC、T-Mobile、そしてその他の Open Handset Alliance Project のメンバーにしても同じことです。オープンとはその言葉通り、人々 (プログラマー、ユーザー、市場で販売をする人など) の間での通信網をオープンにし、プロトコルをオープンにし、そしてプログラミング API をオープンにすることを意味します。

Android で使用されているソフトウェア・ライセンスの種類のおかげで、組織が独自に開発したプログラムやデータを Android 上で使用することもできます。このようにして、組織がこのプラットフォームから離れないようにしているだけでなく、利用者の選択肢を制限しないようにもしています。あらゆる点で、Win-Win の組み合わせと言えます。


Android SDK による開発の開始準備

Android のための開発に興味のある誰もが最初に行うタスクは、Android SDK をダウンロードしてインストールすることです (「参考文献」を参照)。これが終われば、プログラミングを始める準備は万端です。プログラミングに取り掛かる方法には、プログラマーの数と同じくらいにさまざまな方法があります。私を含め、コーディングを始める前にすべての機能を調べたいというプログラマーもいれば、すぐに実践に移って包括的な Android ドキュメントが提供するチュートリアルの例を実行したいというプログラマーもいます。どちらの方法を取るにせよ、最終的には何かをコードにしなればなりません。コードを作成するには、まず始めに典型的な Hello World プログラムで Android の仕掛けを調べてください (「Hello World」サンプル・アプリケーションについては、「参考文献」を参照)。


開発者向けリソース

クラウドには、複数のウィキや Android コミュニティーのフォーラム、そして数々の Android プログラミングに関するブログなど、Android 開発用の多数のリソースがあります。Android 旋風の立役者となっている Google は、本質的には情報伝達を行うための会社なので、スキルも才能もさまざまな開発者同士がコミュニケーションを取れるように複数のフォーラムを用意しています (これらのフォーラムは、Google グループとして知られています)。

参考文献」セクションに Android に関するリンクを記載していますが、これらを読んでも Android の世界がいかに広大であるかを知る手掛かりにすらなら及ばないほどです。クラウド・コンピューティング、特に Android は熱いほどの活気に満ちています。

クラウドのなかで冷静さを保つために: 将来の展望

IBM は現在、米国ノースカロライナ州の Research Triangle Park と東京の 2 箇所で大規模なクラウド・コンピューティング・センターの設立に懸命に取り組んでいる最中です。カスタム・クラウド・コンピューティング・アプリケーションの原動力となるサービスには、センターの Web サイトにアクセスし、IBM で提供可能なサービス内容を調べるだけで簡単にアクセスすることができます (「参考文献」を参照)。

クラウドを利用するアプリケーションを作成すれば、クラウドでバックアップとリストアが自動化され、熟練したエンジニアが皆さんそれぞれの構想を現実のものにしてくれます。皆さんの Android 携帯電話を、IBM の計算処理能力の集まりに対する単なる拡張機能であるという観点で考えてみてください。例えばコーヒー・ショップでお気に入りのカフェ・ラテを飲んでいる間、携帯電話で何を見たいと思うでしょうか。キャッシュ・フロー図ですか?企業の成長を示すポートフォリオ・データとグラフですか?それとも、前の晩に超高速並列処理サーバーでカスタム・フィルタリング・プログラムによって処理した NASA からの最新の画像データでしょうか。あるいは、National Earthquake Information Center から直接送られてくる最新の地震データだったり、ただ単に、昨夜の NBA チャンピオンシップの優勝者だったりするかもしれません。データは「手の届くところ」にあります。そしてそこには、そのデータの意味を理解する上で必要な処理能力もあります。それだけあれば、思いままのアプリケーションを実現することができます。

今後数年のうちに、先人たちの威大な業績を利用する人々によって、どのような革新的クラウド・コンピューティング・アプリケーションが誕生してくるか、様子を見ていてください。

参考文献

学ぶために

製品や技術を入手するために

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source
ArticleID=381383
ArticleTitle=Android を使用してクラウドの上を行く
publish-date=03172009