Rubyの文字列置換を完全ガイド!gsub/sub/trの使い方と実用例
生徒
「先生、Rubyで文字列の中の文字を置き換えたいときってどうしたらいいんですか?」
先生
「Rubyには文字列置換用の便利なメソッドがいくつかあります。主に sub、gsub、tr です。」
生徒
「えっと、subとgsubってどう違うんですか?trはまた別物ですよね?」
先生
「はい、それぞれ特徴があります。順番に説明して、実用例も見ていきましょう。」
1. subとgsubの基本的な使い方
Rubyの sub は、文字列の中で最初に見つかった文字や文字列を置換します。gsub は文字列のすべての一致箇所を置換します。
text = "りんご、みかん、りんご"
puts text.sub("りんご", "バナナ")
puts text.gsub("りんご", "バナナ")
バナナ、みかん、りんご
バナナ、みかん、バナナ
このように、sub は最初の一つだけを置換し、gsub はすべて置換するのが特徴です。
2. 正規表現と組み合わせた置換
Rubyでは sub と gsub に正規表現(文字列パターンを表す方法)を使うこともできます。たとえば、数字だけを置き換えたいときに便利です。
price_text = "商品価格は500円です"
puts price_text.gsub(/\d+/, "XXX")
商品価格はXXX円です
ここで /\d+/ は「1回以上続く数字」を意味しています。このように正規表現を使うと、柔軟な文字列置換が可能です。
3. tr(トランスリテレーション)の使い方
tr は、文字ごとの置換に特化したメソッドです。文字列の中の文字を対応する文字に置き換えるときに使います。
text = "abcde"
puts text.tr("abc", "123")
123de
trは「文字単位」で置換するため、部分一致の文字列ではなく、文字ごとに対応させて置換するのが特徴です。
4. gsubで複数パターンを置換する
Rubyの gsub では、ブロックを渡すことで複数の置換をまとめて処理することも可能です。
text = "赤青緑"
colors = { "赤" => "Red", "青" => "Blue", "緑" => "Green" }
puts text.gsub(/赤|青|緑/) { |match| colors[match] }
RedBlueGreen
このように、置換対象ごとに違う文字列に変換する場合も簡単に実現できます。
5. sub/gsub/trの使い分け
置換方法の使い分けは次のように考えるとわかりやすいです。
- sub:最初に一致したものだけを置換したいとき
- gsub:文字列全体の一致箇所をすべて置換したいとき
- tr:文字単位で置換したいとき(複数文字をまとめて変換可能)
用途によって適切な方法を選ぶと、コードが読みやすくなりバグも減らせます。
6. 実用例:ひらがなをカタカナに変換する
たとえばユーザー入力のひらがなをカタカナに変換したい場合、trが便利です。
hiragana = "こんにちは"
katakana = hiragana.tr("あ-ん", "ア-ン")
puts katakana
コンニチハ
trは範囲指定もできるので、ひらがなからカタカナ、半角文字から全角文字への変換などにも使えます。
7. 実用例:数字のマスキング
gsubを使えば個人情報やカード番号などの数字を安全に置き換えることもできます。
card = "1234-5678-9012-3456"
masked = card.gsub(/\d{4}/, "****")
puts masked
****-****-****-****
このように、正規表現と組み合わせることで実用的な文字列操作が可能です。
まとめ
Rubyの文字列置換を体系的に振り返ろう
ここまでの記事では、Rubyにおける文字列置換の基本から実用例まで、sub・gsub・tr という三つの重要なメソッドを中心に解説してきました。Rubyで文字列を扱う場面は非常に多く、ユーザー入力の加工、データ整形、ログの整備、個人情報のマスキングなど、あらゆる場面で文字列置換の知識が役立ちます。そのため、これらのメソッドの違いと使い分けを理解しておくことは、Ruby初心者にとって大きなステップになります。
まず sub は、「最初に一致した一箇所だけを置換する」メソッドです。文章の中で最初に現れる単語だけを差し替えたい場合や、意図しない多重置換を防ぎたい場合に向いています。一方で gsub は、「一致するすべての箇所を置換する」メソッドで、文字列全体を対象にした変換処理に適しています。大量のデータを一括で整形したい場合や、パターンに合致する部分をすべて修正したい場合には欠かせません。
gsub は正規表現と組み合わせることで、さらに強力になります。数字だけを置換したり、特定のパターンに一致する文字列をまとめて変換したりと、柔軟な処理が可能です。また、ブロックを使えば、置換対象ごとに異なる変換結果を返すこともできるため、実務レベルの文字列操作にも対応できます。
そして tr は、文字単位の置換に特化したメソッドです。sub や gsub が「文字列」や「パターン」を対象にするのに対し、tr は「一文字ずつ対応させて変換する」という特徴を持っています。そのため、ひらがなをカタカナに変換する、特定の記号を別の記号にまとめて置き換える、といった処理に非常に向いています。処理内容が明確で高速なのも利点です。
重要なのは、「どのメソッドが一番便利か」ではなく、「どのメソッドが今の目的に合っているか」を考えることです。sub・gsub・tr を正しく使い分けることで、Rubyのコードは読みやすくなり、無駄な処理やバグを減らすことができます。文字列置換は地味に見えますが、プログラム全体の品質を支える非常に大切な要素です。
まとめとしての確認用サンプルプログラム
text = "電話番号は090-1234-5678です"
# 最初の数字だけ置換
puts text.sub(/\d+/, "XXX")
# すべての数字を置換
puts text.gsub(/\d/, "*")
# 記号を別の記号に変換
puts text.tr("-", "/")
このサンプルでは、sub・gsub・tr の違いが一目で分かるようになっています。どれも「置換」という同じ目的を持ちながら、対象や結果が異なる点に注目すると理解が深まります。実際の開発では、こうした小さなサンプルを試しながら挙動を確認することが、確実なスキル習得につながります。
生徒
「sub と gsub と tr が、ただ名前が違うだけじゃないことがよく分かりました。」
先生
「そうですね。それぞれ役割が違うので、目的に合わせて選ぶのが大切です。」
生徒
「文字列を全部置換したいときは gsub、文字単位なら tr、最初だけなら sub、という感じですね。」
先生
「その理解でばっちりです。特に gsub と正規表現を組み合わせると、できることが一気に広がります。」
生徒
「入力チェックや個人情報のマスキングにも使えそうだと思いました。」
先生
「まさに実務でよく使う場面ですね。ぜひ実際にコードを書いて、使い分けに慣れていきましょう。」