【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

「...」って・・・? ES2015で追加されたスプレッド構文について解説します

お疲れ様です!
システム開発部の山田です。

今回は、ES2015で追加された配列などを展開する際に使用できるスプレッド構文について解説していきます。

スプレッド構文とは?

「...」を配列やオブジェクトの前に記載して使用する物がスプレッド構文です。
配列やオブジェクトなどを展開したい場合に使用する事ができます。
この機能は配列に対してはES2015で、オブジェクトに対してはES2018で追加された新機能です!
具体的には、関数呼び出し時複数の引数を指定する際や、
配列やオブジェクトの複製をしたい場合に使用できます。
以降では実際のコードを用いて動きを確認していきたいと思います。

配列での使用

新しい要素を追加した配列を作成

const fruits1 = ["りんご", "ばなな", "もも"];

const newFruits1 = ["はっさく", ...fruits1];
console.log(newFruits1);
// 結果:['はっさく', 'りんご', 'ばなな', 'もも']

結合した配列を作成

const fruits1 = ["りんご", "ばなな", "もも"];
const fruits2 = ["ぶどう", "みかん"];

const newFruits2 = [...fruits1, ...fruits2];
console.log(newFruits2);
// 結果:['りんご', 'ばなな', 'もも', 'ぶどう', 'みかん']

スプレッド構文を使用した場合のコピー

const fruits1 = ["りんご", "ばなな", "もも"];
const spreadArray = [...fruits1];

console.log(spreadArray === fruits1); // 結果:false

fruits1.push('すいか')

console.log(fruits1); // 結果:['りんご', 'ばなな', 'もも', 'すいか']
console.log(spreadArray); // 結果:['りんご', 'ばなな', 'もも']

変数fruits1と変数spreadArrayを厳密等価演算子(===)で比較した場合falseになります。
これは変数spreadArrayには値のみがコピーされている事が理由です。
試しに、変数fruits1に「すいか」を追加した場合、fruits1には反映されていますが、値のみをコピーしている変数spreadArrayには反映されていない事からも確認ができます。

オブジェクトでの使用

新しい要素を追加したオブジェクトを作成

const user = { id: 1, name: "太郎", age: 20 };

const addHeightUser = { height: 170, ...user };
console.log(addHeightUser);
// 結果:{height: 170, id: 1, name: '太郎', age: 20}

要素を変更したオブジェクトを作成

const user = { id: 1, name: "太郎", age: 20 };

const changeNameUser = { ...user, name: "次郎" };
console.log(changeNameUser);
// 結果:{id: 1, name: '次郎', age: 20}

重複しているキーに関しては、最後に定義した物が有効になる

結合したオブジェクトを作成

const user = { id: 1, name: "太郎", age: 20 };
const userHobby = { hobby: "ボードゲーム" };

const data = { ...user, ...userHobby };
console.log(data);
// 結果:{id: 1, name: '太郎', age: 20, hobby: 'ボードゲーム'}

スプレッド構文を使用した場合のコピー

const user = { id: 1, name: "太郎", age: 20 };
const spreadObj = { ...user };

console.log(spreadObj === user); // 結果:false

配列と同様、変数spreadObjには値のみがコピーされているため、厳密等価演算子(===)で比較した場合falseになります。

メソッドでの使用

複数の引数へ挿入する際に配列を展開して使用する事が可能

const array = ["太郎", 20];

const display = (userName, userAge) =>;
  console.log(`名前は${userName}、年齢は${userAge}`);

display(...array) // 結果:名前は太郎、年齢は20

スプレッド構文を使用し可変長引数とする事が可能

const display = (...numbers) => console.log(numbers);

display(1, 2, 3); // 結果:[1, 2, 3]
display(1, 2, 3, 4); // 結果:[1, 2, 3, 4]

変数の値は配列として取得できる

まとめ

今回はES2015から追加されたjavascriptで配列やオブジェクトの展開を行えるスプレッド構文について解説いたしました。
配列やオブジェクトの値をコピーする場合に、簡単に記載する事ができるため、今後も積極的に使用していきたいです。

最後に

私が所属するシステム開発のサービスサイト「SEKARAKU Lab(セカラク ラボ)」を開設しました。
ビヨンドは、サーバーの設計・構築から運用までをワンストップでお任せいただけますので、サーバーサイド開発でお困りの方はお気軽にお問い合わせください。
SEKARAKU Lab:https://sekarakulab.beyondjapan.com/

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
8
読み込み中...
8 票, 平均: 1.00 / 18
2,788
X facebook はてなブックマーク pocket
【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author

山田雄貴

2021年株式会社ビヨンド入社
趣味はカラオケやボードゲーム
ボードゲームのが一つの棚で収まりきらなくなったため、新しい棚を購入したいが、家に棚を置く場所が無く悲しんでいる。
金型の設計や営業の経験もあり、多種多様な経験を積みサーバーサイドエンジニアの仕事に落ち着いている。
現在はPHPやPythonを用いたサーバーサイドの開発に従事している。
将来的にはフロントエンドの言語も習得したく、ReactベースのフロントエンドフレームワークであるNext.jsが気になっている。