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

2014年 8月 28日
PDF (297 KB)
 

An introduction to the application lifecycle on IBM Bluemix

06:52

Jay Allen

Software Developer, Software Group, Strategy, jStart Emerging Technologies

@jayallenmn

Jon Johnson

Computer Science Major

IBM Bluemix™ にサインアップ
無償のサービス、ランタイム、インフラを含むクラウド・プラットフォームが、新たなモバイルやウェブ・アプリのクイックな構築とデプロイを実現します。

この記事では、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 が表示されています

クリックして大きなイメージを見る

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

 

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

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

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

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

まとめ

 

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


関連トピック:Node.jsBluemixMySQL

コメントの追加

注意: HTML コードは、コメント内ではサポートされません。


残り 1000 文字

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=Cloud computing, Web development
ArticleID=967283
ArticleTitle=簡単な Node.js ファイル・アップロード・アプリケーションを通じて IBM Bluemix について学ぶ
publish-date=08282014