目次


クラウド内でスケーラブルな連絡先アプリケーションを作成してデプロイする: 第 2 回

複数のユーザーを追加して Bluemix にデプロイする

Comments

MongoDB は、その柔軟性、ドキュメント指向のスキーマ、そしてスケーリングの容易さから、データベース駆動のクラウド・アプリケーションでは人気の選択肢です。この全 2 回からなるチュートリアルでは、IBM Bluemix と Bluemix の MondoLab サービスを利用して、PHP、MongoDB、jQuery Mobile を統合した Web ベースのアドレス帳を作成してデプロイする方法を紹介します。

第 1 回では、PHP/jQuery アドレス帳アプリケーションを作成する方法を紹介しました。このアプリケーションは、IBM Bluemix クラウドにホストされた MongoDB データベースを使用して、連絡先を保管および管理できるようにします。第 2 回では、複数ユーザーのサポートを追加する方法、アプリケーションを Bluemix にデプロイする方法、タブレットやスマートフォンですぐに使い始める方法を説明します。

アプリケーションをデプロイするために必要なもの

: このチュートリアルでは、読者が第 1 回のステップを完了していることを前提とします。

サンプル・アプリケーションでは、ユーザーが連絡先レコードとして、連絡先の名前、e-メール・アドレス、電話番号などを入力することができます。このアプリケーションを Bluemix クラウド内で実行すると、すぐにタブレットやスマートフォンなどのタッチ式端末で使用できるようになります。また、複数のユーザーをサポートするために、ユーザーが Google+ の認証情報を使用してアプリケーションにログインできるようにします。ユーザー認証は、OAuth 2.0 と Google+ API を使用して行います。

クライアント・サイドでは、jQuery Mobile を使用して、アプリケーションのモバイル対応ユーザー・インターフェースを作成します。サーバーでは、Slim という PHP マイクロフレームワークを使用してアプリケーションのフローを管理し、MongoDB にデータを保存して、そこからデータを取得します。また、ユーザー認証には、HybridAuth というオープンソースのソーシャル・サインオン・ライブラリーを使用します。

このアプリケーションには多くのテクノロジーを利用するため、以下のものが必要になります。

注: Google+ API を使用するアプリケーションは例外なく、Google の利用規約とプライバシー・ポリシーに従う必要があります。プロジェクトを開始する前に利用規約とプライバシー・ポリシーに書かれている要求事項を読んで、アプリケーションがそれらの要求事項を満たしていることを確認してください。

アプリを実行するコードを入手する

ステップ 1. OAuth を構成する

皆さんは現時点で、単純ながらも完全に機能するオンライン・アドレス帳の誇りあるオーナーとなっています。しかし、1 つだけ問題があります。それは、このアプリケーションは単一ユーザーしかサポートしていないことです。最終的にはこのアプリケーションをクラウドにデプロイする予定なので、理想としては、これを複数のユーザーに対応するアプリケーションにして、ユーザーのそれぞれが自分だけの連絡先リストにアクセスできるようにする必要があります。

技術的な面で言うと、それには 2 つの作業が必要になります。

  • ユーザー ID を各連絡先レコードに追加して、ユーザーには各自のアカウントに関連付けられた連絡先だけが表示されるようにします。
  • 認証の層を追加し、ユーザーが自身を特定してからでないとアプリケーションにアクセスできないようにします。

MongoDB の柔軟なドキュメント指向スキーマを使用すれば、1 つ目の作業を行うのは簡単なことです (次のセクションでその方法を紹介します)。2 つ目の作業については、幾分用心しなければなりません。それは、独自の認証システムを作成するか、それともユーザーが他のサービス (Facebook、Twitter、Google+ など) のアカウントを使ってログインできるようにするかを最初に決めなければならないためです。

