serde・とは?初心者が知っておく基本と使い方ガイド共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
serde・とは?初心者が知っておく基本と使い方ガイド共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)


serde・とは?初心者が知っておく基本と使い方ガイド

プログラミングを始めたばかりの人にとって、外部とデータをやりとりする作業は難しく感じます。そんなときに役立つのが serde です。ここでは serde が何か、どう使うのかを、初心者にも分かりやすく解説します。

serdeとは?

serde は Rust のライブラリで、データを「シリアライズ」(データを文字列やバイト列に変換) したり、「デシリアライズ」(文字列やバイト列からデータへ戻す) する機能を提供します。シリアライズの対象は 構造体列挙型、基本データ型などです。

なぜ serde が便利なのか

serde を使うと、データの保存や通信の準備がとても楽になります。例えば、ゲームの設定データやアプリの設定、ウェブAPIとのやり取りで出てくる JSON 形式のデータを、そのまま Rust のデータ構造に変換したり、逆に Rust のデータを JSON 形式に変換したりできます。これにより、データの形を自分で細かく作る必要が減り、コードがすっきりします。

どう使うの?基本的な使い方

まず Cargo.toml に依存関係を追加します。一般的には serdeserde_json を使います。コードで言うと、データ構造体に SerializeDeserialize の派生を付けるだけで、変換の基礎が作れます。例は以下のようになります。#[derive(Serialize, Deserialize)] という属性を使うのが基本です。

例えば、名前と年齢を持つ人を表す struct を定義して、それを JSON に変換する手順は次のとおりです。let person = Person { name: "太郎".to_string(), age: 12 }; let json = serde_json::to_string(&person).unwrap();

同様に JSON を Rust のデータへ戻すには serde_json::from_str を使います。let person2: Person = serde_json::from_str(&json).unwrap(); です。

実際の使い方の流れ

1) 依存関係を追加する <span>[dependencies] に serdeserde_json を記述します。derive を有効にする場合は serde の feature も使います。

2) データ構造体に派生を付ける struct Person#[derive(Serialize, Deserialize)] を付けます。これだけで、Serialize/Deserialize の機能が自動的に実装されます。

3) シリアライズとデシリアライズを実行する serde_json::to_string で文字列化、serde_json::from_str で復元します。

よく使われる形式と対応ライブラリ

JSON に最もよく使われるのは serde_json です。他にも YAMLTOMLMessagePack など、さまざまな形式を扱うライブラリが serde と連携します。

<th>機能
説明
Serializeデータを文字列やバイト列に変換する機能serde_json::to_string(&data)
Deserialize文字列やバイト列をデータに戻す機能serde_json::from_str::(s)
Derive実装を自動生成する派生マクロ#[derive(Serialize, Deserialize)]

注意点とコツ

すべてのフィールド が Serialize/Deserialize を実装している必要があります。Option のように值が入らない場合を考慮すると良いです。

・データの形式を厳密に制御したい場合は、serde の属性を使ってスキップやリネーム、デフォルト値の設定ができます。例として #[serde(skip_serializing_if = "Option::is_none")] のような指定を付けると、空の項目を出力しません。

まとめ

この serde は、Rust でデータの入出力をかなり楽にする強力な道具です。初めは派生と基本的な変換を覚え、必要に応じて様々な形式のライブラリを組み合わせて使うとよいでしょう。覚えるべきポイントは SerializeDeserialize、派生の使い方、そして慣れてきたら属性での微調整です。これらを身につければ、データの読み書きがぐんと楽になります。


serdeの同意語

シリアライズ
データを保存・送信のために、外部フォーマットへ変換する処理。例: JSON や YAML、バイナリ形式への変換を含みます。
直列化
データ構造を連続したバイト列に変換する処理。シリアライズとほぼ同義の日本語表現です。
エンコード
データを別の表現形式に変換する行為。シリアライズの一部として使われることが多い用語です。
デシリアライズ
受け取ったデータを元のデータ構造へ復元する処理。
コード
エンコードされたデータを元の形式へ戻す作業。
データ変換
データを別の形式・表現に変える広義の概念。シリアライズはこの一部として位置づけられます。
フォーマット変換
データのフォーマット(例: JSON、YAML、バイナリ)を別のフォーマットへ変換すること。
シリアライズライブラリ
データのシリアライズ/デシリアライズを行える機能を提供するソフトウェア群の総称。
直列化ライブラリ
データを直列化する機能を提供するライブラリ。特に Rust のエコシステムでは serde のようなクレートを指します。

