サーバレスのサムネイル

サーバレス

now.shでnode.jsサーバーを立ち上げる

公開日: 2019.6.22

サーバーレスなPassサービス「now.sh」で、静的ページではなく動的なレスポンスを返せるnode.jsサーバーを立ち上げてみます。

編集ノート:SERVERSUSでは、パートナーリンクからコミッションを得ています。コミッションが記事の意見や、サービスの評価に影響を与えることはありません。

now.shで使えるビルダーを確認する

now.shで使えるビルダーは下記の通りになっています。

  • Static (@now/static)
  • Static Builder (@now/static-build)
  • Node.js (@now/node)
  • Node.js Server (@now/node-server)
  • Next.js (@now/next)
  • Go (@now/go)
  • PHP (@now/php)
  • Python (@now/python)
  • Rust (@now/rust)
  • Bash (@now/bash)
  • mdx-deck (@now/mdx-deck)
  • OptiPNG (@now/optipng)
  • HTML Minifier (@now/html-minifier)
  • Markdown (@now/md)

node.jsサーバーも対象になっていますね。「@now/node-server」という値は後ほど使います。

動的なレスポンスという意味では、PHPやNext.jsなども使えます。

node.jsサーバーを構築する

では、実際にnow.shでnode.jsサーバーを立ち上げてみたいと思います。今回は、簡単にサーバーが建てられるexpressを使いたいと思います。

なお、ローカル環境にnode.jsとnpmがインストールされている前提進めていきます。

ローカル環境でプロジェクトを作る

まずは、ディレクトリを作ってgitレポジトリを作成しておきます。

mkdir node-server-now
cd node-server-now
git init

npmでプロジェクトを立ち上げたい場合は、

npm init

をしておいてください。

expressをインストール

プロジェクトにexpressをインストールします。

npm install express --save

package.jsonのサンプル

{
  "name": "node-js-server",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "express": "^4.16.4",
    "express-cache-controller": "^1.1.0",
  },
  "scripts": {
    "start": "node ."
  }
}

これでexpressが使えるようになりました。

node_modulesディレクトリを除外する

node_modulesをレポジトリやnow.shで管理外にするために、2つのファイルを用意します。

.nowignore

node_modules

.gitignore

node_modules

これで、重たいnode_modulesは、先程の「package.json」をもとに、ローカルとnow.shの本番環境それぞれで管理されるようになります。

簡単なプログラムを書く

今回はnode.jsサーバーを建てるのがゴールなので、簡単なアプリを書きます。

index.js

const express = require('express');
const app = express();

// server
const port = process.env.PORT || 3000
app.listen(port, err => {
    if (err) throw err
    console.log(`> Ready On Server http://localhost:${port}`)
});

// router
app.get('/', function(req, res, next) {
  return res.send('TOPページです')
});
app.get('/about', function(req, res, next) {
  return res.send('このサイトについて')
});
app.get('/privacy', function(req, res, next) {
  return res.send('プライバシーポリシー')
});

それぞれの意味は、Expressの部分になるので、別の機会に記事にしたいと思います。

これで、プログラム自体は準備完了です。

ローカルでテスト

ローカル環境でテストする場合は、

node .

でサーバーが立ち上がりますので、動作を確認してみてください。

now.jsonを用意する

続いて、now.sh上での動作を設定するために、now専用の設定ファイルである「now.json」ファイルを用意します。

基本的には、公式のサンプル通りなのですが、すべてのアクセスをindex.jsに集約する必要があるので、routesを追加しています.

now.jsonのサンプル

{
  "version":2,
  "name":"node-js-server",
  "builds":[
    {
      "src":"index.js",
      "use":"@now/node-server"
    }
  ],
  "routes":[
    {
      "src":"/.*",
      "dest":"/index.js"
    }
  ]      
}

これでローカル側の準備が終わりました。

now.shにデプロイする

最後に、now.shにデプロイしておしまいです。

ローカル開発環境にNow CLIがインストールされていれば、

now

でデプロイ完了です。

Nowの使用環境の構築については、こちらの記事をどうぞ。

本番で確認する

now.shにデプロイが済むと、自動でURLが発行されるので、管理画面からURLを確認してアクセスしてみます。

きちんと表示されればOKです。


簡単にですが、now.shでnode.jsサーバーを立ち上げてみました。外部DBの読み込みなどもできるので、広い範囲のプロジェクトで使えそうです。


価格は記載がある場合を除き、すべて税込みです。

関連キーワード

サーバレスの新着記事