第3回まで無料

Node.js 入門コース

環境構築から、モジュール・非同期処理・ファイル入出力・HTTP と Express・SQLite・テスト・本番運用まで。全50レッスンで「メモ帳 API と CLI を自分で組み立てて、落とさずに動かせる」ところまで進みます。コードと実行結果はすべて Node.js v26.7.0 で実際に動かしたものです。

カリキュラム

全50レッスンを7つの章に分けています。第1章から順に進めるのがおすすめですが、 気になるところだけ拾い読みしてもかまいません。 ※ ブラウザ内で実行できないため、手元の node(22 以上)で試してください。

Chapter 1 — 導入(第1〜5回)

Node.js が動く仕組みを押さえ、バージョン管理ツールで環境を作ります。console の使い分け、コマンドライン引数、環境変数と .env まで進み、外から値を渡せる状態にします。

Chapter 2 — モジュールとパッケージ(第6〜10回)

コードをファイルに分け、他人のコードを取り込みます。CommonJS と ES Modules の違いを判定ルールごと確定させ、package.json と npm のセマンティックバージョニングまで進みます。

Chapter 3 — 非同期処理(第11〜17回)

このコースの山場です。同期処理だと何が困るのかを実際にフリーズさせて体感し、コールバック・Promise・async/await と書き方を進めます。最後はイベントループとエラーハンドリングで締めます。

Chapter 4 — ファイルと入出力(第18〜26回)

パスの組み立てからファイルの読み書き、ディレクトリ操作と JSON を扱います。後半はストリーム・EventEmitter・Buffer・readline で、メモリを一定に保ったまま大きなデータを流せるようになります。

18

path モジュールとパスの組み立て

join と resolve の違い、__dirname と process.cwd() の取り違え、そしてユーザー入力をパスにつなぐときの検証。

🔒 ベーシック
19

ファイルを読む

fs/promises を既定にする理由。utf8 を書かないと Buffer が返ること、エラーは code で分岐すること、大きいファイルは 1 行ずつ。

🔒 ベーシック
20

ファイルを書く

writeFile は開いた瞬間に中身を消す。一時ファイル+rename で壊れない書き込みにし、大量出力はストリームにする。

🔒 ベーシック
21

ディレクトリ操作

mkdir は recursive を既定に。readdir の recursive では node_modules を除外できないので、自作 walk か fs.glob を使う。

🔒 ベーシック
22

JSON ファイルの読み書き

require('./config.json') がキャッシュされる話。stringify で消えるもの、Date が文字列になる往復問題、SyntaxError にファイル名を足す。

🔒 ベーシック
23

ストリーム

メモリ 620MB が 69MB になる仕組み。pipe ではなく pipeline を使う理由と、バックプレッシャーの定型句。

🔒 ベーシック
24

EventEmitter

on と emit の仕組み。emit が同期であること、'error' だけリスナーがいないと throw されること、リスナーの外し忘れ。

🔒 ベーシック
25

Buffer と文字コード

バイト列と文字列の行き来。subarray がコピーではないこと、チャンク境界で文字化けが起きる理由と 3 つの対策。

🔒 ベーシック
26

readline で対話プログラム

readline/promises で 1 問ずつ聞く。rl.close() を忘れて固まる話と、対話モードとパイプモードの両対応。

🔒 ベーシック

Chapter 5 — HTTP と Express(第27〜34回)

素の http モジュールでサーバー・ルーター・ボディ読み込みを自分で書いてから Express に入ります。Express が何を代行しているのかが分かった状態で、REST API とエラー設計まで進みます。

27

http モジュールでサーバーを作る

req は Readable、res は Writable。setHeader と writeHead の違い、charset の指定、pipeline でのファイル配信。

🔒 ベーシック
28

ルーティングを自作する

50 行のルーターを書く。URLPattern でパスパラメータを取り、404 と 405 を区別し、例外を 1 か所で受ける。

🔒 ベーシック
29

リクエストボディと JSON API

req.body が無い理由。body += chunk が日本語を壊す話と、サイズ上限つきのボディ読み込み関数。

🔒 ベーシック
30

fetch で HTTP クライアント

fetch は 404 で例外を投げない。err.cause に本当の原因があること、タイムアウトを必ず付けること、リトライの条件。

🔒 ベーシック
31

Express 入門

素の http との対応表。res.send と res.json の違い、express.static の 1 行、404 ハンドラを自分で置く理由。

🔒 ベーシック
32

