カテゴリ: Ruby 更新日: 2025/12/25

Rubyの文字列置換を完全ガイド!gsub/sub/trの使い方と実用例

置換のやり方:gsub/sub/トランスリテレーション(tr)の実用例
置換のやり方:gsub/sub/トランスリテレーション(tr)の実用例

先生と生徒の会話形式で理解しよう

生徒

「先生、Rubyで文字列の中の文字を置き換えたいときってどうしたらいいんですか?」

先生

「Rubyには文字列置換用の便利なメソッドがいくつかあります。主に subgsubtr です。」

生徒

「えっと、subとgsubってどう違うんですか?trはまた別物ですよね?」

先生

「はい、それぞれ特徴があります。順番に説明して、実用例も見ていきましょう。」

1. subとgsubの基本的な使い方

1. subとgsubの基本的な使い方
1. subとgsubの基本的な使い方

Rubyの sub は、文字列の中で最初に見つかった文字や文字列を置換します。gsub は文字列のすべての一致箇所を置換します。


text = "りんご、みかん、りんご"
puts text.sub("りんご", "バナナ")
puts text.gsub("りんご", "バナナ")

バナナ、みかん、りんご
バナナ、みかん、バナナ

このように、sub は最初の一つだけを置換し、gsub はすべて置換するのが特徴です。

2. 正規表現と組み合わせた置換

2. 正規表現と組み合わせた置換
2. 正規表現と組み合わせた置換

Rubyでは subgsub に正規表現(文字列パターンを表す方法)を使うこともできます。たとえば、数字だけを置き換えたいときに便利です。


price_text = "商品価格は500円です"
puts price_text.gsub(/\d+/, "XXX")

商品価格はXXX円です

ここで /\d+/ は「1回以上続く数字」を意味しています。このように正規表現を使うと、柔軟な文字列置換が可能です。

3. tr(トランスリテレーション)の使い方

3. tr(トランスリテレーション)の使い方
3. tr(トランスリテレーション)の使い方

tr は、文字ごとの置換に特化したメソッドです。文字列の中の文字を対応する文字に置き換えるときに使います。


text = "abcde"
puts text.tr("abc", "123")

123de

trは「文字単位」で置換するため、部分一致の文字列ではなく、文字ごとに対応させて置換するのが特徴です。

4. gsubで複数パターンを置換する

4. gsubで複数パターンを置換する
4. gsubで複数パターンを置換する

Rubyの gsub では、ブロックを渡すことで複数の置換をまとめて処理することも可能です。


text = "赤青緑"
colors = { "赤" => "Red", "青" => "Blue", "緑" => "Green" }
puts text.gsub(/赤|青|緑/) { |match| colors[match] }

RedBlueGreen

このように、置換対象ごとに違う文字列に変換する場合も簡単に実現できます。

5. sub/gsub/trの使い分け

5. sub/gsub/trの使い分け
5. sub/gsub/trの使い分け

置換方法の使い分けは次のように考えるとわかりやすいです。

  • sub:最初に一致したものだけを置換したいとき
  • gsub:文字列全体の一致箇所をすべて置換したいとき
  • tr:文字単位で置換したいとき(複数文字をまとめて変換可能)

用途によって適切な方法を選ぶと、コードが読みやすくなりバグも減らせます。

6. 実用例:ひらがなをカタカナに変換する

6. 実用例:ひらがなをカタカナに変換する
6. 実用例:ひらがなをカタカナに変換する

たとえばユーザー入力のひらがなをカタカナに変換したい場合、trが便利です。


hiragana = "こんにちは"
katakana = hiragana.tr("あ-ん", "ア-ン")
puts katakana

コンニチハ

trは範囲指定もできるので、ひらがなからカタカナ、半角文字から全角文字への変換などにも使えます。

7. 実用例:数字のマスキング

7. 実用例:数字のマスキング
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 は、文字単位の置換に特化したメソッドです。subgsub が「文字列」や「パターン」を対象にするのに対し、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 と正規表現を組み合わせると、できることが一気に広がります。」

生徒

「入力チェックや個人情報のマスキングにも使えそうだと思いました。」

先生

「まさに実務でよく使う場面ですね。ぜひ実際にコードを書いて、使い分けに慣れていきましょう。」

関連記事:
カテゴリの一覧へ
新着記事
New1
Rails
Rails GoodJob入門!PostgreSQLベースのバックグラウンド処理を初心者向けに完全解説
New2
Ruby
Rubyで学ぶビット演算入門:&・|・^・~・<<・>>の基礎と実例
New3
Rails
RESTとRailsの関係を徹底解説!resources設計と7つの標準アクションを初心者向けにわかりやすく解説
New4
データベース
MySQLアーキテクチャ入門!初心者向けに基本構造と仕組みを徹底解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyのreduceとinject入門!合計計算や集計を初心者向けに分かりやすく解説
No.2
Java&Spring記事人気No2
Ruby
Rubyの文字列エンコーディング完全ガイド!Encoding・force_encoding・encodeを初心者向け解説
No.3
Java&Spring記事人気No3
Ruby
Rubyの始め方ガイド:インストールから最初のHello Worldまで(Windows/Mac/Linux)
No.4
Java&Spring記事人気No4
データベース
PostgreSQLのWHERE句を徹底解説!初心者でもわかるSQLデータ抽出の基本
No.5
Java&Spring記事人気No5
Ruby
Rubyのfind/detect/find_indexを徹底解説!目的のデータを素早く探す方法
No.6
Java&Spring記事人気No6
Ruby
Rubyのselect/reject/filterの使い方を完全解説!初心者向けの条件抽出レシピ
No.7
Java&Spring記事人気No7
データベース
PostgreSQLで順位付け!ROW_NUMBER関数の使い方を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Ruby
Rubyで比較演算子を完全解説!==・===・<=>・eql? の使い分け