1日目のゴールと今日のテーマ
1日目のテーマは「localStorage を使って“消えないメモ帳”の土台を作ること」です。
普通のメモ帳アプリは、ページをリロードすると全部消えてしまいますが、
localStorage を使うと「ブラウザの中に保存しておけるメモ帳」が作れます。
今日のゴールは次の 3 つです。
localStorage が「文字列だけを保存できる箱」だと理解すること。
オブジェクトや配列を JSON に変換して保存する流れをつかむこと。
「いつ保存するか」という永続化の設計をイメージできるようになること。
まだ完璧なメモ帳は作りません。
まずは「保存の仕組み」を小さな例で体に入れていきます。
localStorage とは何かをイメージでつかむ
localStorage は「ブラウザの中の小さなキーバリューストア」
localStorage は、ブラウザが持っている「小さな保存箱」です。
特徴は、キーと値をセットで保存できることと、値は必ず文字列であることです。
例えば、次のように使います。
localStorage.setItem("username", "taro");
const name = localStorage.getItem("username");
console.log(name); // "taro"
JavaScriptここで重要なのは、保存できるのはあくまで文字列だという点です。
数値やオブジェクト、配列をそのまま渡しても、内部では文字列として扱われます。
メモ帳アプリでは「メモの一覧」を配列で持ちたいので、
この「文字列しか保存できない」という制約をどう扱うかがポイントになります。
ページを閉じても残る「永続化」のイメージ
localStorage に保存したデータは、ページをリロードしても、ブラウザを閉じても残ります。
同じドメイン(同じサイト)に戻ってきたときに、前回のデータを取り出せます。
例えば、次のような流れです。
1回目のアクセスで localStorage.setItem("memo", "こんにちは"); を実行する。
ブラウザを閉じる。
もう一度同じページを開いて localStorage.getItem("memo") を実行すると「こんにちは」が出てくる。
これが「永続化」の基本イメージです。
メモ帳アプリでは、この仕組みを使って「メモ一覧」を保存しておきます。
JSON 変換の基本:オブジェクトや配列を文字列にする
JSON.stringify で「JavaScript の値 → 文字列」
localStorage は文字列しか保存できません。
でも、メモ帳では「メモの配列」を扱いたいので、
配列を文字列に変換する必要があります。
そこで使うのが JSON.stringify です。
const memos = [
{ id: 1, text: "牛乳を買う" },
{ id: 2, text: "メール返信" },
];
const json = JSON.stringify(memos);
console.log(json);
// 例: '[{"id":1,"text":"牛乳を買う"},{"id":2,"text":"メール返信"}]'
JavaScriptここでの重要ポイントは、
JavaScript の配列やオブジェクトを「JSON 形式の文字列」に変換している、ということです。
この文字列なら、そのまま localStorage に保存できます。
JSON.parse で「文字列 → JavaScript の値」に戻す
保存した JSON 文字列を、もう一度配列として使いたいときは JSON.parse を使います。
const loaded = JSON.parse(json);
console.log(loaded[0].text); // "牛乳を買う"
JavaScriptこの流れが、localStorage と組み合わせるとこうなります。
// 保存
localStorage.setItem("memos", JSON.stringify(memos));
// 読み込み
const saved = localStorage.getItem("memos");
const memosFromStorage = saved ? JSON.parse(saved) : [];
JavaScriptここで深掘りしたいのは、
「保存するときは stringify」「読み込むときは parse」というペアで覚えることです。
この 2 つをセットで使えるようになると、
「配列やオブジェクトをそのまま保存できる感覚」がつかめます。
メモ帳アプリのデータ構造を決める
1 件のメモをどう表現するか
ToDo アプリと同じように、メモもオブジェクトで表現します。
const memo = {
id: 1,
text: "今日のアイデアメモ",
updatedAt: Date.now(),
};
JavaScript最低限必要なのは id と text です。
updatedAt は「いつ更新したか」を記録したいときに使えますが、1日目ではなくても構いません。
メモ帳全体は、このメモオブジェクトの配列として持ちます。
const state = {
memos: [],
};
JavaScriptここでの重要ポイントは、
「画面に見えているメモ一覧は、必ず state.memos から作る」という設計にすることです。
localStorage はあくまで「保存場所」であって、
アプリの“今”は state に持たせます。
localStorage と state をつなぐ「永続化設計」の基本
保存の基本パターン:state → JSON → localStorage
メモを追加・編集・削除したとき、
state.memos が変わります。
このタイミングで localStorage にも保存しておくと、
次にページを開いたときに復元できます。
保存の関数を 1 つ用意しておきます。
const STORAGE_KEY = "memo-app-memos";
function saveMemosToStorage() {
const json = JSON.stringify(state.memos);
localStorage.setItem(STORAGE_KEY, json);
}
JavaScriptこの関数を、
メモ追加・編集・削除のたびに呼ぶ設計にします。
例えば、メモ追加ならこうです。
function addMemo(text) {
const trimmed = text.trim();
if (!trimmed) return;
const newMemo = {
id: Date.now(),
text: trimmed,
};
state.memos.push(newMemo);
saveMemosToStorage();
render();
}
JavaScriptここでの重要ポイントは、
「state を変えたら、保存と再描画をセットで行う」という流れを作ることです。
これで「画面」と「保存されたデータ」がズレにくくなります。
読み込みの基本パターン:localStorage → JSON.parse → state
ページを開いたときに、localStorage からメモ一覧を読み込みます。
function loadMemosFromStorage() {
const json = localStorage.getItem(STORAGE_KEY);
if (!json) {
state.memos = [];
return;
}
try {
const memos = JSON.parse(json);
if (Array.isArray(memos)) {
state.memos = memos;
} else {
state.memos = [];
}
} catch (e) {
console.error("保存されたメモの読み込みに失敗しました", e);
state.memos = [];
}
}
JavaScriptそして、ページ読み込み時にこれを呼び、続けて render します。
loadMemosFromStorage();
render();
JavaScriptここで深掘りしたいのは、
JSON.parse は失敗する可能性があるので try-catch で囲んでいる点です。
localStorage の中身が壊れていても、アプリが落ちないようにする——
これが「永続化設計」の大事な視点です。
1日目のミニ実験:コンソールで localStorage を触ってみる
文字列の保存と読み込みを試す
ブラウザの開発者ツールを開いて、コンソールで次を試してみてください。
localStorage.setItem("test", "hello");
localStorage.getItem("test"); // "hello"
JavaScriptページをリロードしてから、もう一度
localStorage.getItem("test");
JavaScriptを実行すると、まだ “hello” が残っているはずです。
これが「ページをまたいで残る」という感覚です。
配列の保存と読み込みを試す
次に、配列を保存してみます。
const arr = [1, 2, 3];
localStorage.setItem("arr", JSON.stringify(arr));
const loaded = JSON.parse(localStorage.getItem("arr"));
console.log(loaded[1]); // 2
JavaScriptここまでできたら、
「localStorage は文字列しか保存できないけど、
JSON を使えば配列やオブジェクトも実質保存できる」
という感覚がかなりはっきりしてきます。
1日目のまとめと、明日へのつなぎ
1日目であなたがやったことは、メモ帳アプリの「永続化の土台作り」です。
localStorage が「文字列だけを保存できるブラウザ内の箱」だと理解したこと。
JSON.stringify / JSON.parse で「配列やオブジェクト ↔ 文字列」を変換する流れをつかんだこと。
state.memos を「アプリの真実」として持ち、
保存は state から localStorage に流す設計をイメージできたこと。
明日(2日目)は、
実際にメモ追加・編集・削除の UI を作り、
操作のたびに localStorage に保存される「消えないメモ帳」を形にしていきます。
もし余力があれば、今日は
localStorage に自分の好きなキー名でデータを保存してみたり、
Application タブ(Storage の画面)で中身を眺めてみてください。
「ブラウザの中に自分のデータが残っている」という感覚が、
永続化設計をぐっと身近なものにしてくれます。


