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

Rubyのtake/drop/take_while/drop_whileを完全ガイド!配列を切り出す基本テクニック

take/drop/take_while/drop_while:先頭・条件で切り出すテクニック
take/drop/take_while/drop_while:先頭・条件で切り出すテクニック

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

生徒

「Rubyで、たくさんのデータが入ったリストの先頭から数個だけ取り出したり、逆にいらない部分を捨てたりする方法はありますか?」

先生

「それなら、takeメソッドやdropメソッドを使うのが一番簡単ですよ。さらに条件を使って切り出すtake_whileなども非常に便利です。」

生徒

「切り出す方法にもいろいろあるんですね!具体的にはどう使い分けるのでしょうか?」

先生

「個数で指定するか、条件で指定するかという違いがあります。初心者の方にもわかりやすく、基本的な使い方から解説していきますね!」

1. データの切り出しとは?配列操作の基本を学ぼう

1. データの切り出しとは?配列操作の基本を学ぼう
1. データの切り出しとは?配列操作の基本を学ぼう

プログラミングを学んでいると、大量にあるデータの中から「最初の3つだけ表示したい」とか「特定の条件を満たさなくなった以降は無視したい」といった場面によく遭遇します。これをデータの切り出しスライスと呼びます。

Rubyという言語では、データの集まりを配列(はいれつ)という箱に入れて管理します。この配列から必要な部分だけをスマートに取り出すための道具が、今回紹介するtake(テイク)、drop(ドロップ)、take_while(テイク・ホワイル)、drop_while(ドロップ・ホワイル)です。パソコンを触り始めたばかりの方でも、言葉の意味から想像すればすぐにマスターできるはずですよ。

2. takeメソッドで先頭から指定した数だけ取り出す

2. takeメソッドで先頭から指定した数だけ取り出す
2. takeメソッドで先頭から指定した数だけ取り出す

takeは英語で「取る」という意味です。その名の通り、配列の先頭から「指定した数だけ」データを取り出します。例えば、最新のニュース記事が100件あるリストから、トップページの表示用に最初の3件だけが欲しい、といったときに使います。

実際のプログラムを見てみましょう。配列の名前の後に.take(個数)と書くだけで完了です。


ranking = ["金メダル", "銀メダル", "銅メダル", "4位", "5位"]

# 先頭から3つだけ取り出す
top_three = ranking.take(3)

puts "表彰台に登るのは: #{top_three}"

実行結果は以下のようになります。


表彰台に登るのは: ["金メダル", "銀メダル", "銅メダル"]

このように、指定した数だけを前から順番に拾ってきて、新しいリストを作ってくれます。元のrankingというリストは壊されずにそのまま残るので、安心して使うことができます。

3. dropメソッドで先頭から指定した数だけ捨てる

3. dropメソッドで先頭から指定した数だけ捨てる
3. dropメソッドで先頭から指定した数だけ捨てる

dropは「落とす」や「捨てる」という意味です。takeとは逆の動きをし、先頭から指定した数だけを除外した残りを取得します。例えば、1位のデータはもう紹介したので、2位以降のリストが見たい、という場合などに役立ちます。


numbers = [1, 2, 3, 4, 5]

# 先頭から2つを捨てて、残りを取得する
remaining_numbers = numbers.drop(2)

puts "残った数字は: #{remaining_numbers}"

実行結果は以下のようになります。


残った数字は: [3, 4, 5]

この命令を使うと、面倒な計算をせずに「最初の数件を飛ばす」という処理が簡単に書けます。ウェブサイトの「次のページ」を表示するときなどに、すでに表示した分を飛ばす目的でよく使われます。

4. take_whileメソッドで条件に合う間だけ取り出す

4. take_whileメソッドで条件に合う間だけ取り出す
4. take_whileメソッドで条件に合う間だけ取り出す

ここから少し応用編です。take_whileの「while」は「~の間ずっと」という意味です。つまり、「ある条件を満たしている間だけ、先頭から取り続ける」という動作をします。条件に当てはまらないデータが現れた瞬間に、取り出すのをやめてしまいます。

例えば、気温のリストがあって、氷点下(0度未満)が続いている期間だけのデータを抜き出したい場合などに使います。


temperatures = [-3, -1, -2, 5, -4, 0]

# 0度未満(氷点下)が続いている間だけ取り出す
freezing_days = temperatures.take_while do |temp|
  temp < 0
end

puts "氷点下の期間のデータ: #{freezing_days}"

実行結果は以下のようになります。


氷点下の期間のデータ: [-3, -1, -2]

注目してほしいのは、リストの後半にある-4です。これも0より小さいですが、その前の5で条件が途切れてしまったため、take_whileはそこで終了し、-4は取り出されません。これがselect(条件に合うものを全部選ぶ)との大きな違いです。

5. drop_whileメソッドで条件に合う間だけ捨てる

5. drop_whileメソッドで条件に合う間だけ捨てる
5. drop_whileメソッドで条件に合う間だけ捨てる

drop_whileは、「条件を満たしている間は捨て続け、条件に合わないものが出たら、そこから最後までを全部取る」という動きをします。仕事のタスクリストで「完了」済みのものが先頭に並んでいるとき、まだ「未完了」のものが出てきたところから先を全部取得したい、といった場面で便利です。


