ページ内ナビ
概要
{fmt}はC++向けのformatting libraryで、fmt::formatやfmt::printを使って文字列整形と出力を型安全に記述できます。C++20 std::formatやC++23 std::printの基になったAPI系統を持ち、日時、range、色付き出力、user-defined typeなどにも拡張できます。
特徴と向いている用途
公式資料に基づく紹介・実機未検証 · 内容確認日:
主な特徴
fmt::formatとfmt::printで型安全に文字列を組み立てる
Pythonに近いformat string syntaxを使い、position指定やformat specifierを含む出力をC++の型と対応付けて記述できます。C++20では誤ったformat specifierをcompile timeで検出できる構成も利用できます。
出典:[1]
日時・range・色・user-defined typeまでformatterを拡張する
fmt/chrono.h、fmt/ranges.h、fmt/color.hなどを使い、日時、container、text styleを同じformat APIで扱えます。custom formatterを定義して独自typeも統合できます。
出典:[1]
向いている用途
printf/iostreamの置き換えや複数platformで一貫したformattingが必要なC++ projectに向く
型安全性、portableなUnicode対応、formattingの拡張性、compile-time checkを重視し、applicationやlibraryで共通の出力表現を整えたいC++ codebaseに適します。
出典:[1]
導入前の確認
benchmark値は環境依存なので自分のworkloadで測定する
upstream READMEはprintfやiostreamとのperformance benchmarkを掲載していますが、compiler、optimization、data patternで結果は変わります。性能目的の導入では実際のapplication workloadで測定してください。
出典:[1]
12.2.0ではdeprecated APIとheader include挙動の変更を確認する
12.2.0ではfmt::sayの削除、fmt::joinなど一部overloadの非推奨化、fmt/core.hが従来のようにfmt/format.hを暗黙に読み込まない変更などがあります。既存codeを更新する場合はrelease noteを確認してください。
出典:[2]
参考にした公式資料
- [1]{fmt} 12.2.0 README(2026-10-04)
- [2]{fmt} 12.2.0 release(2026-10-04)
- [3]{fmt} 12.2.0 CMake configuration(2026-10-04)
- [4]{fmt} MIT license(2026-10-04)
編集部からの補足
{fmt}は単なるprintf置き換えではなく、format stringの型安全性と複数platformで同じ出力規則を持たせたい場合に有効です。benchmark値だけで選ばず、compile time・binary size・実workloadも合わせて測定してください。
3ステップで試す
- 1
{fmt} 12.2.0のsourceを取得する
確認済みの最新release tagへ固定して取得します。
git clone --depth 1 --branch 12.2.0 https://github.com/fmtlib/fmt.git fmt-12.2.0 - 2
CMakeでlibraryをbuildする
documentationとtestを省いた最小構成でcompiled libraryをbuildします。CMakeLists.txtはC++11 compile featureを要求します。
cmake -S fmt-12.2.0 -B fmt-12.2.0/build -DFMT_TEST=OFF -DFMT_DOC=OFF && cmake --build fmt-12.2.0/build --config Release - 3
fmt::printの最小programをcompileして実行するUnix系のtoolchain例です。
answer=42が出れば基本的なformattingとlinkを確認できます。Windowsでは生成したCMake targetをVisual Studioからlinkしてください。cd fmt-12.2.0 && printf '#include <fmt/base.h>\nint main() { fmt::print("answer={}\\n", 42); }\n' > demo.cc && c++ -std=c++11 demo.cc -Iinclude build/libfmt.a -o demo && ./demo
成長
成長の推移 · 直近30日
25,864 Stars
推移データを蓄積中です。
開発アクティビティ
直近90日・週次
- Commit(直近30日)
- 60
- Open PR
- 6
開発アクティビティを蓄積中です。
Built with
カテゴリとタグ
カテゴリ
GitHubデータ
関連情報
関連記事を投稿するこのOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。
あわせて探訪
- React Native126,790 Stars
共通タグ 2件 · 共通カテゴリ 1件 · 同じ言語
React componentをnative UIへ描画するmobile framework。0.87.1とframework-first導線を整理
C++ - Electron123,376 Stars
共通タグ 2件 · 共通カテゴリ 1件 · 同じ言語
ChromiumとNode.jsを同梱し、HTML・CSS・JavaScriptから3 OS向けdesktop appを構築するruntime
C++ - Folly30,551 Stars
共通タグ 2件 · 共通カテゴリ 1件 · 同じ言語
performanceと実用性を重視したC++20 core componentsをMetaの大規模system向け知見とともに提供するutility library
C++ - Godot Engine118,086 Stars
共通タグ 2件 · 同じ言語
2D/3Dゲームを一つのエディタで構築し、デスクトップ・モバイル・Webへ展開する
C++ - OpenCV91,053 Stars
共通タグ 2件 · 同じ言語
5.0でtoolchainとAPI境界を更新したcomputer vision基盤
C++ - gRPC45,361 Stars
共通タグ 2件 · 同じ言語
Protocol Buffersでservice contractを定義しHTTP/2上で高性能RPCを実装するmulti-language framework
C++
情報の誤りを報告
掲載内容に誤りや古い情報があればお知らせください。