mei_13のPython講座 ロゴ

【解説】Pythonのコードを美しく、効率的に。f文字列(フォーマット済み文字列リテラル)の完全ガイド




Pythonのコードを美しく、効率的に。f文字列(フォーマット済み文字列リテラル)の完全ガイド


Hirokiのアイコン
【Hiroki】Yukiさん、こんにちは。最近Pythonのコードを書いていて気になったんですけど、文字列の中に変数の値を埋め込むとき、いつも+記号で連結したり、.format()を使ったりしています。でも、もっと短くて直感的な書き方があると聞いたのですが……。


Yukiのアイコン
【Yuki】Hirokiくん、こんにちは……。そうですね、Python 3.6から導入された「f文字列(f-strings)」という機能を使うと、コードがとてもスッキリすると思います。正式名称は「フォーマット済み文字列リテラル」と言いますが、一般的には「f文字列」と呼ばれています。


Hirokiのアイコン
【Hiroki】f文字列、ですか。使い方は難しいんでしょうか?


Yukiのアイコン
【Yuki】いえ、むしろ他の方法よりもずっと簡単ですよ。基本的には文字列の先頭に f または F を付けて、変数名を波括弧 {} で囲むだけなんです。少し詳しく見ていきましょうか。

f文字列の基本:変数の埋め込み


Yukiのアイコン
【Yuki】まずは、一番シンプルな書き方から紹介しますね。

name = "Hiroki"
age = 17

# 従来の.format()メソッド
print("僕は{}です。{}歳です。".format(name, age))

# f文字列
print(f"僕は{name}です。{age}歳です。")


Hirokiのアイコン
【Hiroki】わあ、すごく読みやすいですね!.format()だと、後ろの方まで目を動かして何が入るか確認しないといけなかったですけど、f文字列ならその場で変数がわかるのがいいですね。


Yukiのアイコン
【Yuki】そうですね、直感的に理解できるのがf文字列の大きなメリットだと思います……。ちなみに、大文字の F を使っても同じように動きますが、一般的には小文字の f が使われることが多いかもしれません。

波括弧内での式の評価


Hirokiのアイコン
【Hiroki】これって、ただ変数を入れるだけなんですか?


Yukiのアイコン
【Yuki】実は、波括弧 {} の中にはPythonの式を直接書くこともできるんです。計算をしたり、メソッドを呼び出したりすることも可能なんですよ。

price = 1200
tax = 0.1

print(f"合計金額は {price * (1 + tax)} 円です。")

message = "python is fun"
print(f"メッセージ: {message.upper()}")


Hirokiのアイコン
【Hiroki】計算までできるのは便利ですね!わざわざ事前に計算した結果を変数に代入しなくても、そのまま書けるのは効率的だと思います。


Yukiのアイコン
【Yuki】はい、ちょっとした計算ならそのまま書くのがスマートですね。ただ、あまり複雑な式を入れすぎると、かえって読みにくくなってしまうこともあるので注意が必要かもしれません……。

数値の書式指定:桁数や精度の調整


Hirokiのアイコン
【Hiroki】さっきの計算結果で、小数点以下が長く続いちゃうときとかはどうすればいいんですか?


Yukiのアイコン
【Yuki】そんなときは、波括弧の中で書式指定子を使います。変数名の後ろにコロン : を付けて指定するんです。

pi = 3.1415926535
# 小数点以下2桁まで表示
print(f"円周率は {pi:.2f} です。")

number = 1234567
# 3桁ごとのカンマ区切り
print(f"売上は {number:,} 円です。")

percent = 0.75
# パーセント表示(小数点以下0桁)
print(f"達成率は {percent:.0%} です。")


Hirokiのアイコン
【Hiroki】:.2f で小数点第2位まで、:, でカンマ区切り……。これ、覚えると出力がすごく綺麗になりますね。


Yukiのアイコン
【Yuki】そうですね。データをレポートにまとめたりするときに重宝すると思います……。特に浮動小数点を扱うときは、桁を揃えるだけで一気にプロっぽくなりますよ。

配置とパディング:文字列を揃える


Hirokiのアイコン
【Hiroki】表みたいに文字を揃えたいときは、どうすればいいでしょうか?


Yukiのアイコン
【Yuki】それも簡単ですよ。コロンの後に、記号を使って「左寄せ」「右寄せ」「中央寄せ」を指定できます。

