目次


簡単な Node.js ファイル・アップロード・アプリケーションを通じて IBM Bluemix について学ぶ

Comments

この記事では、Web アプリケーションやモバイル・アプリケーションを開発してデプロイするためのオープンな IBM クラウド・プラットフォームである、IBM Bluemix についての簡単なハンズオン・ツアーを提供します。この演習では、短いながらも凝縮されたコードを通じて、Bluemix の主要なコンポーネントを使用します。ここでは、ファイルをアップロードしてファイルの内容を MySQL データベースに挿入する Node.js アプリケーションを作成します。続いて、このアプリケーションを Bluemix でテストし、管理する方法を説明します。このアプリケーションを選択した理由としては、私たちが Node.js の大ファンであり、あらゆる機会を捉えて Node.js を学ぼうとしているということもあります。

同様のアプリケーションを作成するために必要なもの

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

ステップ 1. Bluemix 用にアプリケーションをコピーして準備する

  1. IBM jStart GitHub リポジトリーにある Node MySQL Upload アプリケーションをコピーします。
     git clone https://github.com/ibmjstart/bluemix-node-mysql-upload.git

    アプリケーションのロジックはすべて app.js に含まれています。app.js の中で使用しているものには、Web アプリケーションの開発を容易にするいくつかの便利な Node モジュール (Express Web 開発フレームワーク、そして Express のための Hogan テンプレート・エンジン)、MySQL、そしてデータベース操作やファイル操作を簡単にするファイルシステム・モジュールなどがあります。
     var http = require('http'); var path = require('path'); var express = require('express'); var hogan = require('hogan-express'); var mysql = require('mysql'); var fs = require('fs');
  2. アプリケーションに追加する必要がある特別なコードの部分を追加し、そのアプリケーションを Bluemix で実行します。アプリケーション環境から、VCAP_APP_PORTVCAP_APP_HOSTVCAP_SERVICES を取得します。

    VCAP_APP_HOSTVCAP_APP_PORT はアプリケーションに対し、Bluemix がどのポートとホストをアプリケーションに割り当てるのかを指示します。VCAP_SERVICES は、アプリケーションを Bluemix サービスにバインドすると、アプリケーションで利用できるようになる JSON オブジェクトです。資格情報のセクションはすべてのサービスに共通であり、そのサービスに接続するために必要なすべての情報を含んでいます。Bluemix MySQL サービスの場合、このセクションに含まれるのは、通常のデータベース名、ポート、ユーザー ID、パスワードです。

     var port = (process.env.VCAP_APP_PORT || 3000); var host = (process.env.VCAP_APP_HOST || 'localhost'); // all environments app = express(); // check if application is being run in cloud environment if (process.env.VCAP_SERVICES) { var services = JSON.parse(process.env.VCAP_SERVICES); // look for a service starting with 'mysql' for (var svcName in services) { if (svcName.match(/^mysql/)) { var mysqlCreds = services[svcName][0]['credentials']; var db = mysql.createConnection({ host: mysqlCreds.host, port: mysqlCreds.port, user: mysqlCreds.user, password: mysqlCreds.password, database: mysqlCreds.name }); createTable(); } } }

    3 つのルートが設定されており、そのどれもが、単純な index.html をビューとして使用します。/upload へのポスト送信は、ファイルを読み取り、そのファイルを個々の行に分割し、それらの行を MySQL に挿入します。

     // upload file app.post('/upload', function (req, res) { fs.readFile(req.files.file.path, 'utf8', function (err, data) { if (err) return res.json(err); // split file into array of non-empty Strings var posts = data.split(/\r\n?|\n/).filter(isNotEmpty); // insert posts into mysql db addPosts(posts, function (err, result) { if (err) return res.json(err); var msg = 'Added ' + result.affectedRows + ' rows.'; // display all posts getPosts(function (err, posts) { if (err) return res.json(err); res.render('index.html', {posts: posts, msg: msg}); }); }); }); });

    addPosts はデータベース (posts テーブル) への挿入を行い、getPosts はデータベースから posts テーブルのデータを返して index.html ビューで使用できるようにします。

     function addPosts(posts, cb) { var sql = 'INSERT INTO posts (text) VALUES ?'; var values = posts.map(function (post) { return [post]; }); db.query(sql, [values], function (err, result) { if (err) return cb(err); cb(null, result); }); } function getPosts(cb) { var sql = 'SELECT text FROM posts'; db.query(sql, function (err, result) { if (err) return cb(err); cb(null, result); }); }

