Node.js
Paas
NOW

Now でクラウドの複雑さから解放されよう、今すぐに

次々に登場するクラウドの新サービスに疲れを感じていたら、これを試してください。

Now は新しいスタイルの PaaS です。
AWS や GAE とは比較にならないくらいシンプルで高速なデプロイができます。

TL;DR

Now が他とどう違うのかというより、どのように動作するかを書いたほうが分かりやすいでしょう。

Now のデプロイは以下の手順で行います。

  • npm の package.json のなかで start スクリプトを定義する
  • now を実行する
  • 認証用のメールが届いたらリンクを開く

これだけです。

ソースが自動的にデプロイされ、start が実行されます。*.now.sh という形式のドメインが自動的に割り当てられて、瞬時に HTTPS で見られるようになります。独自ドメインを取得していれば、それを使うこともできます。

インスタンスの設定もありませんし、言語の指定もありません。スケーリングの設定で悩むこともありません。

試してみる

シンプルに Express で index.html を表示するだけのアプリケーションを考えます。

今回作成したプロジェクトは GitHub で公開しています。

インストール

まずは now をグローバルインストールします。

npm install -g now

package.json

npm start で Express サーバーを起動するため、"scripts" に以下のように追記します。

"scripts": {
  "start": "node index.js"
}

また、今回は Express もインストールしておきます。

npm install --save express

package.json の "dependencies" のなかに Express が追加されます。

index.js

サーバーです。

var express = require( 'express' )
var app = express()
var path = require( 'path' )

app.get( '/*', function( req, res ) {
    res.sendFile( path.join( __dirname + '/index.html' ) )
} )

app.listen()

今回は、すべてのパスへのアクセスで index.html をレスポンスするようにしました。SPA での開発だととにかく index.html を返したいというニーズはあるかと思います。

listen でポート番号を空にしていますが、Now ではポート番号の指定は問われません。ローカルでも動かすなら適宜ポート番号を指定してください。Now には影響しません。

index.html

なんということのない普通の HTML です。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <h1>Welcome</h1>
    </body>
</html>

これですべての準備が整いました。

デプロイ

あとはたった 3 文字、このコマンドを実行するだけです。

now

はじめて実行する端末では、対話的にメールアドレスの入力が求められるのでそこでメールアドレスを入力します。

メールが届いたら、その中に含まれるリンクを開くことで自動的に認証ファイルが作成されます。( ~/.now が追加されているはずです )

capture__now.png

認証済みの状態になったので、もう一度 now を実行します。自動的にデプロイが進行します。

capture__now--deploy.png

これだけで https://try-now-soopdcgcrf.now.sh として公開ができました。

同時に Now のアカウント登録も済んでいます。Now の Login にアクセスして、先ほど入力したメールアドレスを使ってログインすることができます。さらに関心するのは、パスワードの登録を求めないところです。認証は常にメールを使って行われます。

プロダクションとステージング

now を使って生成した URL は永続化されますが、デプロイのたびに一意なものを生成します。

しかしプロダクション環境として使う場合には URL を固定したほうが好都合です。

now.json 1 を追加してエイリアスを設定することで対応できます。

now.json
{
    "alias": "try-now"
}

エイリアスを使ってデプロイする場合も、実行すべきコマンドはこれだけです。

now alias

これだけで https://try-now.now.sh としてデプロイできます。

ドメインを取得している場合にはそれも使えます。なんと SSL も追加費用なしで自動的に対応できます。

now alias try-now.now.sh xxx.com

カスタムドメインを使う場合は こちらこちら のドキュメントを参考にしてください。

普段は now でデプロイしてステージングに利用しながら、プロダクションのときは now alias でデプロイするだけで URL を固定させることができます。

now.json の設定項目は こちら にまとめられているので参考にしてください。

チーム開発

メール認証でのデプロイだとチーム開発が不安かもしれません。AWS の IAM のような権限管理は Now にはありません。代わりに、権限別のメーリングリストを用意すればいいと思います。シンプルです。

Now

あまりに気軽に利用できてしまいますが、プラットフォームとして最小限必要な機能を提供しています。プロダクションとしても十分に活用できるでしょう。

Now に合わせてプロジェクトを開発する必要がないことも魅力です。Node.js 標準である npm start を実行する環境というだけですので、ベンダーロックインとは無縁です。

ちなみに課金形態はフリーのほか、月額 $14.99 のプランとエンタープライズプランがあります。

月あたりの転送量など細かく制限がありますが、フリーでも月 1GB まで転送可能です。

スケーリングについては「ユニークなアプローチをとっている」という記述しか見当たりませんでした。このへんは大規模なサービスを運用する場合は事前に負荷試験など行うとよいかもしれません。そもそもエンタープライズ契約すればある程度のサポートがありそうではありますが。

しかし、この究極とすら言えるほどシンプルな点は魅力です。デプロイまで含めて本当にストレスがなく、アプリケーションの開発に集中することができます。

私は既存のプロジェクトの置き換えを検討し始めています。


  1. package.json に記述することもできますが、環境に依存する項目はなるべく区別して管理したほうがいいと思います。