このチュートリアルでは、後者を採ることにします。その理由は、私が使っている HybridAuth というツールにあります。このオープンソースの PHP ライブラリーを使用すれば、多種多様なソーシャル・ネットワークおよびサービスに対してユーザーを認証することができます。HybridAuth はサービスの認証および認可の核心部分を抽象化し、OAuth トランザクションとアクセス・トークンの複雑さを懸念せずに簡単にソーシャル・サインオンを PHP アプリケーションに追加できるようにします。

  1. HybridAuth を使い始めるには、$APP_ROOT/composer.json ファイルを更新して HybridAuth をプロジェクトに追加します。
    {
        "require": {
            "slim/slim": "2.*",
            "hybridauth/hybridauth": "2.*"
        }
    }
  2. 以下のコマンドで、Composer を使用して HybridAuth をインストールします。
    shell> cd /usr/local/apache/htdocs/contacts
    shell> php composer.phar update
  3. 認証に使用するソーシャル・ネットワークを決めます。このチュートリアルでは簡単のために Google+ を使用しますが、Twitter、Facebook、MySpace、LinkedIn、または Foursquare を使用するのも簡単です (あるいは、このすべてを使用することもできます)。Google+ を使用するには、まず Web アプリケーションを Google に登録し、認証用の Google+ API にアプリケーションがアクセスできるようにする必要があります。
  4. それには、Google アカウントの認証情報を使用して Google にログインし、Google Developers Console にアクセスします。
  5. 新規プロジェクトを作成して名前を割り当てた後、プロジェクトの「APIs (API)」セクションで Google+ API へのアクセスを有効にします。
  6. 同じくプロジェクトのページで「Credentials (認証情報)」セクションを表示し、アプリケーションの OAuth 2.0 クライアント ID とシークレットを入手します。

    OAuth 2.0 クライアント ID とシークレットを入手する際に、アプリケーションのリダイレクト URL も設定します。OAuth 認証プロセスが完了すると、Google は、ここに設定された URL にクライアント・ブラウザーをリダイレクトします。この例では、リダイレクト URL を http://localhost/contacts/callback?hauth.done=Google に設定してください。この特殊な /callback 経路は、後でアプリケーション内に定義します。

: 必ず「Google APIs Terms of Service」「Google+ プラットフォーム デベロッパー ポリシー」「Google+ Platform Terms of Service」、および「Google プライバシー ポリシー」に目を通して、アプリケーションが完全に準拠していることを確認してください。例えば、ユーザーには、自分の全データを随時システムから削除する手段を提供しなければなりません。そのために必要なコードのサンプルは、アプリケーションのコード・リポジトリーに用意されています。

ステップ 2. 複数のユーザーをサポートする

事前の準備はすべて終わったので、コードの作成に取り掛かります。アプリケーション内に HybridAuth を構成するために、以下の行を $APP_ROOT/index.php ファイルに追加します。

<?php
// use Composer autoloader
require 'vendor/autoload.php';

// Slim initialization – snipped!

// configure credentials
// ... for HybridAuth
$config["hybridauth"]  = array(
  "base_url" => $app->request()->getUrl() . $app->request()->getRootUri() . "/callback",  
  "providers" => array (
  "Google" => array (
    "enabled" => true,
    "keys" => array ("id" => "YOUR_CLIENT_ID_HERE", "secret" => "YOUR_CLIENT_SECRET_HERE_huJ" ),
    "scope" => "https://www.googleapis.com/auth/userinfo.email"
)));

// initialize HybridAuth client
$auth = new Hybrid_Auth($config["hybridauth"]);

// Slim handlers and hooks – snipped!

$app->run();

上記のコードは新しい HybridAuth クライアントを初期化します。この新規クライアントには、$auth オブジェクトを介してアクセスすることができます。当然、上記の構成でダミーとして使用されているクライアント ID とシークレットは、ステップ 1 でアプリケーション用に生成したものに置き換えてください。

次は、ログインとログアウトそれぞれの経路を、OAuth 認証に必要となる特殊な /callback 経路と併せて追加します。

<?php
// configuration and initialization – snipped!

session_start();

// login handler
$app->get('/login', function () use ($app, $auth) {
  $google = $auth->authenticate("Google");
  $currentUser = $google->getUserProfile();
  $_SESSION['uid'] = $currentUser->email;
  $app->redirect($app->urlFor('index'));
})->name('login');

// logout handler
$app->get('/logout', function () use ($app, $auth) {
  $auth->logoutAllProviders();
  session_destroy();
  $app->render('logout.tpl.php');
});

// OAuth callback handler
$app->get('/callback', function () {
  Hybrid_Endpoint::process();
});

// other handlers and hooks – snipped!

$app->run();

