ステップ1でlocalStorageの基本操作を学びましたが、現在のToDoアプリはタスクを追加してもlocalStorageに保存されません。つまり、ブラウザを更新すると今まで通りデータが消えてしまいます。
この問題を解決するため、タスク追加時に自動的にlocalStorageへ保存する機能を実装しましょう。
タスク追加 → メモリのみに保存 → ブラウザ更新 → データ消失 😢
タスク追加 → localStorage自動保存 → ブラウザ更新 → まだ表示は消える*
(*復元機能はステップ3で実装)
ただし:開発者ツールのLocal Storageには保存されている! 🎉
具体的にできるようになること:
現在のベースコードを使って以下を確認してください:
なぜこの問題が起きるのか?
現在のアプリは、タスクをJavaScriptの配列(メモリ)にのみ保存しています。
localStorage への保存処理を実装していないため、データの永続化ができていません。詳細は → 補足資料: ブラウザストレージ比較
ベースコードのscript.js
に以下の機能を追加しましょう。
// タスクデータ(配列形式) - まだlocalStorageからの読み込みなし
let tasks = [];
// ★ 追加: localStorageで使用するキー名を定数として定義
const STORAGE_KEY = "taskList";
// ★ 追加: タスクをlocalStorageに保存する関数
function saveTasksToStorage() {
try {
// 配列をJSON文字列に変換してlocalStorageに保存
const tasksJson = JSON.stringify(tasks);
localStorage.setItem(STORAGE_KEY, tasksJson);
console.log("💾 localStorage保存完了:", tasksJson);
} catch (error) {
console.error("❌ localStorage保存エラー:", error);
alert("データの保存に失敗しました");
}
}
function addTask() {
const taskText = taskInput.value.trim();
if (taskText === "") {
alert("タスクを入力してください");
return;
}
// 新しいタスクオブジェクトを作成
const newTask = {
id: Date.now(),
text: taskText,
completed: false
};
// タスク配列に追加
tasks.push(newTask);
// 入力フィールドをクリア
taskInput.value = "";
// ★ 追加: localStorageに自動保存
saveTasksToStorage();
// 画面に表示
renderTasks();
updateProgress();
console.log("✅ タスクを追加し、localStorageに保存しました:", newTask.text);
}
try-catch文の基本構文:
try {
// 失敗する可能性のある処理
} catch (error) {
// エラーが発生した時の処理
}
JSON変換の基本:
JSON.stringify(オブジェクト)
→ オブジェクトを文字列に変換localStorage.setItem(キー, 値)
→ localStorageに保存localStorage保存の失敗例:
詰まったら... 補足資料: localStorage API詳解 の「詳細(3分)」セクションを参照してください。
このステップの理解をさらに深めるために、以下の補足資料も参照してください。
実装が完了したら、以下の手順で動作確認をしてください:
💾 localStorage保存完了: [{"id":...}]
のようなメッセージが表示されるか確認このステップを完了する前に、以下を確認してください:
STORAGE_KEY
に "taskList"
が正しく設定されているsaveTasksToStorage()
関数が正しく実装されているsaveTasksToStorage()
が呼び出されている🎉 おめでとうございます! タスクの自動保存機能が実装できました。
現在の状況:
次のステップでは、ページ読み込み時にlocalStorageからタスクを復元する機能を実装し、完全な永続化を実現しましょう!
関連する補足資料で理解を深める:
- 補足資料: JSON操作詳解 - JSON変換の詳細とエラー対策
- 補足資料: try-catch詳解 - エラーハンドリングの実践パターン
- 補足資料: ページ初期化パターン - 次のステップで使用する初期化処理