Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Python String Formatting: From Basics to F-Strings

2025年09月17日に「Dev.to」が公開したITニュース「Python String Formatting: From Basics to F-Strings」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Pythonの文字列フォーマットは、生データを読みやすいテキストにする技術だ。古い方法もあるが、Python 3.6以降はf-stringsが主流。f-stringsは変数や式を直接埋め込め、数値や文字の書式設定、アラインメント、デバッグも容易に行える。現代Pythonで必須の技術だ。

ITニュース解説

Pythonプログラミングにおいて、データそのものを扱うことはもちろん重要だが、そのデータをどのように「見せるか」も同じくらい大切だ。例えば、計算結果をユーザーに伝えたり、エラーメッセージを表示したり、報告書を作成したりする際、単なる数字や文字列の羅列では分かりにくい。そこで登場するのが「文字列フォーマット」という技術だ。これは、集めたデータを読みやすく、意味のあるテキストに変換するための強力なツールである。まるで、料理の材料(データ)を使って、見た目も美しく、美味しい料理(読みやすいテキスト)に仕上げるようなものだ。

Pythonはこれまで、この文字列フォーマットの方法をいくつか進化させてきた。古い方法を知ることは、過去のコードを理解する上で役立つが、今学ぶべきは最も新しく、効率的で、推奨されている方法である。

まず、少しだけ古い方法を見てみよう。一つは「文字列連結」と呼ばれるもので、これは最も基本的な方法だ。これは、複数の文字列や変数を「+」記号でつなぎ合わせる方法である。例えば、「こんにちは、アリスさん。あなたは30歳です。」というメッセージを作りたい場合、"こんにちは、 " + name + ". あなたは " + str(age) + " 歳です。" のように書く。この方法は直感的だが、変数が増えたり、数字を文字列に変換する手間(str(age) の部分)があったりすると、すぐにコードが読みにくくなり、間違えやすくなってしまう。まるで、たくさんの短い糸を一つ一つ結んでいくようなもので、結び目が増えるほどごちゃごちゃしてくる。

次に登場したのが「.format() メソッド」である。これは、文字列の中に {}(波括弧)をプレースホルダーとして配置し、後から .format() の中に渡した値でそのプレースホルダーを埋める方法だ。例えば、「こんにちは、{}. あなたのスコアは {:.1f}% です。」という文字列に対して、.format(name, score) とすることで、{}name で、{:.1f}score で置き換えられる。この方法では、.1f のように、数字の表示形式(この場合は小数点以下1桁まで)を細かく指定できるようになった。連結よりは格段に読みやすくなったが、メッセージの型({} の数)と、それに実際に渡される変数のリストがコード上で少し離れてしまうため、どこに何が入るのかを瞬時に把握するのが少し難しい場合もあった。

そして、Python 3.6以降で登場し、現在最も推奨されているのが「f-strings」(フォーマット済み文字列リテラル)である。これは、これまでの文字列フォーマットの課題を解決し、非常に直感的でパワフルな方法だ。F-stringsは、文字列の前に f または F をつけるだけで使える。そして、その文字列の中に直接、波括弧 {} を使って変数名やPythonの式を埋め込むことができる。例えば、name = "チャーリー", age = 25 という変数があったとき、f"こんにちは、{name}。あなたは{age}歳です。" と書くだけで、期待するメッセージが生成される。この書き方だと、変数名とそれが表示される位置が視覚的に非常に近いため、何がどこに表示されるのかが一目瞭然で、コードが驚くほど読みやすくなる。まるで、必要な材料を最初から正しい場所に並べて一気に調理するようなもので、無駄がなく、効率的だ。

F-stringsの本当の力は、単に変数を埋め込むだけでなく、波括弧の中に任意のPythonの「式」を書ける点にある。例えば、price = 19.99, quantity = 3 の場合、f"合計: ${price * quantity:.2f}" と書くと、{price * quantity:.2f} の部分で pricequantity を掛け算し、その結果を小数点以下2桁の数値として表示する。このように、計算処理を文字列フォーマットの中に直接組み込めるため、コードがより簡潔になる。

