文字列と数値を + で連結すると TypeError になる
Rubyの+演算子は文字列同士、数値同士でしか使えません。文字列に数値を+で連結しようとすると、暗黙の型変換が行われずTypeErrorになります。
エラーメッセージの読み方
main.rb:2:in `+': no implicit conversion of Integer into String (TypeError)
main.rb- ファイル名
2- 行番号 — 実際にクラッシュした行
+- 発生場所 — <main> ならトップレベル、メソッド名ならそのメソッドの中
TypeError- 例外クラス — 何が起きたか。ここを検索するのが最短です
no implicit conversion of Integer into String- 詳細メッセージ — どの値が問題だったか
このエラーが出る典型パターン
パターン1
1 age = 20 2 puts "Age: " + age ^
main.rb:2:in `+': no implicit conversion of Integer into String (TypeError)
from main.rb:2:in `<main>'
文字列の+は数値を自動で文字列に変換してくれません。to_sで明示的に変換する必要があります。
直し方: age を age.to_s にします。
広告
広告スロット(未設定)
パターン2
1 count = 5 2 puts "Count is " + count ^
main.rb:2:in `+': no implicit conversion of Integer into String (TypeError)
from main.rb:2:in `<main>'
整数のまま文字列と+で連結しようとすると、暗黙の型変換が行われずTypeErrorになります。
直し方: count を count.to_s にします。
パターン3
1 year = 2026 2 puts "Year " + year ^
main.rb:2:in `+': no implicit conversion of Integer into String (TypeError)
from main.rb:2:in `<main>'
数値を文字列に混ぜたい場合は、必ずto_sで変換してから+を使う必要があります。
直し方: year を year.to_s にします。
パターン4
1 score = 100 2 puts "Score: " + score ^
main.rb:2:in `+': no implicit conversion of Integer into String (TypeError)
from main.rb:2:in `<main>'
+は文字列同士、数値同士でしか使えません。異なる型を混ぜるにはto_sによる変換が必要です。
直し方: score を score.to_s にします。
パターン5
1 temp = 36 2 puts "Temp: " + temp ^
main.rb:2:in `+': no implicit conversion of Integer into String (TypeError)
from main.rb:2:in `<main>'
他言語の+が何でも連結してくれる感覚のままだと、Rubyでは必ずこのエラーにぶつかります。
直し方: temp を temp.to_s にします。
よくある誤解
「+は何でもいい感じに連結してくれるはず」という思い込みは誤りです。数値を文字列に混ぜたい場合は to_s で明示的に文字列へ変換する必要があります。
まとめ
文字列と数値を + で連結すると TypeError になるは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。