1. 2 件を保存して読み直す
  2. 1 件のとき
  3. 空の配列も保存できる
コース一覧
Node.js入門
ファイルを読み書きする

Node.js入門

Node.jsの実行モデル、npm、Expressによるルーティング、REST API設計、データベース接続、トランザクションを使った購入処理、トークン認証まで、バックエンド開発の基礎を、毎レッスン実際にコードを書き、フリマアプリのAPIを自分の手で作りながら学びます。

1
Node.jsとは
01. Node.jsとは15分
02. スクリプトを実行する15分
03. npmとは15分
04. package.json15分
05. npmスクリプト15分
06. つくる:プロジェクト始動20分
07. 第1章クイズ10分
2
モジュールと非同期の復習
01. import/export15分
02. ファイルを読み書きする15分
03. async/await復習15分
04. JSONの取り回し15分
05. つくる:データ層20分
06. 第2章クイズ10分
3
はじめてのサーバー
01. サーバーとリクエスト15分
02. Expressを導入する15分
03. ルーティング15分
04. JSONを返す15分
05. 開発の回し方15分
06. つくる:サーバー始動20分
07. 第3章クイズ10分
4
REST APIのきほん
01. RESTの考え方15分
02. 一覧を返す15分
03. 1件を返す15分
04. 登録を受ける15分
05. 更新と削除15分
06. ステータスコード15分
07. つくる:商品CRUD完成20分
08. 第4章クイズ10分
5
リクエスト処理と検証
01. クエリパラメータ15分
02. 並び替えとページング15分
03. 入力検証15分
04. ミドルウェア15分
05. エラーハンドリング15分
06. つくる:検索API完成20分
07. 第5章クイズ10分
6
データベース接続
01. DBにつなぐ15分
02. 一覧・詳細をDB化15分
03. 出品をDB化15分
04. SQLインジェクション20分
05. 更新・削除をDB化15分
06. 購入トランザクション20分
07. つくる:DB版fleama20分
08. 第6章クイズ10分
7
認証のきほん
01. 認証と認可15分
02. パスワードハッシュ15分
03. ログインとトークン15分
04. 保護ルート15分
05. 本人のものだけ15分
06. つくる:認証完備20分
07. 第7章クイズ10分
8
総合制作
01. fleama API完成20分
02. Reactと接続する20分
03. サーバーで常駐させる20分
04. 自由拡張20分
05. 完成と次のステップ15分

ファイルを読み書きする

プログラムが終わると配列は消える

ここまで商品データは配列に書いていました。ですが node app.js が終わった瞬間、その配列はメモリごと消えます。次に起動したときには、また同じ初期データから始まります。

フリマアプリとしては困ります。出品した商品が、サーバーを再起動したら消えてしまうからです。プログラムの外に残す必要があります。

最初の手段はファイルです。

fs はファイルを扱う道具箱

Node.js には fs という部品が最初から入っています。npm で入れる必要はありません。ファイルシステムの略です。

JavaScript

const fs = require("fs/promises"); const raw = await fs.readFile("items.json", "utf8");

utf8 を渡すのを忘れないでください。指定しないと、人が読めない形の生のデータが返ってきます。文字として読みたいことを伝える指定です。

書くときは writeFile です。

JavaScript

await fs.writeFile("items.json", "保存したい文字列");

fs/promises と fs の違い

require("fs") と require("fs/promises") の 2 つがあります。

読み込み方使い方
fs/promisesawait を付けて待つ
fsreadFileSync のように末尾が Sync のものを使う

このコースでは fs/promises を使います。ファイルの読み書きは時間がかかる作業で、待っているあいだに他の仕事を進められるほうが、サーバーとしては都合がよいからです。第3章でサーバーを立てると、その意味がはっきりします。

書き込みは上書き

writeFile は追記ではありません。同じ名前のファイルがあれば、中身をまるごと差し替えます。

ですから商品を 1 件足したいときは、次の順番になります。

  1. いまのファイルを読む
  2. 読んだものに 1 件足す
  3. 全部をもう一度書き込む

読まずにいきなり書くと、それまでの商品が消えます。

手を動かす

演習では、商品の配列をファイルに保存して、そのファイルを読み直すところまでを書きます。渡された配列を直接見るのではなく、いったんファイルを経由するのが要点です。読み書きが 1 往復できることを、自分の手で確かめてください。

要件

  1. fs/promises を使い、受け取った場所へ配列を JSON の文字列として書き込む
  2. 書き込んだあと、同じファイルを utf8 で読み直す
  3. 読み直した内容から先頭の商品の name を返す(空のときは 商品がありません)

入出力例

saveAndReload([{"id":1,"name":"レザースニーカー"},{"id":2,"name":"古着のデニムジャケット"}], "/tmp/fleama-fs-a.json") → "レザースニーカー" saveAndReload([{"id":1,"name":"木製のスツール"}], "/tmp/fleama-fs-b.json") → "木製のスツール" saveAndReload([], "/tmp/fleama-fs-c.json") → "商品がありません"

ヒント

配列はそのままでは書けません。`JSON.stringify(items)` で文字列にしてから渡します

`writeFile` も `readFile` も時間のかかる処理なので、どちらにも `await` が要ります

読んだ結果は文字列です。`JSON.parse` で配列に戻してから先頭を取り出します

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/10

関連レッスン

  • async/await復習

    読み込みから加工・表示までを非同期でつなぎ、処理の流れを追えるようになります。

  • JSONの取り回し

    商品追加をファイルに反映し、parseとstringifyを使い分けられるようになります。

  • つくる:データ層

    読む関数と書く関数をdata.jsに整え、ファイルベースのデータ層を作れるようになります。

  • 第2章クイズ

    モジュールと非同期処理の理解を4択で確認します。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 配列サイズ固定の同型データの集まり
  • メモリプログラムとデータを一時保持する高速領域
  • サーバークライアント(ブラウザなど)がリクエストを送り、サーバーがレスポンスを返す。
  • Node.jsJavaScript をサーバ側で動かすランタイム
  • applicationJSON 本文を送るときの Content-Type
main.js
学習モード
エディタを読み込んでいます

メモ

ファイルを読み書きする

⌘S で保存