serdeの対義語・反対語

デシリアライズ
シリアライズされたデータを元のデータ構造に戻す処理。serdeが提供する機能の反対側の操作で、例としてJSON文字列を構造体に復元する。
シリアライズ
データ構造をシリアライズ可能な形式(例: JSON、YAML、バイナリ)に変換する処理。serdeが提供するもう一方の機能で、例として構造体をJSON文字列に変換する。
未シリアライズデータ
まだシリアライズされていない生データ。保存や通信の前段階にある状態。
未デシリアライズデータ
デシリアライズされていないデータ。元のデータ構造にはまだ復元されていない状態。
生データ
加工や変換を受けていない元データ。シリアライズ前の原型データのこと。
手動デシリアライズ
自動化ツールを使わずに、手作業でデシリアライズを行うこと。
手動シリアライズ
自動化ツールを使わずに、手作業でシリアライズを行うこと。
データ変換の対極
データを生の状態のまま扱うこと、または元のデータ構造へ戻す操作の対立概念として使える表現。

serdeの共起語

Rust
Rust は安全で高速なシステム系言語。serde は Rust のクレート(ライブラリ)として広く使われ、Rust のデータを外部フォーマットへ変換します。
シリアライズ
データを JSON・YAML・バイナリなどの外部形式へ変換する処理。serde はこの作業を行う主要な仕組みです。
デシリアライズ
外部形式のデータを Rust のデータ構造へ戻す処理。serde はデシリアライズをサポートします。
Serialize
シリアライズを行うためのトレイト。これを実装するとデータを外部形式へ変換できるようになります。
Deserialize
デシリアライズを行うためのトレイト。これを実装すると外部データを Rust に変換できます。
Serializer
実際の出力先を担う、シリアライズ処理の中核となる抽象的な型。
Deserializer
入力データを Rust の型へ変換する処理を担う抽象的な型。
SerializeSeq
配列のシリアライズを扱う補助的な型。順序付けられたデータを順に出力します。
SerializeMap
連想配列のシリアライズを扱う補助的な型。キーと値を対応付けて出力します。
SerializeStruct
構造体をシリアライズする際の補助型。フィールド単位での出力を制御します。
DeserializeStruct
構造体をデシリアライズする際の補助型。フィールドの復元を支援します。
serde_json
JSON 形式のデータを serde で扱うための公式クレート。JSON の読み書きで最もよく使われます。
serde_yaml
YAML 形式のデータを serde で扱うためのクレート。設定ファイルなどで利用されます。
toml
Toml 形式のデータを serde と組み合わせて扱うクレート。設定ファイルでよく使われます。
bincode
高速なバイナリ形式のシリアライズ/デシリアライズ。サイズと速度を重視する場面で使われます。
CBOR
CBOR という二値データ形式。軽量で効率的なデータ交換に適し、serde_cbor と組み合わせて使います。
MessagePack
MessagePack という二値フォーマット。軽量で高速なデータ交換に適し、serde_rmp などと組み合わせて利用されます。
derive(Serialize,Deserialize)
Rust の型に #[derive(Serialize,Deserialize)] を付けて自動実装を生成します。
クレート/クレート名
Rust のライブラリを指す総称。serde は多くのクレートと連携して使われます。
Cargo
Rust の依存管理ツール。serde などのクレートは Cargo.toml に依存として追加して使います。

serdeの関連用語