/login ハンドラーは Google+ API に対してユーザーを認証するために、HybridAuth クライアントの authenticate() メソッドを使用します。authenticate() が、OAuth による認証と認可の複雑な部分をすべて抽象化します。認証が完了すると、結果オブジェクトの getUserProfile() メソッドが認証済みユーザーのプロファイルを構造化されたフォーマットで返します。このプロファイルには、ユーザーの名前、プロファイルの URL、写真の URL とその他の個人情報が含まれます。ただし、このアプリケーションで実際に必要となるのは、ユーザーに関連付けられた e-メール・アドレスだけです。e-メール・アドレスが、ユーザー固有の ID の役割を果たします。この ID は $_SESSION['uid'] セッション変数に格納され、クライアントはアプリケーションの index ページに転送されます。

OAuth 認証フローには /callback ハンドラーが必要となりますが、その理由は、OAuth 認証プロセスが完了した後、Google がクライアント・ブラウザーをリダイレクトする宛先の URL は、この /callback だからです。コールバックを処理する作業は、Hybrid_Endpoint::process() メソッドが抽象化します。

一方、/logout ハンドラーは HybridAuth オブジェクトの logoutAllProviders() メソッドを使用して、接続されているすべてのプロバイダーをログアウトします。また、現行のアプリケーション・セッションを破棄して、以下のページ・テンプレートをレンダリングします。このページ・テンプレートは、$APP_ROOT/templates/logout.tpl.php として保存してください。

<!DOCTYPE html> 
<html> 
<head> 
  <meta name="viewport" content="width=device-width, initial-scale=1"> 
  <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css" />
  <script src="//code.jquery.com/jquery-1.9.1.min.js"></script>
  <script src="//code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script>
</head> 
<body>
  <div data-role="page">
    <div data-role="header">
      <h1>Contacts</h1>
    </div>
    <div data-role="content">
      You are now signed out of the application. However, since you originally signed in using your Google Account, you must also sign out of your Google Account to completely destroy your session.
      <br/>
      <a href="<?php echo $baseUri; ?>/index" data-ajax="false" data-inline="true" data-role="button" data-icon="back" data-mini="true" data-theme="a">Back</a>
      <a href="https://accounts.google.com/Logout" data-ajax="false" data-inline="true" data-role="button" data-icon="action" data-mini="true" data-theme="a">Sign out of Google</a>
    </div>    
  </div>
</body>
</html>

上記のページ・テンプレートで指摘しているように、ユーザーがアプリケーションからログアウトしても、実際にそのユーザーが Google アカウント・セッションからログアウトされるわけではありません (このセクションの先頭にあるリンクに、その理由が説明されています)。そのためログアウト・ページには、接続されている Google アカウントからログアウトして、OAuth トークンおよびセッションを完全に失効させる追加オプションを提供します。

$_SESSION['uid'] 変数は、ユーザーが正常に認証された場合にのみ存在するため、他のアプリケーションの経路へのアクセスを保護するには、この変数を使用することができます (以下を参照)。

<?php
// configuration and initialization – snipped!

session_start();

// middleware to restrict access to authenticated users only
function authenticate () {
  $app = \Slim\Slim::getInstance();
  if (!isset($_SESSION['uid'])) {
    $app->redirect($app->urlFor('login'));
  }
}

// other handlers and hooks – snipped!

$app->run();

上記の authenticate() 関数は、セッション内でユーザー ID の有無をチェックします。ユーザー ID がない場合は、ユーザーを /login URL にリダイレクトして、再ログインを強制します。この関数は Slim ミドルウェアとして使用され、リクエストを処理する前に実行されます。このミドルウェアを特定の経路ハンドラーに追加することで、認証済みユーザーにしか使用を許可しないアプリケーション機能へのアクセスを保護できるようになります。アプリケーションのソース・コードを見ると、このミドルウェアが /index、/save、/delete、および /logout の各ハンドラーで使用されていることがわかります。

上記の変更により、ユーザーは自分の Google アカウントでログインした後でないと、アプリケーションの機能を使用できなくなります。ただし、まだ残っているステップが 1 つあります。それは、ユーザーの e-メール・アドレス (これは常に、$_SESSION['uid'] 変数に格納されることに注意してください) をすべての連絡先レコードに関連付けて、この固有の ID を使用してすべての MogoDB クエリーをフィルタリングするように、アプリケーション・コードを更新することです。

以下に、これまでの変更をすべて加えた最終的なコードを記載します。

<?php
// use Composer autoloader
require 'vendor/autoload.php';

// configure Slim application instance
// initialize application
$app = new \Slim\Slim(array(
  'debug' => true,
  'templates.path' => './templates'
));

