カテゴリ: JavaScript 更新日: 2026/04/22

JavaScriptのスプレッド構文でオブジェクトをコピーする方法をわかりやすく解説!初心者向け

JavaScriptのオブジェクトをスプレッド構文でコピーする方法
JavaScriptのオブジェクトをスプレッド構文でコピーする方法

先生と生徒の会話形式で理解しよう

生徒

「先生、JavaScriptでオブジェクトをまるごとコピーしたいんですけど、どうすればいいですか?」

先生

「JavaScriptでは、スプレッド構文を使うと簡単にオブジェクトをコピーできます。コピーというのは、元のオブジェクトを壊さずに同じ内容を新しいオブジェクトに複製することです。」

生徒

「スプレッド構文って、具体的にはどんな書き方ですか?」

先生

「では、順を追って例を見ながら説明します!」

1. スプレッド構文とは?

1. スプレッド構文とは?
1. スプレッド構文とは?

スプレッド構文(...)は、配列やオブジェクトの中身を取り出して、別の配列やオブジェクトに展開するための便利な書き方です。例えばオブジェクトの場合は、元のオブジェクトのプロパティと値をまるごと新しいオブジェクトにコピーできます。


const original = { name: "太郎", age: 20 };
const copy = { ...original };
console.log(copy);

{ name: "太郎", age: 20 }

このように{ ...original }と書くだけで、新しいオブジェクトcopyが作れます。

2. スプレッド構文でプロパティを追加しながらコピーする方法

2. スプレッド構文でプロパティを追加しながらコピーする方法
2. スプレッド構文でプロパティを追加しながらコピーする方法

コピーすると同時に新しいプロパティを追加したい場合も、スプレッド構文なら簡単です。


const original = { name: "太郎", age: 20 };
const updated = { ...original, city: "東京" };
console.log(updated);

{ name: "太郎", age: 20, city: "東京" }

このようにコピーと追加を同時に行うことができます。元のオブジェクトは変更されません。

3. プロパティを上書きしてコピーする方法

3. プロパティを上書きしてコピーする方法
3. プロパティを上書きしてコピーする方法

コピーするときに一部の値だけ変更したい場合もスプレッド構文が便利です。


const original = { name: "太郎", age: 20, city: "大阪" };
const modified = { ...original, city: "東京" };
console.log(modified);

{ name: "太郎", age: 20, city: "東京" }

この例ではcityだけ上書きして、新しいオブジェクトmodifiedを作っています。元のoriginalはそのままです。

4. ネストしたオブジェクトのコピーについて

4. ネストしたオブジェクトのコピーについて
4. ネストしたオブジェクトのコピーについて

オブジェクトの中にさらにオブジェクトが入っている場合(ネストされたオブジェクト)、スプレッド構文は浅いコピー(shallow copy)になります。


const original = { name: "太郎", address: { city: "大阪", zip: "123-4567" } };
const copy = { ...original };
copy.address.city = "東京";
console.log(original.address.city);

"東京"

ネストしたオブジェクトはコピー先と元が同じ参照を持つため、元の値も変わります。深くコピーしたい場合は、別の方法(JSON.parse(JSON.stringify(...))など)を使います。

5. 配列と一緒にスプレッド構文を使う例

5. 配列と一緒にスプレッド構文を使う例
5. 配列と一緒にスプレッド構文を使う例

スプレッド構文はオブジェクトだけでなく配列でも使えます。オブジェクトと配列を組み合わせると便利です。


const originalArray = [1, 2, 3];
const newArray = [...originalArray, 4, 5];
console.log(newArray);

[1, 2, 3, 4, 5]

このように配列もコピーしつつ新しい要素を追加できます。

6. オブジェクトと配列を組み合わせた便利な例

6. オブジェクトと配列を組み合わせた便利な例
6. オブジェクトと配列を組み合わせた便利な例

オブジェクトの中に配列を持つ場合、スプレッド構文を使うと便利です。


const user = { name: "花子", scores: [80, 90] };
const newUser = { ...user, scores: [...user.scores, 100] };
console.log(newUser);

{ name: "花子", scores: [80, 90, 100] }

この例では、オブジェクトをコピーしつつ、配列の中身もコピーして新しい点数を追加しています。

7. まとめとしてスプレッド構文を覚えるポイント

7. まとめとしてスプレッド構文を覚えるポイント
7. まとめとしてスプレッド構文を覚えるポイント

ポイントは3つです。
1. { ...obj }でオブジェクトをコピーできる。
2. コピーと同時にプロパティを追加や上書きできる。
3. ネストされたオブジェクトは浅いコピーになるので注意。

