OSS探訪GitHubでログイン

型安全なformat文字列でC++/Cの文字列整形・出力・日時・range表示を高速かつportableに扱う

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
25,864
主要言語
C++
ライセンス
MIT
リポジトリ最終更新
2026/10/03
ページ内ナビ

概要

{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]

header-only・CMake library・C11 API・C++20 moduleを用途に応じて選べる

通常のcompiled libraryに加えFMT_HEADER_ONLYも利用できます。12.2.0ではC11向けfmt-c APIと、C++20 module用のfmt::fmt-module targetが追加されています。

出典:[1][2][3]

向いている用途

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. [1]{fmt} 12.2.0 README(2026-10-04)
  2. [2]{fmt} 12.2.0 release(2026-10-04)
  3. [3]{fmt} 12.2.0 CMake configuration(2026-10-04)
  4. [4]{fmt} MIT license(2026-10-04)
編集部からの補足

{fmt}は単なるprintf置き換えではなく、format stringの型安全性と複数platformで同じ出力規則を持たせたい場合に有効です。benchmark値だけで選ばず、compile time・binary size・実workloadも合わせて測定してください。

3ステップで試す

  1. 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. 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. 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
公式READMEで確認

成長

成長の推移 · 直近30日

25,864 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
60
Open PR
6

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

カテゴリ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • formatting
  • printf
  • output
  • chrono
  • performance
  • multiplatform
  • cross-platform
  • cpp
  • ranges
  • floating-point
  • unicode
  • c-plus-plus
Stars
25,864
Forks
3,079
Watchers
326
Open Issues
6
Contributors
436
所有者種別
Organization
主要言語
C++
ライセンス
MIT
リポジトリ最終更新
2026/10/03

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?