// configure credentials
// ... for MongoDB
$config["db"]["uri"] = 'mongodb://db2:db2@192.168.56.101:27017/db2';
$config["db"]["name"] = substr(parse_url($config["db"]["uri"], PHP_URL_PATH), 1);

// ... for HybridAuth
$config["hybridauth"]  = array(
  "base_url" => $app->request()->getUrl() . $app->request()->getRootUri() . "/callback",
  "providers" => array (
  "Google" => array (
    "enabled" => true,
    "keys" => array ("id" => "YOUR_CLIENT_ID_HERE", "secret" => "YOUR_CLIENT_SECRET_HERE_huJ" ),
    "scope" => "https://www.googleapis.com/auth/userinfo.email"
)));

// start session
session_start();

// initialize Mongo client object
$mongo = new MongoClient($config["db"]["uri"], array("connectTimeoutMS" => 30000));
$db = $mongo->selectDb($config["db"]["name"]);

// initialize HybridAuth client
$auth = new Hybrid_Auth($config["hybridauth"]);

// index page handlers
$app->get('/', function () use ($app) {
  $app->redirect($app->urlFor('index'));
});

$app->get('/index', 'authenticate', function () use ($app, $db) {
  $collection = $db->contacts;
  $contacts = $collection->find(array('owner' => $_SESSION['uid']));
  $app->render('main.tpl.php', array('contacts' => $contacts));
})->name('index');

// add/update handlers
$app->get('/save(/:id)', 'authenticate', function ($id = null) use ($app, $db) {
  $collection = $db->contacts;
  $contact = $collection->findOne(array('_id' => new MongoId($id), 'owner' => $_SESSION['uid']));
  $app->render('form.tpl.php', array('contact' => $contact));
});

$app->post('/save', 'authenticate', function () use ($app, $db) {
  $collection = $db->contacts;  
  $name = trim(strip_tags($app->request->params('name')));
  $id = trim(strip_tags($app->request->params('id')));
  $email = trim(strip_tags($app->request->params('email')));
  $phone = trim(strip_tags($app->request->params('phone')));
  $contact = new stdClass;
  if (!empty($name)) {
    $contact->name = $name;
    $contact->owner = $_SESSION['uid'];
    $contact->phone = $phone;
    $contact->email = $email;
    if (!empty($id)) {
      $contact->_id = new MongoId($id);
    }
    $collection->save($contact);
  }
  $app->redirect($app->urlFor('index'));
});

// delete handler
$app->get('/delete/:id', 'authenticate', function ($id) use ($app, $db) {
  $collection = $db->contacts;
  $collection->remove(array('_id' => new MongoId($id), 'owner' => $_SESSION['uid']));
  $app->redirect($app->urlFor('index'));
});

// login handler
$app->get('/login', function () use ($app, $auth) {
  $google = $auth->authenticate("Google");
  $currentUser = $google->getUserProfile();
  $_SESSION['uid'] = $currentUser->email;
  $app->redirect($app->urlFor('index'));
})->name('login');

// logout handler
$app->get('/logout', 'authenticate', function () use ($app, $auth) {
  $auth->logoutAllProviders();
  session_destroy();
  $app->render('logout.tpl.php');
});
// OAuth callback handler
$app->get('/callback', function () {
  Hybrid_Endpoint::process();
});


// hook to add request URI path as template variable
$app->hook('slim.before.dispatch', function() use ($app) {
  $app->view()->appendData(array(
    'baseUri' => $app->request()->getRootUri()
  ));
}); 

$app->run();

// middleware to restrict access to authenticated users only
function authenticate () {
  $app = \Slim\Slim::getInstance();
  if (!isset($_SESSION['uid'])) {
    $app->redirect($app->urlFor('login'));
  }
}

強調表示されたセクションを見るとわかるように、/index ハンドラーはログイン・ユーザーが所有する連絡先情報だけを表示し、/save ハンドラーは新規に作成された各連絡先に対し、固有のユーザー ID を自動的に付加するようになっています。以上の変更により、このアプリケーションでは複数のユーザーをサポートし、各ユーザーが固有の連絡先レコードのサブセットを持てるようになりました。

これをテストするには、前と同じく、http://localhost/contacts にあるアプリケーションをブラウズしてみてください。今回は、連絡先リストが直接表示されるのではなく、Google アカウントへのログインが促されるはずです。ログインすると、OAuth の認可画面が表示されます。

上記の画面でプロファイルへのアクセスが認められた場合にだけ、アプリケーションのメイン・ページに転送されます。

