この記事について
AWSの勉強を進める中で、「サーバー側で動くプログラムってどう作られているんだろう」と気になり、今回はNode.jsに入門してみました。同じようにこれから触ってみたい方の参考になればと思い、つまずいたところも含めて記録します。
Node.jsとは
一言で言うと、JavaScriptをブラウザの外(サーバーやパソコンの中)でも動かせるようにする実行環境です。
普段のJavaScriptは「ブラウザの中でボタンを押したら色が変わる」のような、表側の動きを作るために使われています。Node.jsはその同じ言語を、裏側(サーバー)でも動かせるようにしたものです。
裏で動けるようになると、次のようなことができます。
- Webサイトの裏側でデータを組み立ててページを返す(Webサーバー・API)
- 決まった作業を自動でやらせる(ファイル整理、データ処理など)
- チャットのように「常につながっている」やり取りをする
環境構築でまずつまずいた話
最初のステップは、ターミナルでNode.jsが使えるか確認するところからです。
node -v
バージョン番号が表示されればインストール済みです。ここまでは問題なく進みました。
次に、hello.jsというファイルを作って中身に
console.log("こんにちは、Node.js!");
と書き、実行しようとしたところ、こんなエラーが出ました。
Error: Cannot find module '/Users/xxxx/hello.js'
原因は単純で、ファイルを保存した場所と、ターミナルで今いる場所(カレントディレクトリ)が違っていたことでした。デスクトップに保存したファイルを実行しようとして、ホームディレクトリのままコマンドを打っていた、というよくあるすれ違いです。
cd Desktop/node-study
node hello.js
のように、ファイルがある場所までcdで移動してから実行することで、無事に動きました。
こんにちは、Node.js!
教訓:エラーが出たら、まず「今いる場所」と「ファイルがある場所」が一致しているか確認する。
基本文法を触ってみる
変数
値を入れておく箱のようなものです。
let name = "たろう";
let age = 30;
console.log("名前は" + name + "です");
console.log("年齢は" + age + "歳です");
let nextYear = age + 1;
console.log("来年は" + nextYear + "歳になります");
実行結果:
名前はたろうです
年齢は30歳です
来年は31歳になります
文字同士の+は「つなげる」、数字同士の+は「足し算」になる、という違いが面白いポイントでした。
配列とオブジェクト
複数のデータをまとめて扱うための仕組みです。
// 配列:データのリスト
let fruits = ["りんご", "みかん", "ぶどう"];
console.log(fruits[0]); // 1番目
console.log(fruits[1]); // 2番目
console.log(fruits.length); // 件数
// オブジェクト:名前をつけてデータをまとめる
let person = {
name: "太郎",
age: 25,
job: "エンジニア"
};
console.log(person.name);
console.log(person.age);
console.log("職業は" + person.job + "です");
実行結果:
りんご
みかん
3
太郎
25
職業はエンジニアです
配列は0番目から数える、という点が最初は少し戸惑いました。
ファイルの読み書き(Node.jsらしさを実感)
ここからがNode.jsらしいところです。ブラウザではできない「ファイルを自動で作る・読む」という操作ができます。
const fs = require("fs");
fs.writeFileSync("メモ.txt", "こんにちは、これはNode.jsで書いたファイルです。");
console.log("ファイルを書き込みました");
let content = fs.readFileSync("メモ.txt", "utf-8");
console.log("ファイルの中身:" + content);
実行結果:
ファイルを書き込みました
ファイルの中身:こんにちは、これはNode.jsで書いたファイルです。
実行すると、実際にメモ.txtというファイルがフォルダの中に作られていて、地味に感動しました。
繰り返し処理(for文)
配列の中身を1つずつ自動で処理できるようになります。
let fruits = ["りんご", "みかん", "ぶどう"];
for (let i = 0; i < fruits.length; i++) {
console.log(i + "番目:" + fruits[i]);
}
実行結果:
0番目:りんご
1番目:みかん
2番目:ぶどう
iが0→1→2と増えながら、fruits[i]で中身を順番に取り出していく、という仕組みです。
応用:配列をまとめてファイルに書き出す
最後に、ここまでの内容を組み合わせて、簡単な自動化スクリプトを作ってみました。
const fs = require("fs");
let fruits = ["りんご", "みかん", "ぶどう"];
let text = "";
for (let i = 0; i < fruits.length; i++) {
text = text + (i + 1) + "番目:" + fruits[i] + "\n";
}
fs.writeFileSync("fruits一覧.txt", text);
console.log("書き出し完了");
console.log(text);
実行結果:
書き出し完了
1番目:りんご
2番目:みかん
3番目:ぶどう
規模は小さいですが、「データのリストを受け取り、加工して、ファイルに出力する」という構造は、記事一覧をCSVにまとめたり、複数のデータを整形して保存したりする作業と同じ形です。ここが自動化の入り口だと感じました。
やってみた感想
- Pythonの経験があったおかげで文法の違いに慣れれば飲み込みは早かった
fsでファイルを自動生成できた瞬間が、一番「サーバー側のプログラム」を実感できた- 変数・配列・オブジェクト・繰り返しの考え方は、Pythonとほぼ同じだった。違うのは書き方(構文)の癖くらいで、「データを箱に入れて、まとめて、繰り返して、出力する」という発想そのものは言語が変わっても共通なのだと感じた
次は、npmで公開されている便利なライブラリを使ってみたり、Expressで簡単なWebサーバーを立ててみたりする予定です。進捗はまたこのブログで記録していきます。

