Now でやってみるWebサーバーのつくりかた

Now でやってみるWebサーバーのつくりかた

はじめに

この記事は以前行われた部内LT会(#ToyoTech_LT)でやったLTを記事にしたものです。

また、この記事は豊田高専コンピュータ部アドベントカレンダー 5日目の記事です

Now とは

手軽にWebサーバのデプロイが行えるPaaSです。

なんと、now とコマンドを打つだけでデプロイすることができます:tada:

よいところ

  • now だけで deploy できる
  • HTTP, HTTPS 接続ができるURLが割り当てられる
  • 設定すればURLを固定することができる

やりかた

今回使用するファイル

now-express/
├── index.js
├── now.json
├── package-lock.json
└── package.json

index.js

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

const port = 8080;

// Listen
app.listen(port, () => {
  console.log(`Server is running on port ${port}
Visit http://localhost:${port}`);
});

app.get("/", (req, res) => {
  res.send("Hello, World!\n");
});

package.json

{
  "name": "now-express",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1"
  }
}

now.json

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

動作確認

$ node index.js
Server is running on port 8080
Visit http://localhost:8080

$ curl localhost:8080
Hello, World!

/にアクセスすると、Hello, World!が帰ってくるだけのシンプルなWebサーバーです。

これを世界に公開してみます!!!

now

npm を使ってインストールします。yarn派の方はそちらでOKです

$ npm install -g now

とりあえずnowとうつと、ログインを求められるのでログインしましょう。

$ now 
> Error! The content of "~/Library/Application Support/now/auth.json" is invalid. No `token` property found inside. Run `now login` to authorize.
$ now login
> We sent an email to {{ EMAIL }}. Please follow the steps provided
  inside it and make sure the security code matches {{ SECURITY CODE }}.
✔ Email confirmed
> Congratulations! You are now logged in. In order to deploy something, run `now`.

ログインすると、メールアドレスを入力することでリンク付きのメールが送られてきます。 そのリンクを踏むだけでログインができます:tada:

デプロイ

デプロイしてみましょう。

$ now
Deploying ~/Workspace/tmp/now-express under onsd
Using project now-express
Synced 1 file 
https://now-express-n8cu7hfu1.now.sh
Ready! Deployed to https://now-express.onsd.now.sh

https://now-express.onsd.now.sh にデプロイされました:tada: このように、とても簡単にデプロイすることができます。

ちょっとつまずく点

デプロイには、now.jsonが必要です。 now.json

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

一つづつ説明します。

  • builds
    • src
    • use
      • 使用するビルダーを指定します。
        • nodejsの場合は@now/node-server
        • goの場合は@now/go
          • etc...
  • routes
    • src
      • エンドポイントを指定します
        • (.*) は、すべてのアクセスをdestに送ります。
    • dest
      • アクセスを受けるファイルを指定します
    • methods
      • 受け付けるメソッドを定義します。
        • ["GET", "POST"]の場合PUTなどは拒否します。

builds.use, routes.src, routes.destはご自分の環境に合わせて設定してください。

おわりに

Nuxt.js, Create-react-app, Vue.jsなどのフレームワークNow向けに最適化されており、nowだけでデプロイすることができるみたいです! また、GitHub Integration も用意されており継続的デリバリーを簡単に実現することもできます。

そんなに大きくないプロジェクトでも、導入する価値はあるプロダクトです。 是非試してみてください!