ホーム › エラー解決 › Ruby › IndexError
Ruby ERROR

Ruby IndexError の原因と解決法

Array#fetchで配列の範囲外のインデックスを指定すると発生するエラーです。配列のサイズと添字のずれが原因です。

このエラーメッセージ

IndexError: index 5 outside of array bounds: -3...3

原因

❌ エラーになるコード

NG
fruits = ["りんご", "みかん", "ぶどう"]
puts fruits.fetch(5)  # 要素は3つ(0〜2)しかない

✅ 修正したコード

OK
fruits = ["りんご", "みかん", "ぶどう"]
puts fruits.fetch(2)

# 範囲外の可能性があるならデフォルト値を指定
puts fruits.fetch(5, "該当なし")
▶ 修正済みコードを実行エディタで開く
progoのRuby実行環境(インストール不要・登録不要)でその場で動作を確認できます。

解決のポイント

配列の添字は0始まりで、3要素なら有効なのは0〜2です。範囲外を指定する可能性があるならfetch(添字, デフォルト値)で代替値を返せます。fruits.sizeでサイズを確認し、if i < fruits.sizeのような範囲チェックを入れるのも確実です。

よくある質問

fruits[5] だとエラーにならない?
[]は範囲外に対してnilを返すためエラーになりません。その代わりnilに気づかず後続処理でNoMethodErrorになることがあります。
負のインデックスはどうなる?
-1が最後の要素を指します。3要素なら-3までが有効で、fetch(-4)はIndexErrorになります。