name = "Python"

# 10文字分の幅で左寄せ(デフォルト)
print(f"|{name:<10}|")

# 10文字分の幅で右寄せ
print(f"|{name:>10}|")

# 10文字分の幅で中央寄せ
print(f"|{name:^10}|")

# 任意の文字で埋めることもできます
print(f"{name:=^20}")


Hirokiのアイコン
【Hiroki】すごい、^ で中央寄せなんてできるんですね。= で埋めるのも、見出しとかを作るときに使えそうです。


Yukiのアイコン
【Yuki】はい。CLI(コマンドラインインターフェース)ツールなどを作るときに、メニュー画面を整えるのに役立つかもしれません。

日付のフォーマット


Hirokiのアイコン
【Hiroki】日付の表示もf文字列でできるんですか?いつも strftime を使っていますけど。


Yukiのアイコン
【Yuki】それも可能です。datetime オブジェクトを直接f文字列に入れて、書式を指定できるんですよ。

from datetime import datetime

now = datetime.now()
print(f"現在時刻: {now:%Y-%m-%d %H:%M:%S}")


Hirokiのアイコン
【Hiroki】わざわざ now.strftime(...) と書かなくてもいいんですね。記述が短くなって助かります。


Yukiのアイコン
【Yuki】コードがシンプルになれば、その分ミスも減りますからね……。

デバッグに便利な「=」記法(Python 3.8以降)


Yukiのアイコン
【Yuki】ところで、Hirokiくんはデバッグをするときに print(f"x = {x}") のようなコードを書くことはありますか?


Hirokiのアイコン
【Hiroki】よくあります!変数の名前と、その中身を一緒に確認したいときに書きますね。


Yukiのアイコン
【Yuki】Python 3.8からは、もっと楽な書き方が追加されたんです。変数名の後ろに = を付けるだけで、変数名とその値の両方を出力してくれます。

user = "Hiroki"
score = 95

# 従来の書き方
print(f"user={user}, score={score}")

# デバッグ記法
print(f"{user=}, {score=}")


Hirokiのアイコン
【Hiroki】えっ、これだけですか? user= って自分で書かなくていいのは、タイプミスも減るし最高ですね。


Yukiのアイコン
【Yuki】でしょう? 演算結果にも使えるので、f"{a + b = }" のように書くと計算式とその結果が表示されます。デバッグ中にはとても重宝すると思います……。

Python 3.12での進化したf文字列


Yukiのアイコン
【Yuki】実は、最新の Python 3.12 では、f文字列がさらに強力に進化(f-string lifting)したんです。これまでの制限がいくつか取り払われました。


Hirokiのアイコン
【Hiroki】どんなところが変わったんですか?


