文字列と数値を + で連結すると 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 で明示的に文字列へ変換する必要があります。
実務での勘所
Rubyは全体として非常に柔軟な言語ですが、+による文字列と数値の混在だけは意図的に厳格に拒否しています。"5" + 3が"53"(連結)になるべきか8(加算)になるべきかは言語によって答えが割れる、本質的に曖昧な操作です。Rubyの設計思想は「柔軟に何でも受け入れる」ことで知られていますが、この種の解釈が割れる曖昧な操作に関しては、黙ってどちらか一方を選ぶのではなく、はっきりTypeErrorとして拒否し、to_sやto_iで意図を明示させる方針を取っています。