作成日: 2023/04/30
0

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アプリケーションを開発していきましょう。

参考文献


フルスタックエンジニア。徒然なるままに記事を投稿していきます。日々学習。