JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

Node.jsのassertモジュール徹底解説!アサーションの基本と実践的な使い方

Node.jsのassertモジュールは、関数のアサーション(表明)に使用できる多彩な機能を提供するモジュールです。このモジュールが提供する関数群は、プログラムにおける不変条件(invariant)の検証を目的としています。

アサーションは、nullチェックをはじめ、さまざまな条件チェックに活用できます。重要なポイントとして、アサーションは実行中の処理そのものには一切影響を与えません。単純に指定された条件を評価し、その条件が満たされなかった場合にのみエラー(AssertionError)をスローします。

assertモジュールのインストール

npm install assert

ただし、assertモジュールはNode.jsに標準で組み込まれているモジュールのため、実際には上記のインストール作業をスキップしても問題ありません。

モジュールを読み込む方法

プログラム内でassertモジュールを使用するには、以下のようにrequire()を使って読み込みます。

const assert = require("assert");

基本例:条件を満たさない場合

まずは、最もシンプルな使い方を見てみましょう。変数xとyを比較し、条件が偽(falsy)になった場合にどのような挙動になるか確認します。

const assert = require('assert');

let x = 3;
let y = 21;

// x > y は false なのでエラーがスローされる
assert(x > y);

実行結果

C:\home\node>> node assert.js
assert.js:339
    throw err;
    ^
AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
    assert(x>y)
      at Object. (/home/node/mysql-test/assert.js:6:1)
      at Module._compile (internal/modules/cjs/loader.js:778:30)
      at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
      at Module.load (internal/modules/cjs/loader.js:653:32)
      at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
      at Function.Module._load (internal/modules/cjs/loader.js:585:3)
      at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
      at startup (internal/bootstrap/node.js:283:19)
      at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)

x = 3、y = 21であるため、「x > y」はfalseと評価されます。すると、assertモジュールはAssertionErrorをスローし、プログラムが異常終了します。

この例ではエラーハンドリングを何も行っていないため、システム側が自動的にエラーを処理し、スタックトレースを含む詳細なログが出力されています。

応用例:try-catchでエラーをハンドリングする

次に、try-catchブロックを使ってエラーを自分で捕捉する方法を紹介します。これにより、プログラムを異常終了させることなく、任意のメッセージを出力できます。

const assert = require('assert');

let x = 3;
let y = 21;

try {
  // 条件のチェック...
  assert(x == y);
}
catch {
  // エラーが発生した場合にメッセージを出力
  console.log(
    `${x} is not equal to ${y}`);
}

実行結果

C:\home\node>> node assert.js
3 is not equal to 21

今回は「x == y」がfalseとなりAssertionErrorがスローされますが、catchブロックがそのエラーを受け止めるため、プログラムはクラッシュせずに「3 is not equal to 21」というメッセージだけを出力して正常に終了します。

まとめ

  • assertモジュールはNode.jsの標準モジュールなので、追加インストールは不要
  • 条件が偽と評価された場合にAssertionErrorをスローする
  • try-catchと組み合わせれば、エラー発生時の挙動を柔軟に制御できる

アサーションはテストコードやデバッグ時に非常に便利な機能です。ぜひ日々の開発に取り入れてみてください。

  1. JavaScriptで実装するプリム法:最小全域木を求めるアルゴリズムの基本と実装例

    プリム法(Prims Algorithm)とはプリム法は、重み付き無向グラフから最小全域木(MST: Minimum Spanning Tree)を求めるための貪欲法(グリーディアルゴリズム)です。グラフ内のすべての頂点を含み、かつ辺の重みの合計が最小になるような辺の部分集合(木)を見つけ出します。アルゴリズムは、任意の開始頂点から木の構築を始め、1ステップごとに「木に属する頂点」と「木に属さない頂点」をつなぐ辺の中から、最もコスト(重み)の小さいものを1本追加していくことで動作します。プリム法の動作の流れ以下の図を使って、プリム法がどのように動作するのかを順番に見ていきましょう。ステップ1:

  2. Node.jsアプリにexpress-rate-limitを導入してレート制限(Rate Limiting)を実装する方法

    近年、WebサイトをDoS攻撃やDDoS攻撃から守るために、レート制限(Rate Limiting)の重要性がますます高まっています。レート制限とは、特定のIPアドレスからのリクエスト回数に上限を設けることで、不正なリクエストやブルートフォース攻撃などの悪意あるアクセスからシステムを保護する仕組みです。Node.jsのWebフレームワーク「Express」では、npmパッケージのexpress-rate-limitを使うことで、ユーザーごとのリクエスト数を簡単に制限できます。本記事では、その導入手順と基本的な使い方を解説します。express-rate-limitモジュールのインストールまず、