ステップ 3. Bluemix にデプロイする

アプリケーションのコーディングはすべて完了しました。最後のステップは、このアプリケーションをデプロイすることです。もちろん、ローカルにデプロイするとしたら、それですべて完了です。後はアプリケーションを通常通りに使用できます。一方でアプリケーションを Bluemix にデプロイする場合は、Bluemix アカウントと Cloud Foundry コマンド・ライン・クライアントが必要です。以下の手順に従って、デプロイ・プロセスを完了してください。

  1. Bluemix にデプロイする際には、MongoDB サービス・インスタンスをアプリケーションに関連付ける (バインドする) 必要があります。このサービスは Bluemix によりプロビジョニングされ (その仕組みはこの後すぐ、説明します)、新規 MongoDB データベースに対する資格情報が、特殊な VCAP_SERVICES 環境変数で公開されます。したがって、この変数を読み取り、変数から MogoDB 資格情報を取得するようにアプリケーション・コードを更新する必要があります。

    それには、以下のコードを $APP_ROOT/index.php ファイルに追加します。

    <?php
    // use Composer autoloader
    require 'vendor/autoload.php';
    
    // configure Slim application instance
    // initialize application
    $app = new \Slim\Slim(array(
      'debug' => true,
      'templates.path' => './templates'
    ));
    
    // configure credentials – snipped!
    
    // if BlueMix VCAP_SERVICES environment available
    // overwrite with credentials from BlueMix
    if ($services = getenv("VCAP_SERVICES")) {
      $services_json = json_decode($services, true);
      $config["db"]["uri"] = $services_json["mongolab"][0]["credentials"]["uri"];
    } 
    $config["db"]["name"] = substr(parse_url($config["db"]["uri"], PHP_URL_PATH), 1);
    
    // start session
    session_start();
    
    // initialize Mongo client object
    $mongo = new MongoClient($config["db"]["uri"], array("connectTimeoutMS" => 30000));
    $db = $mongo->selectDb($config["db"]["name"]);
    
    // initialize HybridAuth client
    $auth = new Hybrid_Auth($config["hybridauth"]); 
    
    // route handlers – snipped!
  2. アプリケーションのマニフェストを作成します。 アプリケーション・マニフェスト・ファイルは、Bluemix に対し、アプリケーションをデプロイする方法を指示します。具体的には、このファイルで、使用する PHP ランタイム環境 (「ビルドパック」) を指定します。$APP_ROOT/manifest.yml に新規ファイルを作成し、以下の情報を入力してください。
    ---
    applications:
    - name: contacts-[random-number]
    memory: 256M
    instances: 1
    host: contacts-[random-number]
    buildpack: https://github.com/dmikusa-pivotal/cf-php-build-pack.git

    必ず、ホストとアプリケーションの名前を変更するか、名前の終わりに乱数を追加するかして、名前が固有になるように更新してください。私が使用しているのは Cloud Foundry PHP ビルドパックですが、別のビルドパックを使用するのでも構いません。

  3. PHP ビルドパックを構成します。 Cloud Foundry PHP ビルドパックにはデフォルトで、最もよく使われている PHP 拡張機能のいくつかが含まれています。PHP MongoDB 拡張機能はデフォルトでは含まれていませんが、デプロイメントの際にこの拡張機能を追加するようにビルドパックを構成するのは簡単です。

    $APP_ROOT/.bp-config というディレクトリーを作成します。そこに $APP_ROOT/.bp-config/options.json を作成し、以下の内容を含めて、PHP MongoDB 拡張機能のサポートを追加します。

    {
        "WEB_SERVER": "httpd",
        "PHP_EXTENSIONS": ["bz2", "zlib", "curl", "mcrypt", "mongo"]
    }

    ビルドパックに含まれるデフォルトの Apache Web サーバーは、mod_rewrite および .htaccess のサポートが有効になった状態で提供されます。したがって、Slim の URL リライト機能を有効にするために必要な作業は何もありません。

  4. Bluemix に接続して、アプリケーションをデプロイします。cf コマンド・ライン・ツールを使用して、IBM ID とパスワードで Bluemix にログインします。
    shell> cf api https://api.ng.bluemix.net
    shell> cf login
  5. カレント・ディレクトリーを $APP_ROOT ディレクトリーに変更し、アプリケーションを Bluemix にプッシュします。
    shell> cf push

    以下は、このプロセス中に表示される出力の一例です。

    Bluemix に接続してアプリケーションをデプロイする例
    Bluemix に接続してアプリケーションをデプロイする例
  6. MongoLab サービスをアプリケーションにバインドします。

    これで、アプリケーションはデプロイされましたが、アプリケーションを MongoDB データベース・インスタンスに接続しなければ、アプリケーションがデータを保管する場所がありません。

    1. Bluemix 管理ダッシュボードにアクセスして、IBM ID とパスワードを使ってログインします。「Apps (アプリケーション)」メニュー・バーに、連絡帳アプリケーションが表示されているはずです。「Apps (アプリケーション)」メニュー・バーに連絡帳アプリケーションが表示された、Bluemix 管理ダッシュボード
      「Apps (アプリケーション)」メニュー・バーに連絡帳アプリケーションが表示された、Bluemix 管理ダッシュボード
    2. アプリケーションを選択してから、「ADD A SERVICE OR API (サービスまたは API の追加)」をクリックします。「MongoLab service (MongoLab サービス)」(「Data Management (データ管理)」カテゴリーにあります) を選択して、アプリケーションに追加します。 MongoLab サービスのウィンドウのスクリーンショット
      MongoLab サービスのウィンドウのスクリーンショット
    3. アプリケーションを再ステージングするよう促されるので、再ステージングします。Bluemix 管理ダッシュボードに、アプリケーションにバインドされた MongoLab サービス・インスタンスが表示されます。アプリケーションにバインドされた MongoLab サービス・インスタンスのスクリーンショット
      アプリケーションにバインドされた MongoLab サービス・インスタンスのスクリーンショット
    4. MongoLab サービスのアイコンをクリックすると、MongoLab ダッシュボードに転送されます。そこで、MongoDB サービス・インスタンスを管理することができます。MongoDB データベースを作成する必要はないことに注意してください。サービス・インスタンスにはすでに、プロビジョニング済みのデフォルト・データベースが含まれているので、それを使用することができます。
    5. Bluemix ダッシュボードでアプリケーションの環境変数を調べると、VCAP_SERVICES 環境変数に格納されている、MongoDB データベースへの URI を確認することができます。前に説明したように、アプリケーションは自動的にこの情報を取得して使用します。環境変数の画面のスクリーンショット
      環境変数の画面のスクリーンショット
  7. Google Developers Console で、リダイレクト URI を更新します。

    最後のステップとして、Google Developers Console に再びアクセスし、認可されたリダイレクト URI のリストを更新して、Bluemix アプリケーションのホスト名を含めます。この変更を行わなければ、OAuth リダイレクトが失敗するので、ユーザーがアプリケーションにログインすることはできません。

    「Edit Client Settings (クライアント設定の編集)」ウィンドウ
    「Edit Client Settings (クライアント設定の編集)」ウィンドウ
  8. アプリケーションの使用を開始します。 アプリケーションのデプロイが完了したら、アプリケーション・マニフェストに指定したホスト (例えば、http://contacts-[乱数].mybluemix.net) にアクセスすることで、アプリケーションの使用を開始することができます。あるいは、この記事の先頭にあるリンクを使用して、アプリケーションのライブ・デモを試してみることもできます。空白のページやその他のエラーが表示されたら、このセクションの先頭にあるリンクを参照して、PHP コードをデバッグして問題の原因となっている場所を突き止めてください。

まとめ

このチュートリアルから明らかなように、Bluemix の PaaS インフラストラクチャーと MongoLab サービス、さらに Cloud Foundry PHP ビルドパックを利用すれば、PHP で駆動され、MongoDB を使用するアプリケーションをクラウド内で簡単に作成することができます。これらの主要なインラフトラクチャー・コンポーネントに Slim、HybridAuth、jQuery Mobile などのよく使われているツールやフレームワークを組み合わせると、クラウド・アプリケーションをプロトタイピング、デプロイ、スケーリングするための無敵のツールキットを手にしたことになります。

このチュートリアルの第 1 回、第 2 回で実装したコードはすべてダウンロードすることができます。ぜひともコードを入手して、いろいろといじってみてください。また、新しい機能を追加するのも一考です。何も壊れることはありませんので、よい勉強になること請け合いです。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Mobile development
ArticleID=1010471
ArticleTitle=クラウド内でスケーラブルな連絡先アプリケーションを作成してデプロイする: 第 2 回
publish-date=07162015