Pythonで文字列の中に変数や計算結果を埋め込みたいとき、いま最もよく使われているのがf-string(フォーマット済み文字列リテラル)です。
古いformatや%演算子を使わなくても、シンプルで読みやすいコードが書けます。
この記事では、f-stringの基本から、数値・日付・オブジェクトのフォーマット、注意点まで丁寧に解説します。
Pythonのf-stringとは
f-stringの基本構文と特徴

f-stringは、文字列リテラルの先頭にfまたはFを付け、波括弧{}の中に変数や式を書くだけで、その値を埋め込める機能です。
例えば、次のような書き方になります。
name = "Alice"
age = 30
# f-string を使った文字列の埋め込み
message = f"My name is {name}. I am {age} years old."
print(message)
My name is Alice. I am 30 years old.
ここでのポイントは、次の通りです。
- 文字列の前に
fを付ける - 中カッコ
{}の中に変数名や式を書く - Pythonが自動的に値を文字列に変換して埋め込む
このように、文字列結合用の+を書かなくてよいため、コードが非常に読みやすくなります。
従来のformatや%演算子との違い

Pythonでは、f-string登場以前から、次のような方法で文字列のフォーマットを行っていました。
name = "Alice"
age = 30
# 1. % 演算子によるフォーマット
msg_percent = "My name is %s. I am %d years old." % (name, age)
# 2. str.format メソッドによるフォーマット
msg_format = "My name is {}. I am {} years old.".format(name, age)
# 3. f-string によるフォーマット
msg_fstring = f"My name is {name}. I am {age} years old."
print(msg_percent)
print(msg_format)
print(msg_fstring)
My name is Alice. I am 30 years old.
My name is Alice. I am 30 years old.
My name is Alice. I am 30 years old.
結果はどれも同じですが、f-stringは変数をそのまま書けるので、対応関係を意識する必要がありません。
従来方式との主な違いを表にまとめます。
| 方法 | 特徴 | 可読性 | 推奨度 |
|---|---|---|---|
| % 演算子 | C言語風。型指定が必要でエラーを生みやすい | 低め | 非推奨に近い |
| str.format | 柔軟だが、プレースホルダと引数の対応がやや分かりにくい | 普通 | 既存コードで使用 |
| f-string | 変数や式をそのまま書ける。実行時に評価される | 非常に高い | 最も推奨 |
f-stringがPythonで推奨される理由
f-stringがPythonで推奨される主な理由は、次の3点です。
1つ目は可読性の高さです。
変数名がそのまま文字列の中に登場するため、「どの値がどこに入っているか」を一目で把握できます。
2つ目はパフォーマンスです。
f-stringはコンパイル時に最適化されるため、formatなどよりも高速に動作するケースが多いとされています。
3つ目は柔軟性です。
{}の中に変数だけでなく式や関数呼び出しも書けるため、一時変数を作らなくても、その場で計算結果を埋め込める点が便利です。
f-stringで変数を埋め込む基本
文字列に変数を埋め込む基本的な書き方

最も基本的な使い方は、文字列の中に変数名を{}で囲んで書くだけです。
name = "Bob"
city = "Tokyo"
# 基本的な f-string の例
message = f"{name} lives in {city}."
print(message)
Bob lives in Tokyo.
ここではnameとcityという2つの変数を、そのまま文字列中に埋め込んでいます。
Pythonは、各変数にstr()を適用した結果を自動で挿入します。
複数の変数をまとめて埋め込む方法

複数の変数も、同じ文字列の中で自由に組み合わせて使えます。
first_name = "Taro"
last_name = "Yamada"
age = 25
profile = f"Name: {last_name} {first_name}, Age: {age}"
print(profile)
Name: Yamada Taro, Age: 25
このように、プレースホルダの順番やインデックスを気にせず、「その位置に入れたい値の変数名」を素直に書けるのがf-stringの大きな利点です。
直値・式(計算式)をそのまま埋め込む

