Python 3.14では、文字列の先頭にtを付ける「t-string」が追加されました。見た目はf-stringによく似ていますが、目的は完成した文字列をすぐ作ることではありません。固定部分と埋め込んだ値を分けたまま受け取り、用途に合った処理を後から選べるようにする仕組みです。
この記事では、Python t-stringの基本、f-stringとの違い、最小コード、初心者が誤解しやすい安全性の考え方を順番に説明します。Pythonを授業や独学で学び始めた人でも、実際に確認できる内容です。
この記事で分かること

- t-stringが普通の文字列ではなく
Templateを返す理由 - f-stringとt-stringを目的に応じて使い分ける方法
- 埋め込み値を確認し、独自の処理器へ渡す基本
Python 3.14は2025年10月7日に正式公開されました。2026年6月11日時点の最新バグ修正版は、前日の6月10日に公開されたPython 3.14.6です。t-stringは実験的な外部ライブラリではなく、Python 3.14の言語機能として利用できます。概要はPython 3.14の新機能で確認できます。
ただし、学校や会社のPCがPython 3.13以前なら、同じコードは構文エラーになります。記事を読みながら試す前に、python --versionまたはpython3 --versionでバージョンを確認してください。既存課題の環境を無理に更新せず、別の仮想環境やDockerなど、元へ戻せる場所で試すのが安全です。

先頭のfをtに変えるだけで使えるのだ?

書き方は似ていますが、結果の型と使い道が違います。まずそこを確認しましょう。
Pythonのt-stringとは

t-stringは、テンプレート文字列リテラルの略称です。t"こんにちは、{name}さん"のように書きます。波かっこの中ではf-stringと同じようにPythonの式を使えますが、実行結果はstrではありません。標準ライブラリstring.templatelibのTemplateオブジェクトになります。
name = "佐藤"
template = t"こんにちは、{name}さん"
print(type(template))
Python 3.14で実行すると、型がstring.templatelib.Templateであることを確認できます。固定文の「こんにちは、」「さん」と、埋め込まれたnameの値が、最初から一つの文字列へ結合されていない点が重要です。
Templateは、固定部分を持つstringsと、埋め込み部分を持つinterpolationsを提供します。さらにテンプレートを順番に反復すると、固定文字列とInterpolationオブジェクトを元の並びで取り出せます。詳しい属性と動作はstring.templatelib公式リファレンスにまとまっています。
name = "佐藤"
template = t"こんにちは、{name}さん"
print(template.strings)
print(template.interpolations)
print(list(template))
埋め込み式そのものは、t-stringを作る時点で評価されます。つまり「値の計算を後回しにする機能」ではありません。後回しになるのは、固定部分と値をどのように組み合わせ、エスケープし、別の形式へ変換するかという処理です。

t-stringは、あとで変数を計算する仕組みではないのだ?

そうです。値は作成時に評価されますが、文字列としてどう処理するかを選べる仕組みです。
f-stringとの違い

f-stringは、読みやすい文字列をすぐ作りたい場面に向いています。たとえば名前を入れた挨拶、計算結果の表示、デバッグ用メッセージなどです。式を評価した結果は、その場で完成したstrになります。
t-stringは、固定文と埋め込み値の境界を残したい場面に向いています。受け取った側は「これは開発者が書いた固定文」「これは外部から来た値」と区別できます。そのため、HTML用のエスケープ、構造化ログ、独自フォーマット、入力値の検査などを行う処理器を設計しやすくなります。
| 比較項目 | f-string | t-string |
|---|---|---|
| 接頭辞 | f |
t |
| 実行結果 | str |
Template |
| 主な目的 | 完成した文字列を作る | 部品を保ったまま処理へ渡す |
| 固定文と値の区別 | 結合後は失われる | Template内に残る |
| そのまま画面表示 | しやすい | 処理器で文字列化する必要がある |
| 対応バージョン | Python 3.6以降 | Python 3.14以降 |
次の2つは見た目が似ていますが、同じ値ではありません。
name = "佐藤"
message = f"こんにちは、{name}さん"
template = t"こんにちは、{name}さん"
print(isinstance(message, str))
print(isinstance(template, str))
通常の表示文まで無理にt-stringへ置き換える必要はありません。完成した文字列が欲しいだけならf-stringのほうが単純です。受け取る処理器がTemplateを理解し、値ごとに適切な扱いをする場合にt-stringを選びます。

新機能だから全面的に置き換えるのではなく、固定文と入力値を分離して扱う必要がある場所だけで使うのが分かりやすいです。
最初に試す手順

