0Pricing
React Academy · レッスン

React で localStorage を読み書きする

React hooks から安全に localStorage にアクセスし、SSR 環境に対応して、複雑な状態をシリアライズします。

「React で localStorage を読み書きする」はCoddyKit上の無料React Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

localStorage API

localStorage は、4 つの基本メソッド、setItem(key, value)、getItem(key)、removeItem(key)、clear() を備えた、ブラウザー組み込みのストレージです。データはページの再読み込み後もブラウザーの再起動後も保持されます。

window オブジェクト上に存在し、オリジンごとに分離されます。つまり、ドメインごとに独立したストレージが用意されます。

同期的に実行されメインスレッドをブロックする

localStorage のすべての呼び出しは、メインスレッド上で同期的に実行されます。大量のデータを読み書きすると、描画がブロックされ、UI の動作がぎこちなくなることがあります。

そのため、保存する値は小さく保ち、キー入力やスクロールのイベントが発生するたびに書き込むことは避けてください。

文字列のみを保存する

localStorage に保存できるのは文字列だけです。オブジェクトや配列を保存するには、setItem を呼び出す前に JSON.stringify(value) でシリアライズする必要があります。

文字列以外の値を直接保存すると文字列に変換されるため、オブジェクトは役に立たない [object Object] という文字列になります。

エラーハンドリング付きでパースする

読み取るときは JSON.parse(localStorage.getItem(key)) を呼び出しますが、保存された文字列が壊れていたり、別のソースによって書き込まれていたりすると、パースで例外が発生することがあります。

パース処理を try/catch で囲み、デフォルト値にフォールバックしてください。これにより、不正なエントリーがコンポーネントをクラッシュさせるのを防げます。

利用可能かどうかを確認する

localStorage は常に利用できるとは限りません。サーバーサイドレンダリング中は window が存在せず、一部のプライベートブラウジングモードでは書き込み時に例外が発生します。機能の有無を確認してアクセスを保護してください。

安全なテスト方法は、ダミーキーを設定して削除する try/catch を使い、例外が発生した場合は false を返すことです。

約5MBの容量制限

ほとんどのブラウザーでは、オリジンごとのlocalStorageの容量が約5MBに制限されています。これを超えて書き込もうとすると、QuotaExceededErrorがスローされます。

そのため、localStorageは小さなデータには適していますが、画像や大規模なデータセット、キャッシュしたAPIレスポンスには向いていません。

適切なデータ

適しているのは、UIやユーザーの状態に関する、小さく機密性のないデータです。たとえば、テーマ設定、サイドバーを折りたたんだ状態、最後に使用したフィルター、閉じたバナー、未保存のフォームの下書きなどです。

これらは再読み込み後も保持したい値ですが、サーバーへの往復通信を必要としません。

不適切なデータ

トークンやパスワードのような秘密情報は保存しないでください。ページ上のどのスクリプトからもlocalStorageを読み取れるため、XSSに対して脆弱になるからです。また、大きなオブジェクトや、サーバーを正とする状態も保存しないでください。

機密性の高い認証データはhttpOnly Cookieに保存し、正規のデータはサーバーに置きます。

localStorageとsessionStorageの比較

両者は同じAPIを共有しますが、sessionStorageはタブを閉じると消去され、タブ間で共有されません。localStorageは無期限に保持され、同じオリジンのすべてのタブで共有されます。

短期間だけタブ単位で使うデータにはsessionStorageを、長期間保持する設定にはlocalStorageを選びます。

CookieおよびIndexedDBとの比較

Cookieは小さく、すべてのHTTPリクエストとともに送信されるため、認証には適していますが、一般的なデータに使うと帯域幅を無駄に消費します。IndexedDBは、5MBの制限を大幅に超える大規模な構造化データに適した非同期データベースです。

サーバーが読み取る認証情報にはCookie、小さなクライアント側の設定にはlocalStorage、大きなデータや複雑なデータにはIndexedDBを選びます。

シンプルな読み書きパターン

最小限のヘルパーでは、localStorage.setItem(key, JSON.stringify(value))を使って書き込み、JSON.parse(localStorage.getItem(key))を囲む保護されたtry/catchを使って読み込みます。失敗時にはデフォルト値を返します。

この小さなラッパーにより、シリアライズとエラー処理を1か所にまとめられます。

理解度チェック

localStorageで扱うデータ型について理解度を確認しましょう。

まとめ

localStorageのAPIと、それが同期的で文字列のみを扱い、容量が約5MBに制限されることを学びました。また、安全にパースする方法や、SSRとプライベートモードで利用可能か確認する方法も学びました。

さらに、sessionStorage、Cookie、IndexedDBと比較し、適切な保存先を選ぶ方法も学びました。

よくある質問

「React で localStorage を読み書きする」レッスンは無料ですか?

はい。「React で localStorage を読み書きする」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「React で localStorage を読み書きする」で何を学びますか?

React hooks から安全に localStorage にアクセスし、SSR 環境に対応して、複雑な状態をシリアライズします。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「React で localStorage を読み書きする」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. React で localStorage を読み書きする
  2. 状態を localStorage と同期する
  3. タブ間で Storage イベントを処理する
  4. sessionStorage、IndexedDB、適切な API の選び方
← React Academyに戻る