📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

82行目: 82行目:
* コメント
* コメント
*: シャープ記号 (<code>#</code>) を使用する。
*: シャープ記号 (<code>#</code>) を使用する。
<br><br>
== toml++ライブラリ ==
==== toml++ライブラリとは ====
toml++ライブラリは、C++ 17以降で記述されたヘッダファイルのみのTOMパーサーおよびシリアライザーライブラリである。<br>
このライブラリは、TOML v1.0.0仕様に完全準拠しており、使いやすい設計が特徴である。<br>
<br>
主な特徴として、テンプレートベースの設計が挙げられる。<br>
これにより、コンパイル時の型チェックが可能となり、実行時のパフォーマンスが向上する。<br>
また、例外を使用しないエラーハンドリングをサポートしており、例外が禁止されている環境でも問題なく使用できる。<br>
<br>
toml++は、UTF-8エンコーディングを完全にサポートしており、国際化されたアプリケーションでの使用が容易になる。<br>
さらに、コメントの保持機能も備えており、TOMLファイルを読み込んで修正した後、元のコメントを保持したまま書き出すことができる。<br>
<br>
toml++ライブラリは、単一ヘッダファイル版と複数ヘッダファイル版の両方が提供されており、プロジェクトの要件に応じて適切なものを選択することができる。<br>
<br>
toml++ライブラリの使用例としては、設定ファイルの読み書き、データのシリアライズ / デシリアライズ、構造化されたデータの保存等が挙げられる。<br>
C++の標準ライブラリと密接に統合されているため、std::stringクラスやその他のSTLコンテナとの相互運用性が高い。<br>
<br>
パフォーマンス面では、toml++ライブラリは他の多くのTOMLパーサーよりも高速であることが報告されている。<br>
大規模なTOMLファイルを扱う場合や、頻繁なパース / シリアライズ操作が必要なアプリケーションで特に威力を発揮する。<br>
<br>
ドキュメンテーションも充実しており、GitHubリポジトリには詳細な使用方法や設定オプションが記載されている。<br>
また、豊富な例やチュートリアルも提供されているため、初めて使用する開発者でも迅速に習得することができる。<br>
<br>
==== toml++ライブラリのライセンス ====
toml++ライブラリのライセンスはMITライセンスに準拠しているため、商用プロジェクトを含む幅広い用途で自由に使用することができる。<br>
<br>
==== toml++の主要なクラス ====
toml++ライブラリの主要クラスを以下に示す。<br>
<br>
* toml::table
*: TOMLのキー・値のペアを表現する中心的なクラスである。
*: std::mapに似た動作をしており、TOMLドキュメント全体や入れ子になったテーブルの表現に使用する。
*: <br>
* toml::array
*: TOMLの配列を表現するクラスであり、std::vectorに類似している。
*: 異なる型の要素を含むことができる柔軟な配列である。
*: <br>
* toml::value
*: TOMLの任意の値 (文字列、整数、浮動小数点数、ブーリアン、日付 / 時刻、配列、テーブル) を表現できる汎用的なクラスである。
*: 型安全な方法で値を保持して、必要に応じて型変換を行う。
*: <br>
* toml::date
* toml::time
* toml::date_time
*: これらのクラスは日付と時刻の処理に使用する。
*: TOMLの日付・時刻形式を精密に表現して、操作するためのものである。
*: <br>
* toml::parse関数とtoml::formatterクラス
*: パースとシリアライズの機能を提供する。
*: toml::parseは、文字列やストリームからTOMLデータを読み込み、toml::formatterは、TOMLデータを文字列や出力ストリームに書き出す。
*: <br>
* toml::parse_result
*: エラーハンドリングに使用されるクラスである。
*: パース操作の結果を表し、成功時にはパースされたデータを、失敗時にはエラー情報を提供する。
*: <br>
* toml::node
*: TOMLドキュメントの任意のノード (キー、値、テーブル、配列) を表現する抽象基底クラスである。
*: 型に依存しない汎用的な操作が可能になる。
<br>
==== toml++ライブラリのインストール ====
===== パッケージ管理システムからインストール =====
# RHEL
sudo dnf install tomlplusplus tomlplusplus-devel
# SUSE
-
<br>
===== ソースコードからインストール =====
[https://github.com/marzer/tomlplusplus toml++ライブラリのGithub]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf tomlplusplus-<バージョン>.tar.gz
cd tomlplusplus-<バージョン>
<br>
toml++ライブラリをビルドおよびインストールする。<br>
mkdir build && cd build
# CMakeコマンドを使用する場合
cmake -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_INSTALL_PREFIX=<toml++ライブラリのインストールディレクトリ> \
      -DBUILD_EXAMPLES=ON        \  # サンプルコードもインストールする場合
      ..
make -j $(nproc)
make install
# Meson & Ninjaを使用する場合
meson setup ./build                                  \
      -Dprefix=<toml++ライブラリのインストールディレクトリ> \
      -Dbuild_examples=true  # サンプルコードもインストールする場合
Ninja -C build -j $(nproc)
Ninja -C build install
<br>
==== ライブラリの指定 ====
===== Qtプロジェクトファイルを使用する場合 =====
<syntaxhighlight lang="make">
# Qtプロジェクトファイル
# pkg-configを使用してtoml++ライブラリを設定
CONFIG += link_pkgconfig
PKGCONFIG += tomlplusplus
# pkg-configを使用しない場合
LIBS += -ltomlplusplus
</syntaxhighlight>
<br>
===== CMakeLists.txtファイルを使用する場合 =====
<syntaxhighlight lang="cmake">
# CMakeLists.txtファイル
# ...略
find_package(PkgConfig REQUIRED)
# toml+ライブラリの指定
pkg_check_modules(TOMLPP REQUIRED tomlplusplus)
# インクルードディレクトリの指定
target_include_directories(${PROJECT_NAME} PRIVATE
  # ...略
  ${TOMLPP_INCLUDE_DIRS}
)
# ...略
# ライブラリのリンク
target_link_libraries(${PROJECT_NAME} PRIVATE
    # ...略
    ${TOMLPP_LIBRARIES}
)
# コンパイルオプションの設定
target_compile_options(${PROJECT_NAME} PRIVATE
    # ...略
  ${TOMLPP_CFLAGS_OTHER}
)
</syntaxhighlight>
<br><br>
<br><br>