ステップ 2. Bluemix にアプリケーションをプッシュする

  1. 皆さんのシステムで使用できる Cloud Foundry V6 コマンドライン・インターフェースがまだインストールされていない場合には、このインターフェースをインストールします。
  2. 皆さんのワークステーションで、カレント・ディレクトリーをこのアプリケーションの app ディレクトリーに変更し、Bluemix にログインします。コマンドの構文は cf login -a API_URL です。ログインは以下のようになります。
     C:\demo\bluemix-node-mysql-upload\app>cf login -a api.ng.bluemix.net

    すると、ユーザー名、パスワード、オーガニゼーション、スペースを入力するように促されます。
  3. ログインしたら、Node アプリケーションで使用する MySQL サービスを作成します。コマンドの構文は以下のとおりです。
     cf create-service SERVICE PLAN SERVICE_INSTANCE

    サービス名は mysql、プランは 100、サービス・インスタンス名は mysql-node-upload です。つまり以下のような MySQL サービスを作成します。
     C:\demo\bluemix-node-mysql-upload\app>cf create-service mysql 100 mysql-node-upload
  4. ここからが楽しい部分です。サーバーを入手し、オペーレーティング・システムや Node、npm、MySQL をロードし、コードにパッチを当て、延々と変更チケットに入力し・・・等々をするのではなく、単純にアプリケーションを Bluemix にプッシュし、面倒な部分を Bluemix に処理させます。

    このアプリケーションには、このプロセスを効率化するための manifest.yml ファイルが含まれています。このファイルは、アプリケーション名、メモリー、インスタンス数、そして使用する Bluemix MySQL サービスを設定します。作成される URL ルートがデモ URL (http://NodeMySQLUploadArticle.mybluemix.net) と競合しないように、ホスト名はデモ用のものとは異なる名前を選んでください。

     --- applications: #Reference http://docs.cloudfoundry.com/docs/using/deploying-apps/manifest.html - name: NodeMySQLUpload #Application Name. Unique to the user's Space memory: 256M #The maximum memory to allocate to each application instance instances: 1 #The number of instances of the application to start host: NodeMySQLUploadArticle #Hostname for app routing. Unique to domain ng.bluemix.net. Change. path: . #Path to the application to be pushed command: node app.js #The command to use to start the application services: - mysql-node-upload #the already created mysql service

    app.js ファイルと manifest.yml ファイルを含む app ディレクトリーから、このアプリケーションをプッシュします。
     cf push

    アプリケーションが実行状態になったら、http://my-unique-hostname.mybluemix.net にアクセスします (ここで my-unique-hostname はマニフェスト・ファイルで指定されるホストです)。テキスト・ファイルをアップロードしてみると、動作していることがわかります。
スクリーン・キャプチャーには、Bluemix 内にある MySQL Upload アプリケーションの UI が表示されています
スクリーン・キャプチャーには、Bluemix 内にある MySQL Upload アプリケーションの UI が表示されています

ステップ 3. Bluemix の UI からアプリケーションを管理する

アプリケーションが Bluemix で実行されている状態になったので、Bluemix の UI を使用してこのアプリケーションの一部を見てみましょう。Bluemix にアクセスしてログインします。すると、Bluemix のダッシュボードには、このアプリケーションの概要を示すタイルが表示されています。一目見るだけで、このアプリケーションの URL、アプリケーションにバインドされるサービス、そしてアプリケーションが正常に実行されていることがわかります。

スクリーン・キャプチャーには、Bluemix 上の MySQL Upload アプリケーションのステータスの概要が表示されています
スクリーン・キャプチャーには、Bluemix 上の MySQL Upload アプリケーションのステータスの概要が表示されています

このアプリケーションのタイルをクリックし、アプリケーションの「OVERVIEW (概要)」ページにアクセスすると、このアプリケーションについてさらに詳しく調べることができます。

スクリーン・キャプチャーには、Bluemix 上の MySQL Upload アプリケーションの「OVERVIEW (概要)」ページにアクセスするための項目が表示されています
  • 「RUNTIME (ランタイム)」ページにアクセスすると、アプリケーションのインスタンスやメモリーを調整することや、アプリケーション全体の正常性を表示することができます。
  • 「FILES + LOGS (ファイルとログ)」ページを調べてみると、そこではデプロイされたアプリケーションのコードを確認することができ、ステージング・ログ、標準出力ログ、標準エラー・ログを見ることもできます。
  • また、アプリケーションのリネーム、アプリケーションの URL の変更、アプリケーションの停止、起動、削除を行うこともできます。

まとめ

この記事はこれで終わりです。この短い記事では、Bluemix の中でアプリケーションを作成、デプロイ、実行、管理しました。ここからさらに Bluemix の探求を続けてください。


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


関連トピック


コメント

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Web development
ArticleID=967283
ArticleTitle=簡単な Node.js ファイル・アップロード・アプリケーションを通じて IBM Bluemix について学ぶ
publish-date=08282014