Code Fix

初級

文字列と数値を + で連結すると 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で意図を明示させる方針を取っています。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)