ページ内ナビ
概要
Immerはbase stateを直接書き換えるようなrecipe functionをProxy draft上で実行し、変更を反映した新しいimmutable stateを生成するutilityです。変更されていないbranchは共有されるため、deep copyを手書きせずにimmutable updateを表現できます。React/Reduxを含むstate management codeで利用できます。
特徴と向いている用途
公式資料に基づく紹介・実機未検証 · 内容確認日:
主な特徴
produceでmutation-style codeからimmutable next stateを作る
produce(base, recipe)はrecipeへdraftを渡し、draftへの変更からnext stateを生成します。元のbase stateは変更されません。
変更していないbranchをstructural sharingしてcopy量を抑える
draftで触れていないobject/arrayは元stateと共有されるため、nested updateでも全体deep copyを実装する必要がありません。
出典:[2]
patch・Map/Set・manual draft等を必要に応じて有効化できる
produceWithPatches、applyPatches、enableMapSet、createDraft/finishDraft等を提供し、state update workflowを拡張できます。
出典:[2]
向いている用途
nested stateをimmutableに保ちつつreducer/update codeを簡潔にしたい場合に向く
React state、Redux reducer、application state machine等でnested object/arrayを更新するとき、spread operatorの多重copyを減らしたい用途に適します。
出典:[1]
導入前の確認
参考にした公式資料
- [1]Immer v11.1.21 README(2026-10-05)
- [2]Immer v11.1.21 produce exports(2026-10-05)
- [3]Immer v11.1.21 release(2026-10-05)
- [4]Immer MIT license(2026-10-05)
編集部からの補足
ImmerはReact専用ではなくframework-agnosticです。Redux Toolkit等から間接利用されることも多いため、application側で直接dependencyを持つ必要があるか確認してください。
3ステップで試す
- 1
Immer 11.1.21を固定して導入する
一時npm projectへreview対象のImmerを固定して導入します。
demo=$(mktemp -d "${TMPDIR:-/tmp}/immer.XXXXXX") && cd "$demo" && npm init -y >/dev/null && npm install --save-exact immer@11.1.21 - 2
package versionを確認する
npm package metadataがreview対象versionと一致することを確認します。
test "$(node -e "console.log(require('immer/package.json').version)")" = '11.1.21' - 3
produceでbaseとnext stateを検証する
base stateを変更せず、mutation-style recipeからnext stateだけが更新されることを確認します。
test "$(node --input-type=module -e "import {produce} from 'immer'; const base={todo:{done:false}}; const next=produce(base,d=>{d.todo.done=true}); console.log(base.todo.done+':'+next.todo.done)")" = 'false:true'
成長
成長の推移 · 直近30日
28,983 Stars
推移データを蓄積中です。
開発アクティビティ
直近90日・週次
- Commit(直近30日)
- 12
- Open PR
- 13
開発アクティビティを蓄積中です。
Built with
カテゴリとタグ
カテゴリ
GitHubデータ
GitHubのデータGitHubの詳細データを見る
GitHub Topics
- immutable
- immutables
- reducer
- redux
- state-tree
- Stars
- 28,983
- Forks
- 888
- Watchers
- 151
- Open Issues
- 30
- Contributors
- 209
- 所有者種別
- Organization
- 主要言語
- JavaScript
- ライセンス
- MIT
- リポジトリ最終更新
- 2026/10/02
関連情報
関連記事を投稿するこのOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。
あわせて探訪
- jQuery Validation Plugin10,317 Stars
共通タグ 2件 · 共通カテゴリ 1件 · 同じ言語
既存formへrules・custom validator・ARIA連携を追加するclient-side validation plugin
JavaScript - i18next8,637 Stars
共通タグ 2件 · 共通カテゴリ 1件 · 同じ言語
翻訳キー・複数形・補間・resource loadingをUI frameworkから切り離すi18n core
JavaScript - jQuery Mouse Wheel Plugin3,914 Stars
共通タグ 2件 · 共通カテゴリ 1件 · 同じ言語
browserやdeviceごとの差が大きいmouse wheel deltaを正規化する
JavaScript - jQuery Migrate2,094 Stars
共通タグ 2件 · 共通カテゴリ 1件 · 同じ言語
削除・非推奨jQuery APIを一時復元し、warningから移行箇所を洗い出す
JavaScript - Bootstrap174,991 Stars
共通タグ 2件 · 共通カテゴリ 1件
responsive grid・utility・componentをCSS/Sassとnative JavaScriptから組み立てるfrontend framework
MDX - React Native126,797 Stars
共通タグ 2件 · 共通カテゴリ 1件
React componentをnative UIへ描画するmobile framework。0.87.1とframework-first導線を整理
C++
情報の誤りを報告
掲載内容に誤りや古い情報があればお知らせください。