"構造体は単なるデータの集合ではない。設計者の思想を定着させる、最小単位のモデルである。"
構造体(struct)は、あまりにも当たり前すぎて、軽視されがちな構文だ。
だがRustにおいて構造体は、単なるデータの入れ物ではない。
それは**「設計者が、世界をどう分解し、意味づけているか」**を表現するための型的モデリングの起点である。
Rustは、構造体の構文において極めて厳格な明示性と責任の分離を求めてくる。
この章では、構造体を「設計構造」として捉え、フィールドに意味を与えるという行為の重さについて掘り下げていく。
構造体とは「意味のある束」である
struct User {
id: u64,
name: String,
email: String,
}
このような構造体は一見素朴だが、ここで表現されているのは「値」ではない。
それは、「この情報の組み合わせに、設計上の意味がある」という概念定義の宣言である。
構造体とは、型を用いた語彙の創造に他ならない。
フィールドはデータではなく“制約付きの責任”
たとえば、以下のように設計することは可能だ:
struct User {
id: i64,
name: String,
email: Option<String>,
}
しかし Option<String>
を使うという判断は、
「emailはなくても構わない」「null的状態を受け入れる」という設計上の意思表明でもある。
逆に Option
を使わないという選択は、「emailは絶対に存在する」という不変条件を型に封じた誓約である。
このように、フィールドの型はそのまま、設計上の制約と哲学を映し出す鏡である。
“構造を切る”とは、“意味を分離する”ことである
struct Address {
street: String,
city: String,
zip: String,
}
User
に address
をそのまま3つのフィールドで入れることも可能だが、
あえて Address
を構造体として切り出すのは、「この3つは固有の意味空間を持っている」という設計的分離である。
これは再利用性やモジュール性のためではない。
“この世界の構造はこうなっている”という設計者の世界観を構文にすることが目的だ。
新しい型を定義することは、ドメインに語彙を与えること
struct Email(String);
struct UserId(u64);
このような“ニュータイプ”を定義することは、「u64
という数字」と「ユーザーID」という意味を分離する行為である。
これは以下を可能にする:
- 異なる意味を持つ
u64
型の誤用を防ぐ(静的保証) - ドキュメントとしての自己表現力を高める
- 振る舞い(impl)を型に閉じ込められる
Rustにおいて、新しい型を定義することは、構文による意味論の分離なのだ。
structの使い方=責務の分配設計
struct Session {
token: String,
expires_at: DateTime<Utc>,
}
この構造体が担当する責務は、単なるデータ保存ではない。
それは「期限付きのトークンであること」「その有効性を判定できること」である。
impl Session {
fn is_expired(&self) -> bool {
Utc::now() > self.expires_at
}
}
構造体は、データと意味をまとめ、責務の最小単位として構造化するための構文である。
無意味なフィールド設計は、設計の死角を生む
struct User {
data: String, // ← これは何を表しているのか?
}
こうした「意味を失ったフィールド」は、設計全体の解像度を鈍らせる。
型名やフィールド名は、**ドキュメントではなく“構文による語彙”**であるべきだ。
-
String
は情報ではない、「名前」や「内容」や「説明」である -
bool
は存在ではない、「アクティブか?」「バンされているか?」というドメインの状態である
フィールド名は“設計に責任を持たせるための最小の単語”でなければならない。
「値を持つ」ことと「意味を持つ」ことの差異
Rustでは、型と構造によって「このデータがなぜ存在するか」が問われる。
- なぜ
Option<String>
なのか? - なぜ
Vec<Item>
を返すのか? - なぜそのフィールドは
pub
なのか?
それぞれの構造に「なぜ」がある。
それを説明できない設計は、意味を失った構文の羅列に過ぎない。
結語:構造体は最小単位のドメイン言語である
Rustにおける構造体は、単なる構文的便利道具ではない。
それは、“この世界をどのように解釈し、設計として切り分けるか”という構造的詩学である。
フィールドは、変数ではなく概念。
型は、構文ではなく定義。
構造体は、データではなく、設計という言語の最小単位である。
"型は、設計者が世界をどう見ているかを映す記号である。構造体は、その記号を文法にしたものだ。"