記事内にはプロモーションが含まれています

【Ruby】配列の要素を削除するメソッドまとめ

【Ruby】配列の要素を削除するメソッドまとめ Ruby

Rubyで配列(Array)を操作していると、

「特定の値を消したい」
「条件に合うものだけを取り除きたい」
「重複をなくしたい」

といった場面に頻繁に遭遇します。

Rubyは、プログラマにとって快適な言語として設計されているため、配列の削除に関するメソッドだけでも数多くの種類が用意されています。

しかし、選択肢が多い分、「結局どれを使えばいいの?」と迷ってしまうことも少なくありません。
また、メソッドによっては元の配列を破壊的に変更してしまうものもあるため、使い分けには注意が必要です。

この記事では、Rubyにおける配列要素の削除方法について、基本的な値指定による削除から、インデックス指定、条件による一括削除、さらには重複や nil の除去まで、現時点でのベストプラクティスをサンプルコード付きで徹底解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はプログラミングスクールを運営
  • モットーは「利他の精神」
💻 本記事の検証環境(2026年2月確認)
  • OS:Windows 11 / macOS Sequoia
  • IDE:Visual Studio / VS Code / IntelliJ IDEA
  • その他:Chrome DevTools / 各言語最新安定版

※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。

特定の「値」を指定して削除する delete

まずは、配列の中から特定の値を指定して削除する最も基本的な方法です。
delete メソッドを使うと、指定した値と一致するすべての要素が配列から取り除かれます。

deleteメソッドの基本的な使い方

fruits = ["apple", "banana", "orange", "banana", "kiwi"]

# "banana" をすべて削除
removed_item = fruits.delete("banana")

p fruits
puts "削除された要素: #{removed_item}"

実行結果

["apple", "orange", "kiwi"]
削除された要素: banana

delete メソッドの引数に削除したい値を渡すことで、配列内にある一致する要素がすべて消去されます。

このコードでは、"banana" が2つ含まれていましたが、実行後には両方とも削除されていることがわかります。

また、delete メソッドは「削除された要素の値」を戻り値として返します。
もし指定した値が見つからなかった場合は nil が返ります。

「場所(インデックス)」を指定して削除する delete_at

「リストの3番目を消したい」というように、値ではなく要素の位置を指定して削除したい場合は delete_at メソッドを使用します。

delete_atメソッドの使い方

programming_languages = ["Ruby", "Python", "Java", "PHP", "Go"]

# インデックス2(3番目の要素)である "Java" を削除
programming_languages.delete_at(2)

p programming_languages

実行結果

["Ruby", "Python", "PHP", "Go"]

Rubyの配列のインデックスは 0 から始まります。
そのため、delete_at(2) を実行すると、0、1、2番目にあたる3つ目の要素(この例では "Java")が削除されます。

範囲外のインデックスを指定した場合は、何も削除されずに nil が返されます。

先頭や末尾を削除する shift / pop

特定の位置の中でも、「最初」や「最後」を削除したい場合には、専用の高速なメソッドが用意されています。

  • shift: 配列の先頭の要素を削除して返す。
  • pop: 配列の末尾の要素を削除して返す。
numbers = [1, 2, 3, 4, 5]

first = numbers.shift # 先頭の 1 を削除
last = numbers.pop    # 末尾の 5 を削除

p numbers
puts "先頭: #{first}, 末尾: #{last}"

実行結果

[2, 3, 4]
先頭: 1, 末尾: 5

キュー(待ち行列)やスタック構造として配列を扱う場合に非常に便利です。

「条件」に一致する要素を一括削除する delete_if / reject!

「偶数の数字だけを消したい」「文字数が3文字以下の単語を消したい」といった、複雑な条件で削除を行いたい場合は、ブロック付きのメソッドを使用します。

delete_if(または reject!)の使い方

delete_if メソッドは、ブロック内の評価結果が true になった要素をすべて削除します。
これは自分自身を変更する「破壊的メソッド」です。

scores = [55, 80, 45, 90, 30, 75]

# 50点未満のスコアを削除する
scores.delete_if do |score|
  score < 50
end

p scores

実行結果

[55, 80, 90, 75]

ブロック変数 |score| に配列の要素が一つずつ渡され、score < 50 という条件式が評価されます。
この条件に合致した(true になった)4530 が配列から削除されました。

なお、reject! もほぼ同じ動作をしますが、変更がなかった場合に nil を返す点が delete_if(常にselfを返す)とは異なります。

元の配列を残したい(非破壊的にしたい)場合は reject(!なし)を使いましょう。

配列から「重複」した要素を取り除く uniq

リストの中に同じデータが複数含まれている場合、それを一つにまとめたいことがあります。
そんな時は uniq メソッドを使います。

uniqメソッドでユニーク(一意)な配列にする

ids = [101, 102, 101, 103, 102, 104]

# 重複を取り除いた新しい配列を作成
unique_ids = ids.uniq

p unique_ids
p ids # 元の配列は変わらない

実行結果

[101, 102, 103, 104]
[101, 102, 101, 103, 102, 104]

uniq メソッドを呼び出すと、重複した値が削除され、各種1つずつだけが残った新しい配列が返されます。
元の配列 ids は変更されていません。

もし元の配列自体を書き換えたい場合は、破壊的メソッドである uniq! を使用してください。

配列から「nil」だけを削除する compact

データベースからの取得結果や、処理の過程で配列の中に nil(値なし)が混ざり込んでしまうことがあります。

これらをきれいに掃除するには compact メソッドが最適です。

compactメソッドの使い方

data = ["A", nil, "B", nil, nil, "C"]

# nil を取り除く
clean_data = data.compact

p clean_data

実行結果

["A", "B", "C"]

compact を使うと、配列内に存在するすべての nil が削除されます。

nil 以外の要素(例えば空文字 ""0false など)は削除されずに残ります。
あくまで nil だけをターゲットにしたメソッドである点に注意しましょう。

こちらも破壊的メソッドの compact! が用意されています。

複数の要素を指定して一括削除する(引き算)

最後に、別の配列を使って「これに含まれる要素を全部消して」という指定をする方法を紹介します。
Rubyでは配列同士の引き算(差集合)が可能です。

マイナス演算子を使った一括削除

all_tags = ["Ruby", "Python", "PHP", "Java", "Go", "Rust"]
remove_tags = ["PHP", "Java"]

# all_tags から remove_tags に含まれる要素を削除
result = all_tags - remove_tags

p result

実行結果

["Ruby", "Python", "Go", "Rust"]

配列A - 配列B と記述することで、配列Aの中から配列Bに含まれる要素をすべて取り除いた新しい配列が生成されます。

非常に直感的で読みやすいコードになるため、特定の除外リストに基づいてフィルタリングしたい場合などに推奨されるテクニックです。

Rubyのスキルを活かして年収を上げる方法

以上、Rubyで配列の要素を削除するメソッドについて解説してきました。

なお、Rubyのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

Rubyエンジニアの年収や単価は高い傾向にあるため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。
併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなRubyの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
エンジニアのキャリア・スキルアップ相談窓口
当ブログの読者に選ばれている、実績豊富な転職エージェントを厳選しました。
【転職】年収・環境を改善したい
年収アップにこだわりたい方 (平均アップ額138万円の実績)
未経験・経験者問わず幅広く探したい方
業界に精通した担当者に相談したい方
ゲーム業界への転職を志望する方
エンジニア未経験からキャリアを築く方
【独立】フリーランスとして稼ぎたい
国内最大級のフリーランス案件数から比較したい方
週1〜3日など柔軟な働き方を希望する方
【学習】スキルに不安のある方向け(格安スクール「デイトラ」)