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に変換し、依存関係のバージョン、機能フラグ、潜在的なセキュリティ脆弱性に関するレポートを生成する依存関係分析ツールの構築。

試してみる — TOML ↔ JSON Converter

フルツールを開く