基礎から学ぶNode.js

第5回 Node.jsアプリケーションをHerokuで動かす

この記事を読むのに必要な時間:およそ 2 分

はじめに

前回までで,Node.jsによる簡単なWebアプリケーションが一通り完成しました。今回はこの構築したアプリケーションを,クラウドベースのアプリケーションホスティングサービスであるHeroku上で,動かしてみたいと思います。HerokuはNode.js以外にもJava, Ruby, Pythonなどのアプリケーションをデプロイすることができます。

Herokuのセットアップ

まず,Herokuのサイトから,⁠Sign up」ボタンよりアカウントを登録してください。

図1 Herokuのサイト

図1 Herokuのサイト

さらに,heroku toolbeltというHeroku用コマンドラインツールや開発およびデプロイに使うアプリケーション一式が提供されています。こちらを各々の環境に合わせてインストールします。

インストールが終わったら,コマンドラインからherokuに対する認証処理を行っておきましょう。

$ heroku login
Enter your Heroku credentials.
Email: <サインアップ時のメールアドレス>
Password: <サインアップ時のパスワード>

この一連の処理で,herokuにアクセスするためのSSH公開鍵の設定まで行われます。

MongoDB用サービスMongoHQを利用

Herokuは様々PasSサービスをアドオンとして利用できます。Herokuが標準で提供するデータベースはPostgreSQLですが,MongoDBもそのアドオンサービスを利用して使うことができます。執筆時点で提供されているMongoDBのサービスは,MongoHQとMongoLabになります。今回はMongoHQを使ってみます。

図2 HerokuのAdd-on サービス(一部)

図2 HerokuのAdd-on サービス(一部)

アドオンの追加は,コマンドベースでもブラウザからでも行えます。ただ,無料サービスのみの利用であってもクレジットカード情報の登録が必須となっています。ブラウザから「My Account」ページにアクセスして,⁠Billing Info」の [Verify] ボタンから情報を入力しておきます。

MongoDBは前回の記事でも触れましたが,データベースやコレクションを必要になった時点で自動作成するため,一般的なDBMSのように予めスキーマ作成などの準備が要りません。そのため非常に簡単に利用することができます。

Heroku+MongoHQ用の修正

前回までに作成したアプリfirstappをHerokuにデプロイするために若干修正を加えます。

まずMongoHQの接続先は,Herokuの実行環境で提供される環境変数MONGOHQ_URLから設定します。そのためmodel.jsの先頭を下記のとおり修正します。

const MONGO_URL = process.env.MONGOHQ_URL;

var mongoose = require('mongoose');
var db = mongoose.connect(MONGO_URL);

…以下省略…

ちなみにMongoLabの場合は接続先URLをprocess.env.MONGOLAB_URIで取得できます。

続いて,Node.jsで起動するHTTPサーバのポートを修正します。3000番で固定していましたが,こちらも環境変数PORTの値を指定する必要があります。app.jsを下記のとおり修正します。

…以上省略…

var port = process.env.PORT || 3000;
app.listen(port, function(){
  console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
});

さらに使用するNode.jsやnpmのバージョンをpackage.jsonを使って指定します。expressによるcreate時にテンプレートからpackage.jsonは作成されており,依存モジュールの設定は入っています。

{
    "name": "firstapp"
  , "version": "0.0.1"
  , "private": false
  , "dependencies": {
      "express": "2.5.11"
    , "ejs": ">= 0.0.1"
  }
  , "engines": {
      "node": "0.8.x"
    , "npm": "1.1.x"
  }
}

Herokuではアプリケーションプロセスの管理をForemanによって行います。そのためにアプリケーションの起動に関して,Procfileというファイルに定義します。

web: node app.js

上記の内容で,アプリのルートディレクトリの直下にProcfileを作成します。

著者プロフィール

高橋俊光(たかはしとしみつ)

ティルフィン合同会社 代表。

メーカー企業でパッケージソフト開発などに携わった後,ティルフィン合同会社を設立しフリーエンジニアとして,RIAやスマートモバイルアプリとサーバーサイドと広い分野で開発に従事。iOSアプリ トレンドトピック,Newstrushをリリースしている。

コメント

コメントの記入