Express のミドルウェア

next() を呼び忘れるとリクエストが止まる。適用範囲の 4 段階と、express.json() が第29回の自作と同じ仕事をしていること。

🔒 ベーシック
33

Express で REST API

URL は名詞、動作はメソッド。PUT と PATCH で消えるものが違う話と、エラーレスポンスの形を統一する設計。

🔒 ベーシック
34

エラーハンドリングとステータスコード

想定内と想定外を分ける。本番でスタックトレースを返さない設計と、ストリーミング中の失敗が成功に見える問題。

🔒 ベーシック

Chapter 6 — データの保存と品質(第35〜42回)

JSON ファイルから SQLite へ保存先を移し、設定の分離と zod による検証を入れます。後半はデバッグ・テスト・Lint と、書いたコードの正しさを保つ道具を揃えます。

35

JSON ファイルをデータストアにする

再起動しても消えない保存先へ。同時に 200 回 +1 したら 1 になる「更新の喪失」と、10 行のミューテックス。

🔒 ベーシック
36

SQLite でデータを永続化

node:sqlite は標準機能で npm install 不要。プレースホルダ、境界での型変換、トランザクションで 1000 倍速くなる一括 INSERT。

🔒 ベーシック
37

設定の分離と環境切り替え

--env-file の優先順位を実測する。環境ごとにファイルを分け、config.js に読み込みを閉じ込めて起動時に落とす。

🔒 ベーシック
38

入力バリデーション(zod)

手書き 30 行が 12 行に。safeParse と .strict()、z.coerce でクエリを変換し、日本語メッセージも 1 行で。

🔒 ベーシック
39

デバッグの方法

console.log は深さ 2 で諦めている。util.inspect と debuglog、スタックトレースの読み方、--trace-* フラグ。

🔒 ベーシック
40

node:test でテストを書く

設定ファイルゼロ・依存パッケージゼロでテストが動く。assert/strict の使い分けと、失敗したときの差分の読み方。

🔒 ベーシック
41

非同期テストとモック

依存性注入で設計から解く。mock.fn と mock.method、待ち時間ゼロのリトライテスト、listen(0) と fetch で HTTP をテストする。

🔒 ベーシック
42

ESLint と Prettier

ESLint はバグを見つけ、Prettier は見た目を揃える。フラットコンフィグの書き方と、--fix で直らないものが本命だという話。

🔒 ベーシック

Chapter 7 — 実務の道具と総まとめ(第43〜50回)

TypeScript・ロギング・CLI・子プロセス・worker_threads・計測・グレースフルシャットダウンを扱います。最後は全部を統合したメモ帳 API と CLI を 1 本組み立てます。

43

TypeScript を使う

node src/main.ts がそのまま動く。ただし型検査はしないので tsc --noEmit と役割分担し、消せない構文は使えない。

🔒 ベーシック
44

ロギングと例外の運用

構造化ログを 80 行で作る。秘密を機械的に伏せ、Error を直列化し、AsyncLocalStorage でリクエスト ID を持ち回る。

🔒 ベーシック
45

CLI ツールを作る

シェバンと bin フィールド。parseArgs は 1 回ではサブコマンドを扱えないので argv を自分で切る。終了コードと TTY 判定。

🔒 ベーシック
46

child_process で外部コマンド

exec / execFile / spawn / fork の使い分け。exec にユーザー入力を渡すとコマンドが実行される話と、1MB の maxBuffer。

🔒 ベーシック
47

worker_threads で重い処理

CPU を使う処理をメインスレッドから逃がす。ワーカープールと SharedArrayBuffer、そして I/O には効かないという話。

🔒 ベーシック
48

パフォーマンス計測

推測するな、測れ。1 回だけ測ってはいけない理由と、mark / measure・イベントループ遅延・CPU プロファイル。

🔒 ベーシック
49

本番運用とグレースフルシャットダウン

SIGTERM を受けてから終わるまでの 5 段階。/health と /ready の役割の違いと、cluster を自分で書くべきかどうか。

🔒 ベーシック
50

【実践】メモ帳 API と CLI で総まとめ

外部パッケージは Express と zod だけ。49 回で揃えた道具を 1 つのアプリに統合し、設定・DB・検証・ログ・停止まで通す。

🔒 ベーシック

全50レッスンを終えたら、次は型を付けて書く TypeScript 入門コース や、フロントエンドと繋ぐ Next.js 入門コース へ。メンバーシップで全コースが解放されます。