初心者でもスプレッド構文を使えば、オブジェクトのコピーやデータの整理が簡単になります。実際の開発でもよく使われるテクニックなので覚えておきましょう。

まとめ

まとめ
まとめ

今回の記事では、JavaScriptのスプレッド構文を使ってオブジェクトや配列をコピーする方法について詳しく解説しました。スプレッド構文は、オブジェクトのプロパティや配列の要素を展開して新しいオブジェクトや配列を作るための非常に便利な書き方です。基本的なコピーから、プロパティの追加や上書き、ネストしたオブジェクトの扱い、配列との組み合わせなど、さまざまな場面で役立ちます。ポイントとしては、{ ...obj }でコピーできること、コピーと同時にプロパティを追加・上書きできること、そしてネストしたオブジェクトは浅いコピーになることに注意することです。特にネストしたオブジェクトの扱いは、元のオブジェクトに影響を与えないようにする場合、JSON.parse(JSON.stringify(obj))のような深いコピーを検討する必要があります。また、スプレッド構文は配列でも使えるため、オブジェクトと配列を組み合わせたデータ操作も簡単に行えます。これにより、初心者でもコードがシンプルになり、バグを減らすことができます。実務においても、データのコピーや変更が必要な場面は非常に多いため、このテクニックは必ず覚えておくと役立ちます。

サンプルプログラムの振り返り

例えば、基本のオブジェクトコピーは以下のように書きます。


const original = { name: "太郎", age: 20 };
const copy = { ...original };
console.log(copy);

{ name: "太郎", age: 20 }

コピーと同時にプロパティを追加したい場合は次のように書けます。


const updated = { ...original, city: "東京" };
console.log(updated);

{ name: "太郎", age: 20, city: "東京" }

ネストされたオブジェクトは浅いコピーになるため、元のオブジェクトに影響を与えることもあります。


const nested = { name: "太郎", address: { city: "大阪" } };
const shallowCopy = { ...nested };
shallowCopy.address.city = "東京";
console.log(nested.address.city);

"東京"

必要に応じて深いコピーを使うことも検討しましょう。

先生と生徒の振り返り会話

生徒

「先生、スプレッド構文を使うとオブジェクトや配列のコピーがこんなに簡単にできるんですね。でも、ネストしたオブジェクトは元のオブジェクトに影響するのは少し驚きました。」

先生

「そうですね。スプレッド構文は浅いコピーなので、ネストされたオブジェクトや配列の内部は元の参照を共有しています。だから変更すると元にも影響します。」

生徒

「なるほど、じゃあ完全にコピーしたい場合はどうすればいいですか?」

先生

「その場合は、JSON.parse(JSON.stringify(obj))のような深いコピーを使うか、ライブラリのlodashのcloneDeep関数を使う方法があります。」

生徒

「スプレッド構文は配列にも使えるんですね。配列のコピーや追加も同時にできるので便利です。」

先生

「その通りです。配列もコピーして新しい要素を追加できるので、データの整理や変更が簡単になります。オブジェクトと配列を組み合わせるとさらに応用が効きます。」

生徒

「今日学んだことをまとめると、スプレッド構文を使うとコピー、追加、上書きが簡単で、浅いコピーの特性を理解することが大事ですね。」

先生

「その通りです。開発現場では頻繁に使うテクニックなので、今回の例を元に実際にコードを書いて体感するのが上達への近道です。」

カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptの関数に型をつける方法(引数・戻り値)を初心者向けに徹底解説!
New2
TypeScript
TypeScriptの始め方:開発環境の構築手順【初心者向け】
New3
TypeScript
TypeScriptでExpressのミドルウェアを型安全に定義する方法!バックエンド開発の初心者向け解説
New4
JavaScript
JavaScriptのfilterメソッドで条件に合う要素を抽出する方法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptでフォームの値を取得する方法を徹底解説!valueプロパティの使い道
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptでHTML5バリデーションAPIを使いこなす!初心者でもわかるフォーム入力チェック
No.3
Java&Spring記事人気No3
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.4
Java&Spring記事人気No4
TypeScript
TypeScript学習におすすめの無料教材・リファレンスサイト【初心者向け】
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptで要素を削除する方法(removeChild, removeなど)
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptの現在日時を取得する方法を完全ガイド!初心者でもわかるDate.now()とnew Date()
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptでオブジェクト指向のカプセル化を学ぶ!初心者でもわかるクラスとプロパティの保護方法