serde
Rust のデータを任意のフォーマットへ変換する共通のインタフェースを提供するフレームワーク。フォーマットに依存せず Serialize/Deserialize を使ってデータ変換を行います。
Serialize
データを外部表現へ変換する能力を表すトレイト。実装された型は Serializer によって出力フォーマットへ書き出されます。
Deserialize
外部表現のデータを型に復元する能力を表すトレイト。Deserializer を介して値が構築されます。
Serializer
データを具体的なフォーマットへ書き出すためのインターフェース。JSON や YAML の実装はこれを実装します。
Deserializer
外部データ源からデータを読み込み、型へ復元するインターフェース
Deriveマクロ
#[derive(Serialize, Deserialize)] を使って自動的に実装を生成する派生マクロ。
serde_derive
Serialize/Deserialize の派生マクロを提供するクレート。
#[derive(Serialize, Deserialize)]
フィールドごとに Serialize/Deserialize の実装を自動生成します。
serde_json
JSON 形式のデータを扱うための serde 対応クレート。変換関数 to_string/from_str などを提供します。
serde_yaml
YAML 形式のデータを扱うための serde 対応クレート。可読性の高いフォーマットです。
TOML
Toml 形式のデータを serde で扱えるようにするクレート。設定ファイルなどでよく使われます。
serde_cbor
CBOR 形式のシリアライズ/デシリアライズを提供するクレート。
serde_json::Value
動的な JSON データを表す型。構造が決まっていないデータを扱うときに便利です。
serde_bytes
バイト列を効率的にシリアライズ/デシリアライズするためのクレート。
serde_repr
列挙型を数値表現でシリアライズ/デシリアライズするための補助ツール。
with
フィールドごとに特定の (デ)シリアライズ関数を指定してカスタマイズします。
default
フィールドがデータに含まれない場合にデフォルト値を使う設定。
rename
フィールド名を別名にしてシリアライズ/デシリアライズします。
rename_all
フィールド名の一括変換ルールを設定します(CamelCase/ snake_case など)。
skip_serializing_if
条件を満たす場合にそのフィールドをシリアライズから除外します。
skip_deserializing
デシリアライズ時にこのフィールドを無視します。
flatten
ネストしたデータを平坦化して (デ)シリアライズします。複雑な構造を簡潔に扱えます。
untagged
列挙の表現でタグを使わず、値だけで判定します。
externally_tagged
外部タグ付け表現。列挙のバリアントをタグの値として別フィールドで表現します。
internally_tagged
内部タグ付け表現。データ自体にタグを埋め込み、どのバリアントかを特定します。
adjacently_tagged
隣接タグ付け表現。タグとデータを別々のフィールドとして並べて表現します。
SerializeSeq
シーケンスをシリアライズする際の内部 API の一つ。
SerializeTuple
タプルをシリアライズする際の内部 API。
SerializeMap
マップをシリアライズする際の内部 API。
SerializeStruct
構造体をシリアライズする際の内部 API。
DeserializeSeq
シーケンスをデシリアライズする際の内部 API。
DeserializeTuple
タプルをデシリアライズする際の内部 API。
DeserializeMap
マップをデシリアライズする際の内部 API。
DeserializeStruct
構造体をデシリアライズする際の内部 API。
Visitor
デシリアライズ時にデータの型を解釈するための訪問者パターンを提供するトレイト。
DeserializeOwned
所有権を確保してデシリアライズするヘルパー。
no_std
標準ライブラリを使わずに動作させる場合の設定。
Features std/alloc
Cargo の機能フラグで std/alloc 対応を選択します。
RON
Rusty Object Notation。serde と組み合わせて使う軽量データ表現。
to_string
フォーマットへ変換して文字列として取得する代表的な関数。
from_str
文字列からデータ構造へ復元する代表的な関数。
to_string_pretty
人間に読みやすい整形済みの文字列を生成します。
Error/エラー種別
シリアライズ/デシリアライズ時に発生するエラーの型。serde::Error や各フォーマットクレートのエラーが該当します。

serdeのおすすめ参考サイト


インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
14983viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
2457viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
1094viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
1074viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
963viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
923viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
884viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
865viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
816viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
814viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
742viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
722viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
627viws
xlsmとは?初心者でも分かるExcelのマクロ付きファイルの基本共起語・同意語・対義語も併せて解説!
625viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
611viws
countifとは?初心者でもすぐ使える基本と応用ガイド共起語・同意語・対義語も併せて解説!
564viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
547viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
523viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
514viws
googleドキュメントとは?初心者が今日から使いこなす基本ガイド共起語・同意語・対義語も併せて解説!
489viws

新着記事

インターネット・コンピュータの関連記事