また、数字の表示形式を細かく制御する「フォーマット指定子」もF-stringsで簡単に利用できる。例えば、number = 1234.5678 という数値があった場合、f"{number:.2f}" と書けば小数点以下2桁に丸められた 1234.57 と表示される。f"{0.255:.1%}" なら 25.5% のようにパーセンテージ形式で、f"{255:#x}" なら 0xff のように16進数形式で表示できる。円周率のような数学定数も、import math して f"{math.pi:.3f}" と書けば 3.142 のように、指定した桁数で表示可能だ。これらの指定子を使いこなせば、数値データを用途に合わせて見やすく表現できる。

さらに、F-stringsはテキストの「アライメント(配置)」と「パディング(余白)」も自在に操れる。これは、複数のデータを整然と並べて表形式で表示したい場合に非常に役立つ機能だ。例えば、name = "Alice", score = 95 というデータがあるとき、f"{name:<10} | {score:>5}" と書くと、Alice は左寄せで10文字分のスペースを使い、95 は右寄せで5文字分のスペースを使って表示される。これによって、名前の長さが異なっても、スコアが常に同じ縦列に揃うため、出力結果が非常に読みやすくなる。< は左寄せ、> は右寄せ、^ は中央寄せを意味し、その後の数字が表示幅を指定する。

F-stringsには、開発者にとって非常に便利な「プロのヒント」もいくつかある。その一つが、デバッグ(プログラムの誤りを探し修正する作業)に役立つ = 指定子だ。もし x = 10, y = 25 という変数があったとして、それぞれの値や合計を一時的に確認したい場合、print(f"{x=}, {y=}, {x + y=}") と書くと、x=10, y=25, x+y=35 のように、変数名とそれぞれの値、そして式の値までが自動的に表示される。これは、プログラムの動作を確認する際に非常に時間を節約してくれる機能である。

また、F-stringsは複数行にわたる長いテキストの作成にも非常に適している。Pythonのトリプルクォート(""" または ''')を使って複数行文字列を定義し、その中にF-stringsを埋め込むことで、複雑なレポートやメッセージブロックを簡単に生成できる。例えば、報告書のヘッダーや複数の情報をまとめた詳細なメッセージなど、改行を含むフォーマット済みテキストを非常にきれいに作成することが可能だ。さらに、複数行F-stringの波括弧内でも、{'OK' if value > 50 else 'Check'} のように条件式を使って表示内容を動的に変えることもできる。

最後に、以前学んだ「スライス」の技術とF-stringsを組み合わせると、さらに強力なデータ表現が可能になる。スライスは、リストや文字列などから特定の部分だけを効率的に取り出す技術だ。例えば、data = [10, 20, ..., 100] という数値のリストがあったとして、その最初の3つと最後の3つだけをF-stringsで表示したい場合、f"データは {data[:3]} で始まり、{data[-3:]} で終わります。" のように書くことができる。このように、スライスで取り出したデータをそのままF-stringsに埋め込むことで、データの概要を非常に簡潔かつ分かりやすくユーザーに伝えることが可能になる。

まとめると、F-stringsは現代のPythonで文字列フォーマットを行う上でのベストプラクティスと言える。その理由は、コードが非常に読みやすく、記述が簡潔で、そして実行速度も速いからだ。波括弧 {} の中に変数だけでなく、複雑な式や関数呼び出しを直接埋め込める柔軟性も大きな魅力である。また、コロン : に続けて指定子を使うことで、数値の表示形式、テキストの配置、余白といった見た目を思い通りに制御できる。デバッグに便利な = 指定子や、複数行のテキストを効率的に作成できる機能も備わっている。スライスのような他のPythonスキルと組み合わせることで、データの整形と表示の可能性は無限に広がるだろう。F-stringsをマスターすることは、システムエンジニアとして、生データを意味のある情報へと変え、よりプロフェッショナルで理解しやすいソフトウェアを開発するための、非常に重要な一歩となる。

関連コンテンツ