f-stringでは、中カッコの中に計算式や関数呼び出しなど「任意の式」を書けます。
変数だけでなく、その場で計算した結果を直接埋め込めるのが便利です。
price = 1200
tax_rate = 0.1
# 計算式をそのまま埋め込む
message = f"税込価格は {int(price * (1 + tax_rate))} 円です。"
print(message)
税込価格は 1320 円です。
別の例として、文字列の長さを埋め込んでみます。
name = "Python"
message = f"{name} は {len(name)} 文字です。"
print(message)
Python は 6 文字です。
このように、関数呼び出しやメソッド呼び出しも直接書けるため、一時的な変数を作る手間を省けます。
f-stringの便利な書式指定
数値フォーマット(小数点・桁区切り)の指定

f-stringは、数値の表示形式を細かく制御できる書式指定と組み合わせて使うことができます。
{変数:フォーマット指定}という形で記述します。
小数点以下の桁数を指定する
pi = 3.1415926535
# 小数点以下2桁まで表示
msg = f"pi ≒ {pi:.2f}"
print(msg)
pi ≒ 3.14
:.2fの意味は、「小数点以下2桁の浮動小数点数として表示」という指定です。
桁区切り(カンマ区切り)を付ける
amount = 123456789
# カンマ区切りで表示
msg = f"金額: {amount:,} 円"
print(msg)
金額: 123,456,789 円
:,と書くことで、3桁ごとにカンマを挿入できます。
小数と桁区切りを組み合わせる
value = 1234567.89123
# カンマ区切り + 小数点以下2桁
msg = f"値: {value:,.2f}"
print(msg)
値: 1,234,567.89
このように、整数・小数どちらでも柔軟にフォーマットできるため、金額や統計値の表示に非常に便利です。
日付(datetime)をフォーマットして埋め込む

日時を扱うdatetimeオブジェクトも、f-stringで好きな形式にフォーマットできます。
from datetime import datetime
now = datetime(2025, 12, 14, 9, 30, 0)
# 日付のフォーマット指定
msg = f"今日は {now:%Y/%m/%d} です。時間は {now:%H:%M} です。"
print(msg)
今日は 2025/12/14 です。時間は 09:30 です。
{now:%Y/%m/%d}という指定は、datetimeのstrftime記法を、そのままf-stringの中で使っているイメージです。
よく使う指定子を簡単にまとめておきます。
| 指定子 | 意味 | 例 |
|---|---|---|
| %Y | 西暦4桁 | 2025 |
| %m | 月(ゼロ埋め) | 01〜12 |
| %d | 日(ゼロ埋め) | 01〜31 |
| %H | 時(24時間表記) | 00〜23 |
| %M | 分 | 00〜59 |
| %S | 秒 | 00〜59 |
f-stringを使うと、「日付を成形する → 文字列に埋め込む」を一度に書けるので、コードがすっきりします。
文字列の幅・左寄せ・右寄せ・ゼロ埋め

f-stringの書式指定では、文字列や数値を指定した幅で整列させることもできます。
幅と寄せ方向を指定する
name = "Alice"
# 左寄せ(幅10)
left = f"[{name:<10}]"
# 右寄せ(幅10)
right = f"[{name:>10}]"
# 中央寄せ(幅10)
center = f"[{name:^10}]"
print(left)
print(right)
print(center)
[Alice ]
[ Alice]
[ Alice ]
書式の意味は次の通りです。
<10: 幅10で左寄せ>10: 幅10で右寄せ^10: 幅10で中央寄せ
数値のゼロ埋め
数値を固定桁数で表示したい場合には、ゼロ埋めがよく使われます。
for i in range(1, 4):
# 3桁ゼロ埋め
print(f"ID: {i:03}")
ID: 001
ID: 002
ID: 003
03は、幅3桁・足りない部分を0で埋めるという指定です。
ファイル名や連番などでよく使われます。
辞書やオブジェクトの属性を埋め込む方法

