Cargo.toml(Rust)からJSONへの変換
RustのCargo.tomlマニフェストファイルをJSONに変換し、その構造を理解します。パッケージメタデータ、依存関係、機能フラグ、ワークスペース設定を解説します。
Real-World Configs
詳細な説明
Cargo.tomlはRustプロジェクトのマニフェストファイルで、Cargoパッケージマネージャーによって管理されます。TOMLの最もよく知られた実用例の一つです。そのJSON等価物を理解することは、ツーリング、CIパイプライン、プログラム的な依存関係管理に有用です。
典型的なCargo.toml:
[package]
name = "my-app"
version = "0.1.0"
edition = "2021"
authors = ["Alice <alice@example.com>"]
description = "A sample Rust application"
[dependencies]
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1", features = ["full"] }
reqwest = "0.11"
[dev-dependencies]
criterion = "0.5"
[features]
default = ["logging"]
logging = ["serde/std"]
[[bin]]
name = "my-app"
path = "src/main.rs"
JSONに変換すると:
{
"package": {
"name": "my-app",
"version": "0.1.0",
"edition": "2021",
"authors": ["Alice <alice@example.com>"],
"description": "A sample Rust application"
},
"dependencies": {
"serde": {"version": "1.0", "features": ["derive"]},
"tokio": {"version": "1", "features": ["full"]},
"reqwest": "0.11"
},
"dev-dependencies": {
"criterion": "0.5"
},
"features": {
"default": ["logging"],
"logging": ["serde/std"]
},
"bin": [
{
"name": "my-app",
"path": "src/main.rs"
}
]
}
変換時の注目ポイント:
- 依存関係はシンプルな文字列(
"0.11")またはバージョンと機能を持つインラインテーブルのいずれかです。両方の形式が有効なTOMLで、異なるJSON構造を生成します。 [[bin]]はテーブル配列構文を使用し、binキーの下にJSONオブジェクト配列を作成します。- 機能フラグは他の機能や依存関係の機能(
"serde/std")を参照する文字列配列です。 - ハイフン付きキー(
dev-dependencies)はTOMLでは有効なベアキーで、通常のJSON文字列キーになります。
CargoはTOMLのみを読み取りますが、JSON表現は cargo metadata、クレートレジストリ(crates.io API)、依存関係グラフをプログラム的に分析するビルドツールで使用されます。
ユースケース
Cargo.tomlファイルを読み取り、処理のためにJSONに変換し、依存関係のバージョン、機能フラグ、潜在的なセキュリティ脆弱性に関するレポートを生成する依存関係分析ツールの構築。