Pythonにおける文字列のフォーマット方法として、f-stringstr.format()の2つが主に使われています。どちらも有効な手段ですが、レビューにおいては一貫性の欠如や読みづらさが生じる構文選択がコード品質を低下させる一因になり得ます。本稿では、レビューアーが確認すべき構造的観点を解説しつつ、指摘の根拠となる可読性や保守性の違いを示します。

f-stringとformatの構文比較

まず、同じ意味を持つ2つのコードを比較します。

f-stringの例
user = "Taro"
print(f"Hello, {user}!")
format関数の例
user = "Taro"
print("Hello, {}!".format(user))

いずれも "Hello, Taro!" を出力しますが、f-stringはPython 3.6以降で使用可能であり、変数の埋め込みが視覚的に直感的である点が特徴です。

レビューアーが見るべき「可読性の分岐点」

短い文字列や単純な変数埋め込みであれば、f-stringの方が読みやすく自然です。しかし、以下のような例では注意が必要です。

一見読みやすいが複雑なf-string
price = 1280
tax = 0.1
print(f"合計金額は{price * (1 + tax):,.0f}円です")
Comment
@Reviewer: 数式・書式指定子・自然言語が混在しており、f-stringが視認しづらい状態です。数式は事前に変数へ分離し、構文の簡素化を検討してください。

一貫性の欠如による認知負荷の増加

同一プロジェクト内において、f-stringformatが混在しているケースはレビュー指摘対象となりやすいです。レビューアーとしては、同一責務や同一スコープ内での表現統一を推奨すべきです。

一貫性の欠如例
def greet(user, time):
    print("Hello, {}!".format(user))
    print(f"Current time: {time}")
Comment
@Reviewer: 書式表現が混在しています。どちらかに統一することで読み手の認知負荷を下げましょう。

保守性の視点から見た注意点

str.format()の構文は、再利用性や動的なテンプレート処理との相性が良いケースもあります。特に、翻訳対応やテンプレート管理においては以下のような例が考えられます。

format関数の再利用性
template = "エラーが発生しました:コード={code}, メッセージ={msg}"
print(template.format(code=500, msg="Internal Server Error"))

f-stringではこのようなテンプレートの外部化・再利用が難しく、構造的設計における制約が生じることもあるため、レビュー時には用途に応じた選定かどうかを検討する必要があります。

構文評価観点図

UML Diagram

指摘コメントテンプレート例

レビューコメント例
@Reviewer: f-stringとformatの使い分けが明確でないため、構文統一か読みやすさの検討をお願いします。可読性と保守性のバランスを重視して設計してください。

まとめ

f-stringとformatはどちらもPythonで広く使用されている構文ですが、レビューアーとしては以下のような軸で判断を下す必要があります。

  • 表現の一貫性:チーム・スコープ内での統一性
  • 可読性の確保:式・変換・自然言語の混在度合い
  • 保守性と再利用性:テンプレートや外部化との親和性

構文の選択がそのまま設計思想や変更コストに影響を及ぼすため、表層的な記述形式ではなく、設計意図との整合性を見極めた上でのレビューが求められます。