f-stringでは、辞書の要素やオブジェクトの属性も直接参照して埋め込めます。
辞書の値を埋め込む
user = {
"name": "Alice",
"age": 30,
}
# 辞書の値を f-string で参照
msg = f"{user['name']} さんは {user['age']} 歳です。"
print(msg)
Alice さんは 30 歳です。
中カッコ内でuser['name']のように、通常の辞書アクセス記法をそのまま使える点がポイントです。
オブジェクトの属性を埋め込む
class User:
def __init__(self, name, age):
self.name = name # 名前
self.age = age # 年齢
user = User("Bob", 28)
# オブジェクトの属性を f-string で参照
msg = f"{user.name} さんの年齢は {user.age} 歳です。"
print(msg)
Bob さんの年齢は 28 歳です。
ドットアクセス(user.name)もそのまま書けるため、オブジェクトの内容をログに出したり、テンプレート的に文字列を組み立てたりする場面でとても有用です。
f-string利用時の注意点
Pythonのバージョンとf-stringの対応状況

f-stringはPython 3.6以降で導入された機能です。
Python 3.5以前では使用できません。
バージョンと対応状況は次の通りです。
| Pythonバージョン | f-string対応 | 備考 |
|---|---|---|
| 3.5 以前 | 非対応 | SyntaxError になる |
| 3.6〜3.7 | 対応 | 基本機能が利用可能 |
| 3.8 以降 | 対応 | デバッグ用=記法などが追加 |
自分の環境のPythonバージョンは、ターミナルやコマンドプロンプトで次のようにして確認できます。
python --version
# もしくは
python3 --version
f-stringを利用する場合は、少なくともPython 3.6以上であることを確認してください。
クォートと波括弧のエスケープ方法

f-stringでは{}が特別な意味を持つため、文字としてそのまま波括弧を表示したいときには注意が必要です。
波括弧{}を文字として表示したい場合
中カッコを2つ重ねることで、エスケープできます。
value = 10
# { と } をそのまま表示したい場合
msg = f"値は {{value}} で、実際の変数は {value} です。"
print(msg)
値は {value} で、実際の変数は 10 です。
このようにすると、{{は{に、}}は}として出力されます。
クォートの扱いに注意する
f-stringの中で'や"を混在させる場合、外側のクォートと内側のクォートを分けると書きやすくなります。
name = "Alice"
# 外側をダブルクォート、内側をシングルクォート
msg = f"彼女の名前は '{name}' です。"
print(msg)
彼女の名前は 'Alice' です。
反対に、'と"が複雑に混ざる場合は、バックスラッシュ\でエスケープすることもできますが、可読性が落ちやすいため、外側のクォートを工夫する方がよいことが多いです。
デバッグに便利なf文字列の使い方

Python 3.8以降では、デバッグ向けに非常に便利なf-stringの記法が追加されています。
変数名と値を同時に表示する=記法
x = 10
y = 3.14
name = "Alice"
# デバッグ用の出力
print(f"{x=}, {y=}, {name=}")
x=10, y=3.14, name='Alice'
{変数名=}と書くと、「変数名=値」の形で出力してくれます。
これはログ出力や一時的なデバッグプリントで非常に役立ちます。
従来なら次のように書いていたところが、
print("x =", x, "y =", y, "name =", name)
f-stringなら、より短く、変数の追加・削除にも強い形で書くことができます。
複雑な式のデバッグにも便利
式そのものと、その結果をまとめて確認したい場合にも、この=記法は有効です。
a = 5
b = 8
# 式と結果を同時に確認
print(f"{a=} {b=} {a + b=}")
a=5 b=8 a + b=13
このように、「どのような式を書いて、その結果がいくつになっているか」を一目で確認できるため、バグ調査の効率が大きく向上します。
まとめ
f-stringは、Pythonで文字列に変数や式を埋め込むための、現時点で最も推奨される方法です。
従来のformatや%演算子よりも読みやすく、数値や日付のフォーマット、辞書・オブジェクトの属性参照、デバッグ用の=記法など、豊富な機能を備えています。
Python 3.6以上であればすぐに利用できますので、文字列整形を行うコードは、ぜひf-stringベースに統一していくことをおすすめします。
