スマホ×Windows Azure開発講座(iOS編)

第1回iOS+Windows Azureの技術概要

はじめに

去る3月の震災を機に、インターネットそのものとともに⁠クラウド⁠による情報供給におけるスケーラビリティや耐障害性、⁠スマートデバイス⁠によるライブインフォメーションへのアクセスの進化が、改めて注目されました。普段あまりアクセスがないサイトに、アクセスが集中しダウンするサイトを、クラウドでミラーリングしてカバーされました。電話が麻痺する中、IP通信はダウンしなかったため、SkypeやTwitterが情報伝達手段として活躍しました。

今、⁠クラウド⁠⁠スマートデバイス⁠を利用したアプリケーション・サービスは目覚ましい数で増えています。

本連載では、Microsoftが提供する選り取り見取りのサービス群からなるクラウド⁠Windows Azureプラットフォーム⁠と、完成度の高いアップルの⁠iOS⁠デバイスに焦点を当て、この2つを組み合わせたアプリケーション・サービス開発について、取り上げていきます。

初回となる本稿では、Windows AzureプラットフォームとiOS、それぞれの技術概要について紹介していきます。

Windows Azureプラットフォームについて

Windows Azureプラットフォームは、Microsoftが提供するコンピューティング、データベース、ストレージ、CDN、仮想ネットワークなどから成るクラウドサービス群です。

メインとなるアプリケーションをホストするためのクラウドサービス、Windows Azureコンピューティングは、目的に応じてWebロール、ワーカーロール、VMロールという、3つの⁠ロール⁠に分かれています。

WebロールはIIS(インターネットインフォメーションサービス)をフロントとして動作するWebアプリケーションサーバにあたる機能を提供します。ワーカーロールは、Webロールとは別にバックグラウンド処理を担当させるホストになります。VMロールはWindows Server 2008 R2を仮想的に動作させるホストを提供します。

Windows Azureストレージとは何か

Azureプラットフォームにおけるスケーラビリティを持ち、耐久性に優れたストレージサービスで、テーブル、BLOB、キューの3つからなります。ストレージアカウントによって認証することでアクセスでき、REST APIが提供されています。

テーブルはフレシキブルにさまざまな構造のデータを保管することができるKey-Value Storeタイプのストレージです。従来のRDBを使いたい場合はSQL Azureデータベースを利用します。

BLOBは、巨大なバイナリデータを格納するためのストレージです。各データはコンテナでグループ化され、コンテナレベルでアクセスポリシーを設定することができます。

キューは、主にロール間のプロセスを仲介するメッセージをいわゆる待ち行列形式で溜めるストレージです。各ロールは、キューにメッセージを送信したり、ウォッチして受信することで処理を実行したりします。

iOSとは何か

AppleがiMac、MacBookとともに開発してきたMac OS XをベースにしてiPad、iPhone、iPod touch上で稼働するOSです。そのためこれらの端末は、ご存知のとおり⁠iOSデバイス⁠と呼ばれています。 iOSのアーキテクチャは、図1のように下位から順にCore OS、Core Services、Media、Cocoa Touchの4つのレイヤで構成されます。Core OSのシステム部分はOS Xとカーネルやネットワーク、ファイルシステム、スレッドなど多くのテクノロジーを共有しています。

図1 iOSアーキテクチャ
図1 iOSアーキテクチャ

iOS SDKとは

iOS上で動くアプリケーションは、無償で提供されているiOS SDKによって開発できます。iOS SDKにはネイティブアプリケーションの実装、コンパイル、テスト、プロファイリングを行うためのツールが含まれています。それら機能のほとんどは統合開発環境のXcodeに集約されています。Objective-C言語を使って、前述のアーキテクチャを構成する各レイヤのためのフレームワークを利用することで、多種多様なアプリケーションを開発することができます。

Cocoa TouchはMacで実現しているUIとともにiOSデバイス上でインタラクティブなUIを実現するためのフレームワークで、iOSアーキテクチャの最上位レイヤになります。Cocoa TouchはModel-View-Controllerに基づいた設計になっているため、Cocoaフレームワークの経験がある開発者だけでなく、WebアプリケーションやRIAの経験が多い開発者でも、比較的スムーズに開発が行えるでしょう。

