Node.js
1. サーバー構築
必須パッケージ
-
express: シンプルなサーバー構築フレームワーク
npm install express
-
dotenv: 環境変数の管理
npm install dotenv
-
nodemon: サーバー自動再起動ツール(開発環境)
npm install --save-dev nodemon
サーバー構築の基本コード例
const express = require("express"); const app = express(); require("dotenv").config(); app.get("/", (req, res) => { res.send("Hello World!"); }); app.listen(process.env.PORT || 3000, () => { console.log("Server is running..."); });
2. データベース
必須パッケージ
-
mongoose: MongoDB 用の ORM
npm install mongoose
-
sequelize: SQL データベース用 ORM(PostgreSQL, MySQL, etc.)
npm install sequelize sequelize-cli
MongoDB 接続の基本コード例
const mongoose = require("mongoose"); mongoose .connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true, }) .then(() => console.log("Connected to MongoDB")) .catch((err) => console.error("MongoDB connection error:", err));
3. API 通信
必須パッケージ
-
axios: HTTP リクエストライブラリ
npm install axios
-
node-fetch: Fetch API の Node.js 版
npm install node-fetch
Axios 使用例
const axios = require("axios"); axios .get("https://api.example.com/data") .then((response) => console.log(response.data)) .catch((error) => console.error(error));
4. テスト
必須パッケージ
-
jest: JavaScript テストフレームワーク
npm install --save-dev jest
-
supertest: API のテストツール
npm install --save-dev supertest
Jest 基本コード例
// sum.js function sum(a, b) { return a + b; } module.exports = sum; // sum.test.js const sum = require("./sum"); test("adds 1 + 2 to equal 3", () => { expect(sum(1, 2)).toBe(3); });
5. セキュリティ
必須パッケージ
-
helmet: HTTP ヘッダーを保護
npm install helmet
-
cors: クロスオリジンリソース共有の設定
npm install cors
-
bcrypt: パスワードのハッシュ化
npm install bcrypt
-
jsonwebtoken: JWT による認証
npm install jsonwebtoken
基本的なセキュリティコード例
const express = require("express"); const helmet = require("helmet"); const cors = require("cors"); const app = express(); app.use(helmet()); app.use(cors()); app.use(express.json()); const jwt = require("jsonwebtoken"); const bcrypt = require("bcrypt"); // パスワードのハッシュ化 const password = "myPassword123"; const hashedPassword = bcrypt.hashSync(password, 10); console.log("Hashed Password:", hashedPassword); // JWT生成 const token = jwt.sign({ userId: 1 }, "yourSecretKey", { expiresIn: "1h" }); console.log("Generated Token:", token);
6. ユーティリティ
必須パッケージ
-
lodash: ユーティリティ関数のライブラリ
npm install lodash
-
moment: 日付操作(現在は
推奨)date-fns
npm install moment
Lodash 使用例
const _ = require("lodash"); const arr = [1, 2, 3, 4, 5]; console.log(_.shuffle(arr));
7. 開発ツール
必須パッケージ
-
eslint: コード品質チェックツール
npm install --save-dev eslint
-
prettier: コードフォーマッター
npm install --save-dev prettier
ESlint 初期化コマンド
npx eslint --init
8. その他
npm スクリプト例
- 内のスクリプト設定
package.json
"scripts": { "start": "node index.js", "dev": "nodemon index.js", "test": "jest" }
推奨する参考資料
- npms.io: npm パッケージ検索
- Awesome Node.js: 高品質 Node.js リソース集
このチートシートをプロジェクトの種類に応じてカスタマイズし、自分専用のノートに取り込むとさらに便利になります。
Node.js とは
ブラウザではない領域で JavaScript を実行できる環境のこと。
Javascript で OS の機能にアクセスするプログラムを組むことができる。
大量の接続できるネットワークアプリケーションの構築を目的に設計された Javascript 環境。
npm(node package manager)
Node.js で利用するパッケージを管理するツール。
パッケージとは Vue や React,webpack,iQuery などのライブラリやフレームワークのこと。
Node.js を使う目的
- 新しい仕様の JavaScript または TypeScript でクライアントサイドのプログラムを書きたい。
- web アプリケーションを作りたい。
- モバイル、デスクトップ用のアプリケーションを作りたい。
Node.js
サーバーサイドの JavaScript 実行環境。C++で実装。
メリット
- js を知っていれば簡単に使い始めれる。
- 大量アクセスを捌ける。(ノンブロッキング I/O)
利用できるパッケージ
- Node.js 本体の機能に標準装備されているもの
- 外部のモジュール
npm
コマンドラインツール。
package.json
npm install name
dependencies と devDependencies をインストール。
dependencies
本番環境で実行される場合に必要なパッケージや依存関係を保管する。
例:react, react-dom など
npm install -save name
dependencies のみをインストール。
devDependencies
開発に必要なパッケージのみを書く。本番環境にデプロイする際には不要なパッケージや依存関係を保存する。
例:eslint, prettier など
npm install -save-dev name
devDependencies のみをインストール
役割
1.Node.js のプロジェクトを新規作成する
npm init
package.json が作成される。
package.json には依存する外部のパッケージとそのバージョンを記述しておき、アプリケーションが実行段階になったときに外部ライブラリをまとめてインストールする。
2.Node.js のプロジェクトに外部のパッケージを追加する
npm install express@latast (verを指定することもできる。)
導入したいライブラリを指定する。
3.npm のサブコマンドとしてさまざまさ操作をワンライナーで実行する
package.json の中で「scripts」の中に以下のような記述をすると、エイリアスで実行できる。
"scripts": { "start": "node index.js", "test": "echo \"Error: no test specified\" && exit 1" },
option
-s, -save:package.json の dependencies に登録してくれる。
web サーバーを作成する時の要点
- http を読み込む
- サーバーのインスタンスを作成
- 特定のポートでサーバーを起動してリクエストを待つ
EventEmitter
何かのイベントが発生した時に、それがトリガーとなって、あらかじめ登録しておいた処理を実行することができる。実行順序はキュー形式 FIFO 形式で取り出される。
作成方法
const EventEmitter = require("events"); const myEmitter = new EventEmitter(); //EventEmitterインスタンスの作成
基本的な使い方
- 登録処理:on(eventName, listener) 第 1 引数に指定したイベントに紐づけてリスナーを登録。
- 実行処理:emit(eventName, [args]) emit 関数でイベントが発動し、第 2 引数以降の args を引数として渡す。
import { EventEmitter } from "events"; const eventEmitter = new EventEmitter(); eventEmitter.on("myEvent", () => { console.log("Emitted Event"); }); eventEmitter.emit("myEvent");
同期 or 非同期
EventEmitter で登録、発火したイベントは同期的に実行される。
実行順
登録した順に実行される。
Stream 処理
EventEmitter にデータを溜め込む内部のバッファを組み込んだもののイメージ。内部のデータがある程度溜まった段階でイベントが発火する。
Stream オブジェクト同士を繋ぎ合わせることもできるので、まとまったデータを別の形式に変換する Stream をかますことで全てのデータが溜まり切る前に変換可能のものから処理を始めるといった動作が可能になる。
イベントの繋ぎ合わせ、データ流量の調整、変換処理などのレンドクするデータの流れを効率的に扱うことが可能。
node.js では 4 つの Stream 処理がベースになっている。
- Witable:データの書き込みに利用する
- Readable:データの読み取りに利用する
- Duplex:データの書き読みに利用する
- Transfrom:Duplex を継承し、読み書きしたデータを変換する。
I/O などの処理をなるべく細切れにして(微分)してパフォーマンス効率を上げる。
デメリット
async/await などフロー制御に組み込むことが難しい。
エラーハンドリングを忘れやすく、忘れた時の影響が大きい。
AsyncIterator
Stream のデメリットを解消するために登場。
for await (val of iterable ) {...}
ejs
基本
ejs:<%= 変数 %>
パーシャル
テンプレートの一部を部品化するもの。
-
server は ejs.render で filename をキーとして値にパーシャルした ejs を設定する。
let data = { taro: "090-1234-5678", jiro: "080-1234-5678", saburo: "070-1234-5678", }; let content = ejs.render(index_page, { title: "Hello World", msg: msg, data: data, filename: "data_item", });
-
パーシャル化する ejs の作成。
<tr> <th><%= id %></th> <td><%= key %></td> <td><%= value[0] %></td> </tr>
-
受け取り側は<%- include (ファイル名, {受け渡す値})) %>で受ける準備をしておく。
<% let id = 0; %> <% for (let key in data) { %> <%- include("data_item",{id:++id, key: key, value: [data[key]]}) %> <% } %>