JavaScriptの使い方 – Node.js編

暁斎百鬼画談 コンピュータ
出典:国立国会図書館「NDLイメージバンク」(https://ndlsearch.ndl.go.jp/imagebank)

JavaScriptの学習の一環で、node.jsを使いコンソールで動くスクリプト言語としての使い方を学びたいと思います。

はじめに

かつてJavaScriptは、Webブラウザ上でHTMLのDOM操作を行うためのスクリプト言語でした。しかし、Node.jsの出現は、この言語の可能性を根底から覆しました。Node.jsは、Google ChromeのJavaScriptエンジン「V8」をサーバーサイドで動かせるようにした実行環境です。

この昇格は、単にJavaScriptの活躍の場が広がったというだけでなく、Webブラウザとスクリプト言語の関係性を逆転させました。しかし、これは現代のWeb開発が求めた当然の流れであり、思うところはありますが、使い方は確認しておくとしましょう。

開発環境・実行環境

OS:Windows11
scoopからインストールします。

インストールコマンド

 scoop install nodejs-lts

バージョン確認

PS C:\> node -v
v22.21.0
PS C:\> npm -v
10.9.4

プログラムの実行

hello.jsという名前でファイルを作成し、以下のコードを記述して保存してください。

// hello.js
console.log("Hello, World!");

・スクリプトの実行

PS J:\js> node hello.js
Hello, World!

コンソールの文字出力

文字列をコンソールに出力する方法は

console.log("コンソールに出力する文字列")

という構文になります。
WebブラウザのJavaScriptと同じですが、出力先がコンソール(標準出力:stdout)になります。

変数

変数はデータを入れる器であり、JavaScriptの変数は動的型付けで、あらゆるデータ(数値、文字列、オブジェクト、関数など)を受け入れることができます。

let x = 10;          // Number型 (整数)
let y = "text";      // String型
let z = new Date();  // Dateオブジェクト
const PI = 3.14;     // 定数(再代入不可)

// 実行時に型が決定し、再代入によって型を変更できる
x = "新しい文字列"; // String型に変化

型の変換(キャスト)

JavaScriptでは、代入時に自動的に型変換(暗黙の型変換)が行われることが多いですが、明示的に変換することも可能です。

let y = "42";         // String型
let x = Number(y);    // 明示的に数値(Number)型に変換
console.log(x + 1);   // 43 (数値として計算される)

四則演算

JavaScriptの基本的な四則演算は、数値型(Number型)に対して行われます。

10 + 3      // 足し算 (13)
10 - 3      // 引き算 (7)
10 * 3      // 掛け算 (30)
10 / 3      // 割り算 (3.3333333333333335)
10 % 3      // 剰余(余り)(1)

※注意点:浮動小数点数と誤差
JavaScriptのNumber型は、基本的に倍精度浮動小数点数(double)として扱われます。このため、割り算などで小数点が発生する場合だけでなく、以下の例のように正確な計算ができない計算誤差が発生します。

console.log(0.1 + 0.2); // 実行結果: 0.30000000000000004

金額計算などの正確さが求められる計算には向いていません
金額計算を行いたい場合は外部ライブラリ(decimal.jsなど)を使うことになります。

文字列操作

JavaScriptでは、文字列はStringオブジェクトとして扱われ、専用のメソッドを使用して操作します。

"Hello " + "World" // 文字列の連結 ("Hello World")

"Hello World".replace("World", "JavaScript") // 文字列の置き換え ("Hello JavaScript")

"Apple,Banana,Orange".split(",")           // 文字列の分割 (配列 ["Apple", "Banana", "Orange"] になる)

"Node.js".toUpperCase()     // 大文字に変換 ("NODE.JS")

日付型

JavaScriptの日付型は組み込みのDateオブジェクトとして扱われます。

// 現在の日付・時刻を取得
let now = new Date();

// 日付型 → 文字列 (自分でフォーマットを組むか、toLocaleDateStringなどを使う)
console.log(now.getFullYear() + "/" + (now.getMonth() + 1) + "/" + now.getDate());

// 文字列 → 日付型
let dateString = "2025/10/19 12:00:00";
let specificDate = new Date(dateString); // Dateオブジェクトに変換

// 簡易的なフォーマット
console.log(now.toLocaleString('ja-JP', {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: false
}).replace(/\//g, '/').replace(/ /g, ' '));
// 実行例: 2025/10/26 10:03:16 (実行環境により異なる)

条件分岐

JavaScriptの条件分岐は、if文で行います。比較演算子や論理演算子を使って条件を記述します。

let score = 75;

if (score >= 80) { // 80以上なら
    // 条件が真(True)の場合の処理
    console.log("合格点です!");
} else if (score >= 60) { // 60以上 80未満なら
    // 別の条件が真の場合の処理
    console.log("もう少しで合格です。");
} else {
    // すべての条件が偽(False)の場合の処理
    console.log("不合格です。");
}

条件式(比較演算子)一覧

JavaScriptで条件分岐を行う際に使用する主な比較演算子です。特に厳密な比較 (=== / !==)の使用が推奨されます。

演算子 意味 使用例 結果
== が等しい(型は無視して比較) 5 == "5" true
!= が等しくない 10 != "10" false
=== 値と型厳密に等しい 5 === "5" false
!== 値と型厳密に等しくない 5 !== "5" true
> より大きい (Greater than) 10 > 5 true
< より小さい (Less than) 10 < 5 false
>= 以上 (Greater than or Equal) 10 >= 10 true
<= 以下 (Less than or Equal) 10 <= 9 false

論理演算子(条件の組み合わせ)

  • &&: かつ(AND)
  • ||: または(OR)
  • !: ではない(NOT)

配列

配列(Array)は、複数のデータを順序付けて格納するためのオブジェクトです。JavaScriptの配列は、異なる型のデータを混在させて格納できます。

// 宣言と初期化の例
let a = [];           // 宣言(空の配列)
let b = [1, 2, 3];    // 初期化(数値の配列)
let c = [1, "text", true]; // 異なる型のデータも格納可能

・要素の操作
配列内のデータには、0から始まるインデックスを使ってアクセスします。

let fruits = ["Apple", "Banana", "Cherry"];

// 変更(代入)
fruits[1] = "Grape"; 
console.log(fruits); // 実行結果: ["Apple", "Grape", "Cherry"]

// 参照(取得)
console.log(fruits[0]); // 実行結果: "Apple"

// 存在しないインデックスに代入すると、配列が拡張される
fruits[5] = "Kiwi"; 
console.log(fruits); // 実行結果: ["Apple", "Grape", "Cherry", empty × 2, "Kiwi"]

・要素の追加と削除

  • .push() … 配列の末尾に要素を追加する
  • .pop() … 配列の末尾の要素を削除し、その要素を返す
  • .unshift() … 配列の先頭に要素を追加する
  • .shift() … 配列の先頭の要素を削除し、その要素を返す

・配列の長さ

let data = [10, 20, 30];
console.log(data.length); // 実行結果: 3

繰り返し・ループ処理

JavaScriptのループ処理は、特定の処理を複数回繰り返すために使われます。主にfor文とwhile文が使われます。

for (let i = 0; i < 3; i++) { // iが0から始まり、3未満の間(0, 1, 2の3回)繰り返す
    console.log(`forループ ${i}回目`);
}
let i = 0; // 外部で変数を宣言

while (i < 3) { // iが3未満の間、繰り返す
    console.log(`whileループ ${i}回目`);
    
    // 変数の更新(これを忘れると無限ループになる)
    i++;
}

サブルーチン

JavaScriptでは、特定の処理をひとまとまりにして再利用できるようにしたものを関数 (Function) と呼びます。

/**
 * 2つの数値を足し算する関数
 * @param {number} a - 最初の数値
 * @param {number} b - 2番目の数値
 * @returns {number} - 2つの数値の合計
 */
function add(a, b) {
    // 処理ブロック
    let sum = a + b;
    
    // 呼び出し元に値を返す
    return sum;
}

// 関数の呼び出しと利用
let result = add(10, 5); // 関数を実行
console.log(result);     // 実行結果: 15

ファイルI/O

// 【同期処理の例】
const fs = require('fs');

try {
    // ファイルを読み込む(処理が完了するまで次の行に進まない)
    const data = fs.readFileSync('input.txt', 'utf8');
    console.log("同期読み込み完了");
    console.log(data);
} catch (err) {
    console.error("エラーが発生しました:", err);
}

// 【非同期処理の例】
fs.readFile('input.txt', 'utf8', (err, data) => {
    if (err) {
        console.error("非同期読み込みエラー:", err);
        return;
    }
    console.log("非同期読み込み完了");
    // 他の処理と並行して実行される
});

クラス

class User {
    // クラスのインスタンス化時に実行される特別なメソッド
    constructor(name, email) {
        this.name = name;
        this.email = email;
    }

    // クラスに属するメソッド(機能)
    getGreeting() {
        return `ようこそ、${this.name}さん!`;
    }
}

// クラスから新しいオブジェクト(インスタンス)を作成
const userA = new User("田中", "tanaka@example.com");

console.log(userA.name);          // 実行結果: 田中 (プロパティへのアクセス)
console.log(userA.getGreeting()); // 実行結果: ようこそ、田中さん! (メソッドの実行)

感想

JavaScriptで手続き型プログラミングとして基礎的な部分を記事にしてみました。
抽象化度が低いので、あまり今どきのJavaScriptらしい感じがしませんが、使い捨てのスクリプトでは、意外とこれくらいの機能でプログラミングが使いやすい感じがします。

コメント