Yukiのアイコン
【Yuki】主に3つのポイントがあります。

  1. 引用符の再利用が可能に 以前は、f文字列全体を囲む引用符(")と、中の辞書のキーなどで使う引用符は別の種類(')にする必要がありましたが、同じものが使えるようになりました。
  2. バックスラッシュ(\)が使用可能に 以前は波括弧の中で \n などのバックスラッシュが使えませんでしたが、今は使えます。
  3. 複数行の式とコメント 波括弧の中で改行したり、コメントを書いたりできるようになりました。
# Python 3.12での進化例
users = {"name": "Hiroki", "id": 123}

# 同じ引用符 " が使える
print(f"User Name: {users["name"]}")

# 波括弧の中でバックスラッシュが使える
words = ["Apple", "Banana", "Cherry"]
print(f"List:\n{'\n'.join(words)}")


Hirokiのアイコン
【Hiroki】これまではクォートの使い分けでエラーになることがあったので、それが解消されるのは嬉しいです。


Yukiのアイコン
【Yuki】そうですね……。より自然にPythonのコードを書けるようになった、という印象です。

応用例:最新のAI APIとの連携


Hirokiのアイコン
【Hiroki】具体的に、このf文字列はどんな場面で役立ちますか?


Yukiのアイコン
【Yuki】最近だと、AIのAPIを叩くためのリクエストメッセージを作る際にとても便利だと思います。例えば、Googleの最新ライブラリ google-genai を使って、最新モデル gemini-3-flash-preview に質問を投げるプログラムを考えてみましょう。

from google import genai

client = genai.Client(api_key="YOUR_API_KEY")
topic = "Pythonのf文字列"
user_level = "初心者"

# f文字列を使ってプロンプトを動的に生成
prompt = f"""
あなたは親切な講師です。
{topic}について、{user_level}にもわかるように100文字程度で説明してください。
"""

response = client.models.generate_content(
    model="gemini-3-flash-preview",
    contents=prompt
)

print(f"AIからの回答:\n{response.text}")


Hirokiのアイコン
【Hiroki】なるほど、プロンプトの中に変数を組み込むときにf文字列は最適ですね。


Yukiのアイコン
【Yuki】はい、トリプルクォート """ を使った複数行の文字列でもf文字列は有効です。AIへの指示(プロンプト)は長くなりがちなので、この書き方はよく使われると思います……。

引用符とエスケープの注意点


Hirokiのアイコン
【Hiroki】もし、f文字列の中で波括弧 { 自体を表示したいときはどうすればいいんですか?


Yukiのアイコン
【Yuki】その場合は、波括弧を2重にします。{{}} と書くことで、通常の文字として扱われるんですよ。

val = 10
print(f"この変数の値は {{val}} ではなく {val} です。")
# 出力: この変数の値は {val} ではなく 10 です。


Hirokiのアイコン
【Hiroki】なるほど、2回重ねるんですね。


Yukiのアイコン
【Yuki】そうです。逆に、f文字列の中で辞書を扱うときなどは、先ほどお話ししたPython 3.12以前の環境だと、クォートの種類に注意してくださいね……。

なぜ .format() よりも f文字列なのか


Hirokiのアイコン
【Hiroki】ここまで教えてもらって、f文字列が便利なのはよくわかりました。でも、昔からある % 演算子や .format() メソッドと比べて、性能とかはどうなんですか?


Yukiのアイコン
【Yuki】実は、f文字列は実行速度も一番速いんです。


Hirokiのアイコン
【Hiroki】えっ、そうなんですか?


Yukiのアイコン
【Yuki】はい。.format() は関数呼び出しのオーバーヘッドがありますが、f文字列はコンパイル時に効率的なコードに変換されるため、非常に高速に動作します。読みやすくて、書きやすくて、さらに速い……。使わない理由がほとんどないくらい、素晴らしい機能なんです。


Hirokiのアイコン
【Hiroki】最強じゃないですか!


Yukiのアイコン
【Yuki】ふふ、そうかもしれません……。ただ、古いPython(3.5以前)の環境で動かす必要があるコードでは使えないので、そこだけは注意してくださいね。

まとめ


Hirokiのアイコン
【Hiroki】今日はありがとうございました!f文字列、今日から早速使ってみます。


Yukiのアイコン
【Yuki】ぜひ活用してみてください。最後に、ポイントを整理しておきますね。

  • 文字列の前に f を付ける。
  • {変数名} で値を埋め込める。
  • {式} で計算やメソッド実行ができる。
  • {変数:.2f} のように書式指定ができる。
  • {変数=} はデバッグに便利。
  • Python 3.12からはさらに自由度が増した。
  • 読みやすく、実行速度も速い。


Hirokiのアイコン
【Hiroki】これだけ知っていれば、文字列操作で困ることはなさそうです。


Yukiのアイコン
【Yuki】お役に立ててよかったです……。もし途中でわからなくなったら、いつでも聞いてください。Pythonの公式ドキュメントも、情報が正確でおすすめですよ。

参考資料: - Python 公式ドキュメント: フォーマット済み文字列リテラル - Python 3.12 の新機能 (f-stringの文法制限緩和) - google-genai ライブラリ (GitHub)


Yukiのアイコン
【Yuki】……さて、説明はこんなところでしょうか。少し長くなってしまいましたが、Hirokiくん、ついてこられましたか?


Hirokiのアイコン
【Hiroki】はい!丁寧に教えてくれたので、すごくよくわかりました。Yukiさん、ありがとうございました!


Yukiのアイコン
【Yuki】どういたしまして……。コードが綺麗になると、プログラミングがもっと楽しくなると思いますよ。頑張ってくださいね。



< sprintf()スタイル
コラム一覧に戻る
format()メソッド >

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
● 高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!



AIアシスタント Yuki