Rubyの%演算子を使うと、C言語のsprintfのような書式指定で文字列をフォーマットできる。

基本的な使い方

文字列に%演算子を使い、右辺に値を指定する。

"Hello, %s!" % "World"
# => "Hello, World!"

"今日は%d件のタスクがある" % 5
# => "今日は5件のタスクがある"

フォーマット指定子

主なフォーマット指定子は以下の通り。

指定子説明
%s文字列
%d整数(10進数)
%f浮動小数点の数値
%e指数表記
%x16進数(小文字)
%X16進数(大文字)
%o8進数
%b2進数
"%d" % 255      # => "255"
"%x" % 255      # => "ff"
"%X" % 255      # => "FF"
"%o" % 255      # => "377"
"%b" % 255      # => "11111111"
"%e" % 12345.6  # => "1.234560e+04"

複数の値を渡す

複数の値を渡す場合は配列を使う。

"Name: %s, Age: %d" % ["Alice", 25]
# => "Name: Alice, Age: 25"

幅と配置

右揃え

%の後に数値を指定すると幅を設定でき、デフォルトは右揃えになる。

"%10s" % "hi"    # => "        hi"

左揃え

-を付けると左揃えになる。

"%-10s" % "hi"   # => "hi        "

0埋め

0を付けるとスペースの代わりに0で埋める。

"%010d" % 42     # => "0000000042"

精度

浮動小数点の数値は.の後に桁数を指定して精度を設定できる。

"%.2f" % 3.14159   # => "3.14"
"%.4f" % 3.14159   # => "3.1416"
"%8.2f" % 3.14159  # => "    3.14"

名前付き参照

%{キー名}の形式でHashのキーを参照できる。

"%{name}は%{age}歳" % { name: "Alice", age: 25 }
# => "Aliceは25歳"

複数箇所で同じキーを参照できる。

"[%{env}] %{msg} (env: %{env})" % { env: "production", msg: "Deploy完了" }
# => "[production] Deploy完了 (env: production)"

Pythonにも同様の演算子

Pythonにも同様の%演算子がある。基本的な書式指定子はRubyと共通だが、以下の点が異なる。

  • 複数の値はタプルで渡す(Rubyは配列)
  • 名前付き参照は%(キー名)sの形式(Rubyは%{キー名}
"Hello, %s!" % "World"
# => "Hello, World!"

"Name: %s, Age: %d" % ("Alice", 25)
# => "Name: Alice, Age: 25"

"%(name)s%(age)d歳" % {"name": "Alice", "age": 25}
# => "Aliceは25歳"

なお、Pythonではこの%形式は「旧スタイル」と位置付けられており、現在はstr.format()f文字列が推奨されている。