now.shでnode.jsサーバーを立ち上げる
公開日: 2019.6.22
サーバーレスなPassサービス「now.sh」で、静的ページではなく動的なレスポンスを返せるnode.jsサーバーを立ち上げてみます。
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の読み込みなどもできるので、広い範囲のプロジェクトで使えそうです。
価格は記載がある場合を除き、すべて税込みです。
関連キーワード
サーバレスの新着記事
- サーバレスCloudflare R2の料金体系・無料枠まとめ 2024.8.21
- サーバレスCloudflare R2をCyberduckで使う方法 2024.7.31
- サーバレスAIの学習ボット・クローラーからサイトを守るメリットとブロックする方法 2024.7.19
- サーバレスCloudFlare Pagesのビルド環境の違い 2024.5.9
- サーバレスCloudflare D1の料金体系・無料枠まとめ 2024.3.25
- サーバレスCloudflare PagesでNuxt3のビルド時に「ENOENT: no such file or directory」エラーの対象方法 2024.3.21
- サーバレスGitlab CLIでpush時に「glab auth not found」となった際の対処方法 2024.3.19
- サーバレスCloudFlare Workers AIの料金体系・無料枠まとめ 2024.2.2