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で明示的に変換する必要があります。

直し方: ageage.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になります。

直し方: countcount.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で変換してから+を使う必要があります。

直し方: yearyear.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による変換が必要です。

直し方: scorescore.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では必ずこのエラーにぶつかります。

直し方: temptemp.to_s にします。

この問題を解いてみる →

よくある誤解

「+は何でもいい感じに連結してくれるはず」という思い込みは誤りです。数値を文字列に混ぜたい場合は to_s で明示的に文字列へ変換する必要があります。

まとめ

文字列と数値を + で連結すると TypeError になるは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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