最初はWebアプリやデータベースへ接続せず、ローカルの短いファイルで構造を観察しましょう。Python 3.14用の独立した環境を用意すれば、授業で指定されたPythonや既存プロジェクトへ影響を与えにくくなります。
Python 3.14以上の環境であることを確認する
新しい作業フォルダと仮想環境を用意する
f-stringとt-stringの型を比較する
`strings`と`interpolations`を表示する
小さな処理関数を作る
外部入力を扱う前にテストを書く
以下は、固定部分をそのまま使い、埋め込み値だけを角かっこで囲む学習用の最小処理器です。
from string.templatelib import Interpolation, Template
def render(template: Template) -> str:
parts: list[str] = []
for part in template:
if isinstance(part, Interpolation):
parts.append(f"[{part.value}]")
else:
parts.append(part)
return "".join(parts)
student = "佐藤"
result = render(t"提出者: {student}")
print(result)
この例の目的は、t-stringの内部を理解することです。角かっこで囲む処理にセキュリティ上の効果はありません。実際のHTML、SQL、シェルコマンドには、それぞれ専用のライブラリや安全なAPIが必要です。
テストを書くなら、固定文字列だけの場合、埋め込みが一つの場合、複数の場合、数値やNoneを渡した場合を分けます。入力と期待結果を小さく固定すると、処理器の役割が見えやすくなります。

まずTemplateの中身を見るだけなら、難しいアプリを作らなくても試せるのだ!

その通りです。型と部品を確認してから、用途別の処理へ進むと理解しやすいです。
安全な処理へつなげる考え方

t-stringは、書いただけでHTMLやSQLを安全にする機能ではありません。安全性を高められるのは、Templateを受け取った処理器が用途に応じて埋め込み値を検査、変換、エスケープできるためです。処理器を通さず、値を雑に連結すれば危険は残ります。
たとえばHTMLへ出力する処理器なら、固定部分はテンプレートとして扱い、埋め込み値にはHTMLエスケープを適用する設計が考えられます。一方、SQLでは文字列を自作してはいけません。データベースライブラリのプレースホルダーとパラメーター機能を使うのが基本です。シェルコマンドも、可能なら文字列一個ではなく引数のリストとして渡します。
PEP 750は、t-stringを特定用途専用ではなく、独自の文字列処理を作るための一般的な仕組みとして定義しています。そのためPython標準機能が、すべてのt-stringを自動でHTMLやSQLへ変換してくれるわけではありません。
向いている用途
- HTMLなど、値ごとにエスケープ方法を変えるテンプレート処理
- ログの固定文と値を別々に保存する構造化ログ
- 埋め込み値の型を検査する設定文や小さな専用記法
- 値を翻訳対象から分離したメッセージ処理
初心者向け用語表
| 用語 | 意味 | やさしい言い換え |
|---|---|---|
| リテラル | コードへ直接書く値 | コードに書いた値そのもの |
| Template | t-stringから作られるオブジェクト | 固定文と値を持つ入れ物 |
| Interpolation | 波かっこで埋め込んだ部分 | 差し込まれた値 |
| エスケープ | 特別な記号を安全な表現へ変える処理 | 誤解されない形への変換 |
| レンダリング | テンプレートを最終結果へ変える処理 | 部品から表示物を作ること |

「t-stringなら安全」ではなく、「安全な処理を強制しやすい材料を渡せる」と覚えると誤解を防げます。
FAQ

Q1. t-stringはPython 3.13で使えますか?
使えません。t-stringはPython 3.14で追加された構文です。Python 3.13以前では構文エラーになります。既存環境を直接更新する前に、プロジェクトの対応バージョンや授業の指定を確認してください。
Q2. f-stringは今後使わないほうがよいですか?
いいえ。表示用メッセージなど、完成した文字列をすぐ作る用途ではf-stringが適切です。t-stringは、固定部分と埋め込み値を分離したまま別の処理へ渡したい場合に使います。
Q3. t-stringをprintへ直接渡せますか?
オブジェクトとして渡すことはできますが、期待する完成文がそのまま表示されるとは限りません。通常は用途に合った処理関数でTemplateを読み、最終的な文字列や別のデータ構造へ変換します。
Q4. t-stringならSQLインジェクションを防げますか?
t-stringだけでは防げません。SQLではデータベースライブラリのパラメーター機能を使ってください。t-string対応の処理器を利用する場合も、その実装が値を安全に渡しているか確認が必要です。
Q5. t-stringは遅延評価ですか?
埋め込み式の値はt-stringを作る時点で評価されます。固定部分と値の組み立て方を後から選べるのであり、式の計算自体を好きな時点まで遅らせる仕組みではありません。
Q6. 初心者は何を作ると理解しやすいですか?
まずはTemplateを反復し、固定文字列とInterpolationを別々に表示する小さなプログラムがおすすめです。その後、埋め込み値を大文字へ変換する、型を表示するなど、安全性と無関係な学習用処理から始めてください。
Python t-stringは、文字列を便利に省略するだけの構文ではありません。固定文と値の境界を保ち、処理の責任を専用の関数やライブラリへ渡すための基礎です。最初はf-stringとの型の違いを確認し、必要な場面だけで使い分けましょう。


コメント