カテゴリ: Ruby 更新日: 2026/01/02

Ruby配列の破壊的メソッドと非破壊的メソッドを完全理解!初心者でも安全に使える配列操作

破壊的/非破壊的メソッドの違いと!の注意点【安全に使う】
破壊的/非破壊的メソッドの違いと!の注意点【安全に使う】

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

生徒

「Rubyの配列を使っていたら、いつの間にか中身が変わっていて混乱しました…」

先生

「それは破壊的メソッドを使った可能性がありますね。Rubyでは配列を直接変える操作と、変えない操作がはっきり分かれています。」

生徒

「破壊的って怖そうです…。どうやって見分ければいいんですか?」

先生

「名前の最後にある記号が大きなヒントになります。順番にやさしく見ていきましょう。」

1. 破壊的メソッドと非破壊的メソッドとは?

1. 破壊的メソッドと非破壊的メソッドとは?
1. 破壊的メソッドと非破壊的メソッドとは?

Rubyの配列には破壊的メソッド非破壊的メソッドという二つの考え方があります。 破壊的メソッドとは、元の配列そのものを書き換えてしまう操作のことです。 一方で非破壊的メソッドは、元の配列はそのままで、新しい配列を作る操作を指します。

例えるなら、紙に書いたメモを消しゴムで消して書き直すのが破壊的、 コピーを取ってから編集するのが非破壊的です。 プログラミング未経験の方は、まず「元のデータが変わるかどうか」を意識することがとても大切です。

2. !(エクスクラメーション)が付くメソッドの意味

2. !(エクスクラメーション)が付くメソッドの意味
2. !(エクスクラメーション)が付くメソッドの意味

Rubyの配列メソッドには、名前の最後に!が付いているものがあります。 この記号はエクスクラメーションマークと呼ばれ、 「元の配列を直接変更する可能性がある」という強い注意のサインです。

例えば compactcompact! は見た目が似ていますが、動きは大きく異なります。 compactnil を除いた新しい配列を返し、 compact! は元の配列から nil を削除します。


numbers = [1, nil, 2, nil, 3]
result = numbers.compact
p numbers
p result

[1, nil, 2, nil, 3]
[1, 2, 3]

この例では、元の配列は変わっていません。 これが非破壊的メソッドの特徴です。

3. 破壊的メソッドを使った場合の動き

3. 破壊的メソッドを使った場合の動き
3. 破壊的メソッドを使った場合の動き

次に compact! を使った場合を見てみましょう。 同じ処理に見えても、結果は大きく変わります。


numbers = [1, nil, 2, nil, 3]
numbers.compact!
p numbers

[1, 2, 3]

元の配列から nil が完全に消えています。 このように破壊的メソッドは便利ですが、 意図せずデータを変えてしまう危険もあります。

4. よく使われる破壊的・非破壊的メソッドの例

4. よく使われる破壊的・非破壊的メソッドの例
4. よく使われる破壊的・非破壊的メソッドの例

Rubyの配列では、次のような組み合わせがよく登場します。

  • map / map!
  • sort / sort!
  • uniq / uniq!
  • compact / compact!

非破壊的メソッドは「安全重視」、 破壊的メソッドは「処理を軽くしたい」「上書きで問題ない」場合に使われます。 初心者のうちは、まず非破壊的メソッドを選ぶと安心です。

5. 破壊的メソッドを安全に使うための考え方

5. 破壊的メソッドを安全に使うための考え方
5. 破壊的メソッドを安全に使うための考え方

破壊的メソッドを使う前に、 「この配列は後で使い回すのか?」と自分に問いかけてみてください。 もし別の処理でも使うなら、非破壊的メソッドを選ぶ方が安全です。

Rubyの配列操作では、 データを守る意識がとても重要です。 ! が付いたメソッドは便利な反面、扱いには注意が必要だということを覚えておきましょう。

関連記事:
カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
Rails
RailsモデルとActive Record基礎|クエリログの読み方を理解してEXPLAIN・joins・includesの違いを学ぼう
No.8
Java&Spring記事人気No8
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説