Ndde.jsの構文まとめ|中級者向け

Node.jsは、JavaScriptの実行環境として、Webアプリケーションの開発に欠かせない存在となっています。

今回は、Node.jsの構文についてまとめてみました。

Node.jsの基礎を既に知っている人向けの内容になっています。

1. コールバック関数


Node.jsで非同期処理を実現するために、コールバック関数がよく使われます。

コールバック関数とは、関数の引数として渡され、処理が完了した後に呼び出される関数のことです。

以下は、Node.jsでのファイルの読み込みにおいて、コールバック関数を使った例です。

const fs = require('fs');

fs.readFile('/path/to/file', (err, data) => {
  if (err) throw err;
  console.log(data);
});

コールバック関数の第1引数には、エラーがあった場合にその情報が渡されます。

第2引数には、処理結果のデータが渡されます。

このように、コールバック関数を使うことで、非同期処理の結果を取得することができます。

2. プロミス


コールバック関数を使うことで非同期処理を実現できますが、ネストが深くなったり、エラーハンドリングが複雑になったりすることがあります。

そこで、ES6から導入されたプロミスを使うことができます。


プロミスは、非同期処理の結果を表すオブジェクトであり、処理が成功した場合と失敗した場合の2つの状態を持ちます。

以下は、Node.jsでのファイルの読み込みにおいて、プロミスを使った例です。

const fs = require('fs').promises;

fs.readFile('/path/to/file')
  .then((data) => {
    console.log(data);
  })
  .catch((err) => {
    console.error(err);
  });

プロミスを使うことで、コールバック関数よりも読みやすいコードを書くことができます。

また、catchメソッドを使うことで、エラーハンドリングも簡単になります。

3. アロー関数


アロー関数は、ES6で導入された新しい関数の書き方です。

通常の関数と比べて、書き方が簡潔であり、thisの挙動が異なる点が特徴です。

以下は、アロー関数を使った例です。

const add = (x, y) => {
  return x + y;
};

const result = add(3, 5);
console.log(result); // 8

アロー関数では、関数名の前に引数を指定し、=>の後に関数の処理を記述します。

また、関数が1行の場合は、中括弧とreturnを省略することができます。

const add = (x, y) => x + y;

const result = add(3, 5);
console.log(result); // 8

アロー関数は、thisの挙動が通常の関数と異なります。

通常の関数では、thisは関数が呼び出されたコンテキストによって変わりますが、アロー関数では、thisは宣言された時のコンテキストを維持します。

4. テンプレートリテラル


テンプレートリテラルは、ES6で導入された文字列の書き方です。

通常の文字列と比べて、変数の埋め込みや改行などが簡単に書ける点が特徴です。

以下は、テンプレートリテラルを使った例です。

const name = 'John';
const message = `Hello, ${name}!
How are you today?`;

console.log(message);

テンプレートリテラルでは、バッククォートで文字列を囲み、${}で変数を埋め込むことができます。

また、改行をそのまま表現することもできます。

5. ジェネレータ関数


ジェネレータ関数は、ES6で導入された新しい関数の書き方です。

ジェネレータ関数は、処理を途中で停止し、再開することができる関数です。

以下は、ジェネレータ関数を使った例です。

function* fibonacci() {
  let a = 0, b = 1;
  while (true) {
    yield a;
    [a, b] = [b, a + b];
  }
}

const generator = fibonacci();
for (let i = 0; i < 10; i++) {
  console.log(generator.next().value);
}

ジェネレータ関数では、function*というキーワードを使って関数を宣言し、`yield文で処理を停止し、next()メソッドで再開します。

上記の例では、フィボナッチ数列を生成するジェネレータ関数を定義し、next()`メソッドを使って10個の数列を出力しています。

6. async/await


async/awaitは、ES2017で導入された新しい非同期処理の書き方です。

従来のコールバック関数やPromiseよりも、直感的かつ読みやすいコードを書くことができます。

以下は、async/awaitを使った例です。

async function fetchUserData(userId) {
  const response = await fetch(`https://api.example.com/users/${userId}`);
  const data = await response.json();
  return data;
}

fetchUserData('123')
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error(error);
  });

async関数は、関数の前にasyncキーワードをつけて宣言します。

関数内でawaitキーワードを使うことで、非同期処理の完了を待ち、結果を取得することができます。


上記の例では、fetchメソッドでAPIからデータを取得し、awaitキーワードで非同期処理の完了を待ちます。

その後、取得したデータをreturnしています。


async/awaitは、Promiseをより直感的に書くことができるため、コードの可読性が向上するというメリットがあります。

7. まとめ


Node.jsは、JavaScriptを使ってサーバーサイドのアプリケーションを開発するためのプラットフォームです。

Node.jsは、JavaScriptの豊富なライブラリを利用できるため、開発効率が高く、高速なアプリケーションを構築することができます。


本記事では、Node.jsでよく使われる構文を紹介しました。

ES6で導入された構文を中心に解説しましたが、これらの構文を使うことで、コードの可読性が向上し、開発効率が高まるというメリットがあります。

Node.jsを使った開発において、これらの構文を積極的に使っていきましょう。