Node.jsの便利な小ネタ
Node.jsは、サーバーサイドでのJavaScript実行に特化したプラットフォームとして、Webサービス開発に広く利用されています。本記事では、Node.jsでよく使われる機能やノウハウを踏まえつつ、便利な小ネタについて紹介します。
1. REPLを使ったデバッグ
Node.jsにはREPL(Read Eval Print Loop)と呼ばれる対話型のコンソールが備わっており、簡単なコードや式の試行錯誤やデバッグに役立ちます。実行中のアプリケーションの状況を調べたい場合や、ライブラリの動作確認にも利用できます。
REPLを起動するには、node
コマンドを実行するだけです。
$ node
>
ここで、JavaScriptのコードを直接入力することができます。例えば以下のようにしてJavaScriptのオブジェクトや関数を定義してみましょう。
> var a = { x: 1, y: 2 };
undefined
> a.x + a.y
3
> function add(a, b) { return a + b };
undefined
> add(1, 2)
3
REPLは、デバッグの他にも、簡単な処理や試験的な実行に使用すると便利です。
2. console.assertによるアサーション
Node.jsには、console
オブジェクトを利用して様々な情報を出力できます。中でも、console.assert()
は、条件をチェックするアサーションに役立ちます。
console.assert(value, message);
value
が偽である場合に、指定されたmessage
を出力します。例えば以下のように使用します。
var a = 1;
console.assert(1 === a, 'a must be 1');
上記例では、a
が1であることをアサートしています。a
が1でない場合は、'a must be 1'
というエラーメッセージが表示されます。
アサートは、デバッグ時に正しい値を保証するのに役立ちます。また、テストコードにも利用されます。
3. npmを使ったパッケージ管理
Node.jsの便利な小ネタと言えば、npm(Node Package Manager)を使ったパッケージ管理です。npmは、Node.jsで使うモジュールやライブラリを、簡単にダウンロードしてインストールできるツールです。
npmが使えるようになると、例えば以下のようにして、ExpressというWebアプリケーションフレームワークをインストールできます。
$ npm install express
インストール後は、require()
を使って、インストールしたパッケージを使用できます。
var express = require('express');
var app = express();
npmには、数多くのパッケージが公開されており、開発者にとっては非常に便利なツールです。開発を始める前に、必要なパッケージがnpmで公開されているか確認してみましょう。
4. 設定ファイルの外部化
Node.jsアプリケーションでは、設定情報を扱う必要があります。たとえば、データベース接続情報やログ出力先などが該当します。これらの情報をコードに直接記述すると、修正や管理が煩雑になります。
そこで、Node.jsアプリケーションでは、設定情報を外部のファイルに記述しておくことが一般的です。設定ファイルは、JSONやYAMLなど、JavaScriptと似たようなフォーマットの形式で記述します。
以下のように、設定情報をconfig.jsonファイルに外部化することができます。
{
"db": {
"host": "localhost",
"user": "myuser",
"pass": "mypassword"
},
"log": {
"level": "debug",
"file": "/var/log/myapp.log"
}
}
この設定情報をアプリケーション内で利用するには、以下のようにファイルを読み込みます。
var config = require('./config.json');
var dbHost = config.db.host;
var dbUser = config.db.user;
var dbPass = config.db.pass;
設定ファイルを外部化することで、アプリケーションの管理が容易になります。また、アプリケーションのデプロイ時などに、設定ファイルを差し替えることにより、アプリケーションを容易に再構成することができます。
5. async/awaitによる非同期処理
Node.jsでは、非同期処理が一般的になっています。非同期処理は、Node.jsの特徴であるイベント駆動の実装に依存しています。非同期スタイルで開発すると、I/Oの待ち時間中に他の処理を実行できるため、高いスループットを実現できます。
しかし、非同期処理はコールバック地獄と呼ばれるように、コールバック関数をネストして記述すると可読性が低くなるなど、開発者にとってデメリットもあります。
そこで、ES2017から導入されたasync
/await
構文を利用すれば、非同期処理をシンプルに記述することができます。async
キーワードを関数に付加することで非同期処理を宣言し、その中でawait
キーワードを付加した関数を呼び出すことができます。
以下は、async
/await
構文を使用して、HTTPリクエストを非同期に実行する例です。
async function getPage() {
const axios = require('axios');
const res = await axios.get('https://google.com');
console.log(res.data);
}
getPage();
axios.get()
は非同期でHTTPリクエストを実行し、その結果を取得します。await
キーワードは、非同期処理が完了するまでスレッドをブロックし、res
に結果を代入します。これにより、非同期処理を同期処理のように扱うことができます。
Node.jsにおいて、非同期処理は非常に重要な機能です。async
/await
構文は実装が簡単であり、可読性に優れるため、積極的に活用していきましょう。
まとめ
本記事では、Node.jsでよく使われる機能やノウハウを踏まえつつ、便利な小ネタについて紹介しました。REPLやconsole.assert、npmを使ったパッケージ管理、設定ファイルの外部化、async
/await
構文など、開発者にとって有用な情報が含まれています。これらの情報を活用して、より高品質なNode.jsアプリケーションを開発していきましょう。