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...
- nodejsの場合は
- 使用するビルダーを指定します。
- src
- routes
- src
- エンドポイントを指定します
- (.*) は、すべてのアクセスを
dest
に送ります。
- (.*) は、すべてのアクセスを
- エンドポイントを指定します
- dest
- アクセスを受けるファイルを指定します
- methods
- 受け付けるメソッドを定義します。
["GET", "POST"]
の場合PUT
などは拒否します。
- 受け付けるメソッドを定義します。
- src
builds.use
, routes.src, routes.dest
はご自分の環境に合わせて設定してください。
おわりに
Nuxt.js
, Create-react-app
, Vue.js
などのフレームワークはNow向けに最適化されており、now
だけでデプロイすることができるみたいです!
また、GitHub Integration も用意されており継続的デリバリーを簡単に実現することもできます。
そんなに大きくないプロジェクトでも、導入する価値はあるプロダクトです。 是非試してみてください!