0Pricing
Learn Rust Coding · レッスン

その他の形式

TOML、YAML、bincode

「その他の形式」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。

JSON の先へ

serde のコア部分は形式に依存しないため、形式クレートを置き換えるだけで、同じ derive 済み構造体を多くの形式で使えます。

  • 設定には TOML
  • 人間が扱いやすいデータには YAML
  • コンパクトなバイナリには bincode

1 つの構造体、多数の形式

構造体は一度定義するだけです。各形式のクレートは、同じ Serialize / Deserialize 実装に対して、独自の to_string / from_str 相当の機能を提供します。

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct Config {
    name: String,
    port: u16,
}

TOML

TOML は設定ファイルでよく使われます(Cargo.toml 自体も TOML を使用しています)。toml クレートでシリアライズと解析を行えます。

use serde::Serialize;

#[derive(Serialize)]
struct Config { name: String, port: u16 }

fn to_toml(c: &Config) -> String {
    toml::to_string(c).unwrap()
}

TOML を解析する

toml::from_str を使うと、TOML の設定を構造体に読み戻せます。

use serde::Deserialize;

#[derive(Deserialize)]
struct Config { name: String, port: u16 }

fn parse(s: &str) -> Config {
    toml::from_str(s).unwrap()
}

YAML

YAML はネストした、人間が編集するデータに適しています。同じ API 形式を持つ serde_yaml などのクレートを使います。

use serde::Serialize;

#[derive(Serialize)]
struct Config { name: String, port: u16 }

fn to_yaml(c: &Config) -> String {
    serde_yaml::to_string(c).unwrap()
}

bincode

bincode はコンパクトなバイナリ形式です。人間が読む必要がなく、サイズや速度が重要なキャッシュや通信に適しています。

use serde::Serialize;

#[derive(Serialize)]
struct Config { name: String, port: u16 }

fn to_bytes(c: &Config) -> Vec<u8> {
    bincode::serialize(c).unwrap()
}

形式を選ぶ

利用者に応じて選びましょう。

  • ネストした人間向けの設定:TOML または YAML
  • Web API:JSON
  • 内部バイナリストレージ/転送:bincode

形式の選択をモデル化する

判断は、用途を形式に対応付けるだけです。この実行可能な例では、その選択ロジックを表現しています。

fn pick_format(use_case: &str) -> &str {
    match use_case {
        "config" => "TOML",
        "api" => "JSON",
        "cache" => "bincode",
        _ => "JSON",
    }
}

fn main() {
    println!("{}", pick_format("config"));
    println!("{}", pick_format("cache"));
    println!("{}", pick_format("api"));
}

バイト列をラウンドトリップする

バイナリ形式ではラウンドトリップが可能です。バイト列にシリアライズし、その後同じ構造体にデシリアライズします。この実行可能な例では、バイト長の往復を概念的にモデル化しています。

fn encode(name: &str) -> Vec<u8> {
    name.as_bytes().to_vec()
}

fn decode(bytes: &[u8]) -> String {
    String::from_utf8(bytes.to_vec()).unwrap()
}

fn main() {
    let bytes = encode("Alice");
    println!("len={}", bytes.len());
    println!("back={}", decode(&bytes));
}

形式固有の違い

形式によって対応できる機能は異なります。TOML では null が許可されず、ネストにはテーブルが必要です。YAML はアンカーをサポートします。bincode は自己記述型ではないため、両端で型を共有する必要があります。

属性は引き続き適用される

学習した #[serde(...)] 属性(rename、default、skip)は、形式層ではなく serde 層で動作するため、すべての形式で使えます。

use serde::Serialize;

#[derive(Serialize)]
#[serde(rename_all = "kebab-case")]
struct Config { max_connections: u32 }

理解度チェック

その他の形式についての理解度を確認しましょう。

まとめ

serde のその他の形式について学びました。

  • 1 つの derive 済み構造体を TOML、YAML、JSON、bincode で使えます
  • 各形式のクレートは、使い慣れた to_string / from_str 形式の API を提供します
  • 設定、API、バイナリストレージなど、用途に応じて選びます
  • serde の属性はすべての形式に適用されます

これで Serde コースと Rust シリーズは完了です。

よくある質問

「その他の形式」レッスンは無料ですか?

はい。「その他の形式」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。

「その他の形式」で何を学びますか?

TOML、YAML、bincode ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn Rust Codingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「その他の形式」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn Rust Codingレッスンでコードを書いて実行できますか?

はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. シリアライズとデシリアライズ
  2. JSONの操作
  3. カスタムシリアライゼーション
  4. その他の形式
← Learn Rust Codingに戻る