scores = [100, 95, 88, 40, 70, 55]

# 80点以上の高い点数が続いている間は捨てる
low_score_start = scores.drop_while do |score|
  score >= 80
end

puts "最初に80点を下回ってからのリスト: #{low_score_start}"

実行結果は以下のようになります。


最初に80点を下回ってからのリスト: [40, 70, 55]

40点が出た瞬間に「捨てる」作業をやめ、その後の70点や55点が80点より低くても高くても、すべて結果に含まれるようになります。まさに「壁を突破するまで待つ」ようなイメージですね。

6. 似たようなメソッドselectとの違いを理解しよう

6. 似たようなメソッドselectとの違いを理解しよう
6. 似たようなメソッドselectとの違いを理解しよう

初心者の方がよく迷うのが、以前に学習したかもしれないselectとの違いです。selectは「リストの最後まで全部見て、条件に合うものを全部拾う」という、網で救い上げるような作業です。

それに対して、今回学んだtake_whiledrop_whileは、「並び順」をとても重視します。先頭から見ていって、条件が途切れたらそこで仕事はおしまいです。データが並び替えてある名簿(五十音順など)から、特定の範囲を切り出すときには、最後まで探さない分、非常に効率よく動作します。こうした違いを知っておくと、プログラミングの腕がぐんと上がります。

7. パソコン初心者でも失敗しないための注意点

7. パソコン初心者でも失敗しないための注意点
7. パソコン初心者でも失敗しないための注意点

Rubyのコードを書くときは、いくつかの小さなルールを守る必要があります。これを知らないと、プログラムが動かずにエラーという「注意書き」が出てきてしまいます。

  • 半角文字を使う: プログラムで使う.(ドット)や( )(かっこ)、数字はすべて半角で書きます。全角(日本語入力の状態)だとコンピュータは理解できません。
  • doとendを忘れない: take_whileなどを使うときの「条件の範囲」はdoで始まりendで終わるのが基本です。これを忘れると、どこまでが条件なのかコンピュータが迷ってしまいます。
  • 破壊的ではないことを知る: これらの命令を使っても、元の配列の中身が書き変わることはありません。切り出した結果を新しい名前(変数)に保存して使うようにしましょう。

最初は難しく感じるかもしれませんが、一行ずつゆっくり入力していけば大丈夫です。エラーが出ても、それは失敗ではなく「正しい書き方を学ぶチャンス」ですよ。

8. どんな場面で役立つの?実例レシピ

8. どんな場面で役立つの?実例レシピ
8. どんな場面で役立つの?実例レシピ

最後に、これらのメソッドを実生活やアプリ開発のどんな場面で使うのか、具体的なイメージを膨らませてみましょう。プログラミングの命令は、使い道を知ることでより深く理解できます。

  • ブログの抜粋表示: 記事の内容が長いとき、最初の50文字だけtakeして表示する。
  • 深夜のデータ除外: 時間順に並んだログから、日付が変わるまでのデータ(条件を満たす間)をdrop_whileでスキップする。
  • 上位ランカーの抽出: スコア順に並んだプレイヤー名簿から、トップ10だけをtake(10)で取り出す。

このように、特定の範囲や件数に注目してデータを加工するとき、これらのメソッドは最強の武器になります。Rubyは人間に読みやすい言葉で作られているので、ぜひ声に出して「先頭から3つテイクする!」と唱えながらコードを書いてみてください。きっと楽しく学習が進むはずです。

カテゴリの一覧へ
新着記事
New1
Ruby
Rubyで学ぶビット演算入門:&・|・^・~・<<・>>の基礎と実例
New2
Rails
RESTとRailsの関係を徹底解説!resources設計と7つの標準アクションを初心者向けにわかりやすく解説
New3
データベース
MySQLアーキテクチャ入門!初心者向けに基本構造と仕組みを徹底解説
New4
Ruby
Rubyのtake/drop/take_while/drop_whileを完全ガイド!配列を切り出す基本テクニック
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyのreduceとinject入門!合計計算や集計を初心者向けに分かりやすく解説
No.2
Java&Spring記事人気No2
Ruby
Rubyの始め方ガイド:インストールから最初のHello Worldまで(Windows/Mac/Linux)
No.3
Java&Spring記事人気No3
Ruby
Rubyの文字列エンコーディング完全ガイド!Encoding・force_encoding・encodeを初心者向け解説
No.4
Java&Spring記事人気No4
データベース
PostgreSQLのWHERE句を徹底解説!初心者でもわかるSQLデータ抽出の基本
No.5
Java&Spring記事人気No5
Ruby
Rubyのfind/detect/find_indexを徹底解説!目的のデータを素早く探す方法
No.6
Java&Spring記事人気No6
データベース
PostgreSQLで順位付け!ROW_NUMBER関数の使い方を初心者向けに徹底解説
No.7
Java&Spring記事人気No7
Ruby
Rubyのselect/reject/filterの使い方を完全解説!初心者向けの条件抽出レシピ
No.8
Java&Spring記事人気No8
Ruby
Rubyで比較演算子を完全解説!==・===・<=>・eql? の使い分け