Node.jsでマイクロサービス [Micro]


対象読者

Node.jsを知っている
JavaScriptを知っている
Npmを知っている
新しいものが好き
が当てはまる人

Micro

Micro — Asynchronous HTTP microservices

その名の通り小さく軽量なモジュールを作るために存在しており、その容量は0.37mbほど。
Async Await を使って作ることを前提に Micro は設計されているので Async Await を知らない方は、そちらから始めることをお勧めします。

インストール

本番環境用: micro
開発環境用: micro-dev
のように使い分けができることがmicroの特徴で、devは

  • 自動ポート選択
  • クリップボードへのコピー
  • きれいなログメッセージ
  • ホットリロード

などの便利な機能がついてきます。

今回は dev をインストールします

npm install --save-dev micro-dev

package.json に micro-dev 用のscriptを追加

package.json
"scripts": {
  "dev": "micro-dev"
}

一行でサーバを立てる

まず index.jsファイル を作成してください。その中に

index.js
module.exports = () => 'Welcome to Micro'

と一行書くだけです。

先ほど設定した dev スクリプトを叩く。

npm run dev

Welcome to Micro が表示されるはずです。
戻り値を処理するのでこのような書き方ができちゃいます。簡単ですね。
Microはデフォルトでポート3000番ですが、すでに使用されている場合、空いているポートを自動選択してくれます。
なんとその時 http://localhost:58903 の形でクリップボードにコピーもしてくれます。
痒いところにも手が届いていいですね。

request と response を扱う

request と response を処理したい場合は次のようにします。

index.js
module.exports = (req, res) => {
  res.end('Welcome to Micro')
}

こちらも簡単。

Async Await を扱う

index.js
const sleep = require('then-sleep')

module.exports = async (req, res) => {
  await sleep(500)
  return 'Ready!'
}

Node.js で Async Await が提供されていないバージョンを使用している場合、async-to-gen を使ってトランスパイルすることを公式は推奨しています。

request を parse する

micro は request を json や buffer , text に parse する api を提供しています。

index.js
const {buffer, text, json} = require('micro')

module.exports = async (req, res) => {
  const buf = await buffer(req)
  const txt = await text(req)
  const js = await json(req)
  console.log(buf)
  console.log(txt)
  console.log(js)
  return ''
}

適当なリクエストを送ってみてください。
写真のような形で綺麗にログが出ます。

あとがき

適当に機能をチョイスして紹介しましたが、詳細はこちらをどうぞ。
testやエラーハンドリングのことも載ってます。サンプルもあります。
公式ページ
Github