Rustのデータ型(Data Types)は、プログラミングにおける非常に重要な要素です。Rustは静的型付けの言語であるため、変数が保持できる値の種類を明示的に定義しなければなりません。この記事では、Rustで使用される主要なデータ型について完全かつ包括的に説明します。
1. 基本的なデータ型
1.1 整数型 (Integer Types)
Rustでは、整数型は符号付きと符号なしの両方が存在します。整数型は、整数値を扱うための型です。

-
符号付き整数(signed integer)
i8
: 8ビットi16
: 16ビットi32
: 32ビットi64
: 64ビットi128
: 128ビットisize
: アーキテクチャ依存(32ビットまたは64ビット)
-
符号なし整数(unsigned integer)
u8
: 8ビットu16
: 16ビットu32
: 32ビットu64
: 64ビットu128
: 128ビットusize
: アーキテクチャ依存(32ビットまたは64ビット)
整数型は、数値計算やインデックスの操作などで頻繁に使用されます。isize
およびusize
は、主にポインタのサイズやアーキテクチャに依存する処理に使われます。
1.2 浮動小数点型 (Floating-Point Types)
浮動小数点型は、小数を扱うための型です。Rustでは、2つの浮動小数点型があります。
f32
: 32ビット浮動小数点数f64
: 64ビット浮動小数点数(デフォルト)
浮動小数点型は、科学的計算や精度が必要な演算に使用されます。
1.3 真偽値型 (Boolean Type)
Rustでは、真偽値を表す型はbool
です。bool
型は、true
またはfalse
のいずれかの値を取ります。
bool
:true
またはfalse
この型は条件式や論理演算に使用されます。
1.4 文字型 (Character Type)
Rustでは、文字を表す型としてchar
があります。char
型は、Unicodeスカラー値を1文字として表現します。1文字は、4バイト(32ビット)で表されます。
char
: 1文字のUnicodeスカラー値(例:'a'
、'あ'
、'😊'
)
文字型は、文字列の操作や文字ごとの処理に利用されます。
2. 複合型 (Compound Types)
2.1 タプル型 (Tuple)
タプルは、複数の異なる型の値を1つにまとめたものです。タプルの各要素は異なる型を持つことができます。タプルは、括弧で囲まれたカンマ区切りの値で表されます。
rustlet tuple: (i32, f64, char) = (42, 3.14, 'a');
タプルの要素には、インデックスでアクセスすることができます。インデックスは0から始まります。
rustlet first = tuple.0; // 42
let second = tuple.1; // 3.14
タプルは、関数の戻り値として複数の値を返す場合などに便利です。
2.2 配列型 (Array)
配列は、同じ型の要素が並んだものです。Rustでは配列のサイズは固定されており、宣言時にサイズを決定します。
rustlet array: [i32; 3] = [1, 2, 3];
配列の各要素にはインデックスでアクセスできます。
rustlet first = array[0]; // 1
let second = array[1]; // 2
配列は、同じ型の複数の要素をまとめて扱いたい場合に使用されます。
3. 所有権と借用
Rustは所有権と借用(Ownership and Borrowing)に基づくメモリ管理システムを採用しており、これによりガーベジコレクションなしでメモリ管理が行われます。これに関連する重要な概念として「参照型(References)」があります。
3.1 参照型 (Reference Types)
参照は、メモリ上のデータへの「ポインタ」のようなものです。参照には2種類があります。
- 不変参照 (
&T
) : データを変更しない参照 - 可変参照 (
&mut T
) : データを変更できる参照
rustlet x = 5;
let y = &x; // 不変参照
可変参照は、一度に1つの可変参照のみを持つことができます。この制約により、データ競合を防ぎます。
4. ユーザー定義型
Rustでは、ユーザーが独自のデータ型を定義することができます。これには、struct
(構造体)やenum
(列挙型)などが含まれます。
4.1 構造体型 (Struct)
構造体は、異なる型のデータをまとめるための型です。
ruststruct Person {
name: String,
age: u32,
}
構造体は、複数のフィールドを持つことができ、それぞれ異なる型を持つことが可能です。
4.2 列挙型 (Enum)
列挙型は、複数の異なる値の選択肢を持つ型です。
rustenum Direction {
Up,
Down,
Left,
Right,
}
列挙型は、異なる状態を持つ値を表すために使用されます。
5. Option型とResult型
Rustでは、Option
型とResult
型という特別な列挙型がよく使われます。
5.1 Option型
Option
型は、値があるかもしれないし、ないかもしれないという場合に使用します。
rustenum Option {
Some(T),
None,
}
5.2 Result型
Result
型は、操作が成功したかどうかを示すために使用されます。
rustenum Result {
Ok(T),
Err(E),
}
これらはエラーハンドリングに非常に便利です。
6. その他のデータ型
6.1 スライス型 (Slice)
スライスは、配列やベクタの一部分を参照する型です。固定長の配列や動的なベクタの一部分にアクセスするために使用します。
rustlet arr = [1, 2, 3, 4, 5];
let slice = &arr[1..4]; // [2, 3, 4]
6.2 関数型 (Function Type)
Rustでは、関数自体もデータ型として扱われます。関数型は、関数を変数に代入したり、他の関数の引数として渡したりできます。
rustfn add(a: i32, b: i32) -> i32 {
a + b
}
let sum: fn(i32, i32) -> i32 = add;
まとめ
Rustのデータ型は、プログラムの安全性、効率性、可読性を確保するために設計されています。基本的な型から複合型、ユーザー定義型、さらにOption型やResult型などの特殊な型まで、Rustではさまざまなデータ型を効果的に活用することができます。これらのデータ型を適切に使いこなすことで、より堅牢で効率的なRustプログラムを作成できるようになります。