iOSアプリケーションの設計

iOSアプリケーションがどのように設計、構築されているか、紹介していきましょう。図2は、クラウドサービスに依存するアプリケーションの一般的な構成を表します。

図2 iOSアプリケーション内の構成
図2 iOSアプリケーション内の構成

iOSアプリケーション内はMVCで構築されていますが、Webアプリケーションに慣れた開発者にとっては、MVCというよりも、RIAクライアントにおけるMVVMに近いと感じるかもしれません。

ViewはUIWindow(アプリケーションの画面⁠⁠、UIView(各ビューと配置されたテキストボックス、ボタンなど)からなります。これらはXcode内のInterface Builderというツールによって視覚的に定義することができ、その内容はXMLベースのXIBファイルとして保存されます。

Modelはデータエンティティです。クラウドのサービスにネットワークアクセスしたり、ローカルストレージにアクセスしたりして、データを取得したり保持します。

Controllerは、主にViewとModelの仲介役です。Viewの各パーツは⁠アウトレット⁠という方法でControllerに接続します。またControllerのメソッドは、⁠アクション⁠として、Viewのパーツに対するユーザ操作にリンクします。ユーザの操作に反応して、View間の処理や、必要に応じてModelからデータを取得して、Viewに値をセットすることで画面更新を行います。端末のロックといったサスペンドが発生するようなアプリケーション自体へのイベントは、Application Delegateを介して処理します。

ControllerとModelは、Objective-Cのヘッダファイル(.h)と実装ファイル(.m)でコーディングします。

ModelからControllerへの通知は多くの場合、 DelegateパターンやBlockを使ったコールバックによって実装されます。Delegateパターンは画面間のロジックおいても使われます。また、完全に疎結合にしたいときは、通知センターによる通知によって実装することが可能です。

Viewを構成するパーツの属性に、直接Modelの持つデータの値をバインディングするような機能はありません。Mac OS XにはCocoaバインディングがありますが、iOSではサポートされていません。

Azureプラットフォームによるクラウドサービスの構成

主にWindows AzureのWebロールとワーカーロール、そしてAzureストレージを利用した一般的なシステム構成を紹介します。

図3 Windows Azureプラットフォーム内の構成
図3 Windows Azureプラットフォーム内の構成

図3では、Windows Azure内における処理の流れとして、Webロールからワーカーロールに矢印が描かれています。これは大まかには、Webロールでサービスクライアントから受け取ったデータを、バックグラウンドでワーカーロールが扱う、という流れを示します。ただし、それぞれのロールから、Azure ストレージの各サービスへ操作が定義されているとおり、命令はキュー、データはテーブル、BLOBを介して渡すことで、Webロールからワーカーロールへの流れは、疎結合に実現されます。

まずWebロールはデータの種類に応じて、テーブル、BLOBに格納し、ワーカーロールに委譲したい処理とその対象データへのポインタをメッセージとしてキューに送ります。ワーカーロールはキューに溜まるメッセージをウォッチしており、その内容からテーブル、BLOBからデータ取得して、生成したデータを再びテーブル、BLOBに格納したり、別のサービスを呼び出したりします。

このため、ロールの数をWebロールとワーカーロールそれぞれの処理に対しての負荷に応じて、スケールアウトすることが可能になります。

iOSデバイスは、データの送信や動的に生成されるデータの取得は、Webロールに対してアクセスして行い、写真のイメージのように静的データの取得は、Azureストレージに直接取りに行くのが一般的です。

まとめ

Windows Azureというクラウド、そしてスマートデバイスのiOSのアーキテクチャについて説明してきました。次回以降は、より具体的にクラウド(Windows Azure)+スマートデバイス(iOS)のアプリケーションの開発について、紹介していきます。

Windows Azure プラットフォームは無料で試すこともできますし、MSDNサブスクリプション会員であれば、相当量の利用が無償で可能になります。これを機会に試してみては、いかがでしょうか。

おすすめ記事

記事・ニュース一覧