---
title: "Rustとは？プログラミング言語の特徴・所有権・できることをコードで解説"
url: "https://www.issoh.co.jp/column/details/2248/"
published: 2024-05-22
updated: 2026-10-12
categories: ["Webシステム"]
publisher: "株式会社一創"
---

# Rustとは？プログラミング言語の特徴・所有権・できることをコードで解説

Rust（ラスト）は、ガベージコレクション（GC）を使わずにメモリ安全性を保証するシステムプログラミング言語です。所有権や借用の規則に反するコードはコンパイル時に拒否されます。ただし、メモリ安全性の保証には、依存先を含むunsafeコードが安全性の条件を守っていることが必要です。また、配列の境界検査など、実行時の検査で防ぐ誤りもあります。この記事では、名前の意味と由来、現在の版、所有権でコンパイルが止まる実際の出力、他言語との違い、作れるもの、選ぶべきでない場面までを、一次情報とコードで説明します。なお、検索で並ぶ「Rust ゲーム」は同名のサバイバルゲームで、本記事が扱うプログラミング言語とは別物です。

## まとめ：Rust（プログラミング言語）の要点

- **正体**：GCなしでメモリ安全を保証するコンパイル型の言語。[2015年5月に1.0を公開](https://blog.rust-lang.org/2015/05/15/Rust-1.0.html)し、6週間ごとに新しい安定版が出ます（2026年10月時点の最新は1.99.0）。
- **仕組み**：値の持ち主（所有者）を1つに限る「所有権」と、貸し借りの規則「借用」をコンパイラが検査します。規則に反するコードはビルドが通りません。
- **実績**：Androidでは2025年にメモリ安全性の脆弱性が初めて全体の20%を下回り、Linuxカーネルは2025年12月にRustの「実験」扱いを終えました。Stack Overflowの2025年調査でもadmired（また使いたい言語）の1位です。
- **弱点**：所有権・借用・ライフタイムの学習コストと、長めのコンパイル時間。試作の速さを最優先する開発には向きません。
- **作れるもの**：Webサーバー、CLIツール、組み込み、WebAssembly、ゲームエンジン、機械学習の基盤など。

## Rustの読み方と名前の意味：同名ゲームとの見分け方

### 読み方と「rust」という英単語の意味

Rustは「ラスト」と読みます。英単語のrustは「さび（錆）」で、植物に赤褐色の斑点を作る「さび病菌（rust fungi）」もrustと呼ばれます。作者のGraydon Hoare氏は、言語名をこのさび病菌から取りました。[MIT Technology Reviewの取材（2023年2月）](https://www.technologyreview.com/2023/02/14/1067869/rust-worlds-fastest-growing-programming-language/)で、同氏はさび病菌を「生き残るために過剰なほど作り込まれた（over-engineered for survival）」生き物だと表現しています。「錆びた」という否定的な意味で付けた名前ではありません。

### 同名サバイバルゲーム「Rust」との違い

「Rust ゲーム」「Rust PS5」「VCR Rust」で検索して出てくるのは、英Facepunch Studiosのサバイバルゲーム「Rust」です。2013年12月にSteamで早期アクセスを始め、2018年2月8日に正式版になりました。日本では配信者が集まるサーバーイベントでよく知られています。プログラミング言語のRustとは名前が同じだけで、開発元も中身も関係ありません。ゲームの攻略やサーバー情報を探している場合、本記事は目的に合いません。一方、Rust言語でゲームを作る話であれば、後述のゲームエンジンBevyにつながります。

## Rustの歴史と最新バージョン：1.0から1.99まで

Rustは2006年、当時Mozillaに勤めていたGraydon Hoare氏の個人プロジェクトとして始まりました。前述の取材によると、きっかけは自宅のエレベーターがソフトウェアの不具合で止まっていたことで、メモリのバグを起こさずに小さく速いコードを書ける言語を作ろうとしたのが出発点です。2009年にMozillaが正式に支援を始め、2015年5月15日に最初の安定版1.0を公開しました。2021年2月8日には、開発の受け皿として独立した非営利団体の[Rust Foundation](https://rustfoundation.org/media/hello-world/)が発足しています。

| 年月          | 出来事                                                    |
| ----------- | ------------------------------------------------------ |
| 2006年       | Graydon Hoare氏の個人プロジェクトとして開始                           |
| 2009年       | Mozillaが開発を支援                                          |
| 2015年5月15日  | 安定版1.0を公開                                              |
| 2021年2月8日   | Rust Foundation設立（AWS・Google・Huawei・Microsoft・Mozilla） |
| 2025年2月20日  | 1.85.0で2024 Editionが安定化                                |
| 2025年12月10日 | Linuxカーネルが「Rustの実験」を終了                                 |
| 2026年10月1日  | 最新の安定版1.99.0                                           |

### 6週間ごとのリリースとEditionの関係

安定版は6週間ごとに出るため、版番号はすぐに上がります。最新版はrust-lang/rustリポジトリの[RELEASES.md](https://github.com/rust-lang/rust/blob/master/RELEASES.md)や[公式ブログ](https://blog.rust-lang.org/)で確認できます。個々の版の変更点は[Rust 1.97.0とは｜v0シンボルマングリング既定化とCargo警告制御の変更点【2026年7月】](/tech/details/15604/)のような版ごとの記事で追うのが確実です。

版番号とは別に、言語の大きな節目を表すのが「Edition」です。2015・2018・2021・2024の4つがあり、最新の2024 Editionは[1.85.0（2025年2月20日）](https://blog.rust-lang.org/2025/02/20/Rust-1.85.0.html)で安定化しました。互換性のない文法変更はEditionの切り替えでだけ入ります。Editionはコンパイル単位であるクレートごとに選ぶもので、2021 Editionのライブラリを2024 Editionのプロジェクトから呼べます。古いコードが新しいコンパイラで突然動かなくなる事態を避けるための仕組みです。2026年10月時点で `cargo new` を実行すると、生成される `Cargo.toml` には `edition = "2024"` が入ります。

## 所有権と借用：コンパイルが止まる実例で見るメモリ安全

Rustの説明で必ず出てくる「所有権」は、言葉で読むより、コンパイラに止められる様子を見たほうが早く理解できます。以下はrustc 1.98.0で実行した結果です。

### ムーブ後の変数使用とE0382エラー

Rustでは、ヒープにデータを持つ `String` を別の変数に代入すると、所有権が移ります（ムーブ）。移した後の元の変数は使えません。

```
fn main() {
    let s1 = String::from("hello");
    let s2 = s1; // 所有権が s1 から s2 へ移る（ムーブ）
    println!("{s1} {s2}");
}
```

このコードを `cargo build` すると、ビルドは失敗し、実行ファイルは更新されません。エラー出力の抜粋は次のとおりです。

```
error[E0382]: borrow of moved value: `s1`
 --> src/main.rs:4:16
  |
2 |     let s1 = String::from("hello");
  |         -- move occurs because `s1` has type `String`, which does not implement the `Copy` trait
3 |     let s2 = s1; // 所有権が s1 から s2 へ移る（ムーブ）
  |              -- value moved here
4 |     println!("{s1} {s2}");
  |                ^^ value borrowed here after move
  |
help: consider cloning the value if the performance cost is acceptable
```

C/C++で生ポインタが指す領域の寿命や解放を誤ると、use-after-freeや二重解放が起こりえます。ただし、C++のstd::stringを通常の代入でコピーする操作は、上のRustのムーブとは異なり、それだけでこれらの不具合を起こすものではありません。Rustは、どの行で所有権が移り（value moved here）、どの行で使おうとしたか（value borrowed here after move）を示して、プログラムを動かす前に止めます。メモリの解放は所有者がスコープを抜けたときに自動で行われるので、GCも手動の `free` も要りません。

### 借用（&）による所有権の維持

所有権を移さずに値を使いたいときは、`&` を付けて「借用（参照）」します。

```
fn main() {
    let s1 = String::from("hello");
    let s2 = &s1; // 借用なら所有権は移らない
    println!("{s1} {s2}");
}
```

こちらはビルドが通り、`hello hello` と表示されます。同じ値の借用では、参照の有効期間が重なる間、「複数の共有参照」か「1つの可変参照（`&mut`）」のどちらかに限られます。共有参照と可変参照を同時に使うこともできません。この規則はデータ競合の防止に役立ちます。データ競合とは、複数スレッドが同期なしで同じメモリにアクセスし、少なくとも一方が書き込む状態で、読み取りと書き込みの組み合わせでも発生します。所有権の続き（ライフタイムや `&mut` の使い方）は、[Rust入門｜環境構築から所有権・基本文法、受託開発での採用判断まで](/tech/details/15373/)で手を動かしながら確認できます。値がスタックとヒープのどちらに置かれるかは[Rustのスタックとヒープ｜値がヒープへ脱出する条件とメモリ領域の使い分け](/tech/details/2814/)で扱っています。

## Rustが選ばれる理由：脆弱性の減少と採用の実績

Rustの評価を裏付ける材料として、開発者調査、Androidでの脆弱性密度と開発工程の比較、Linuxカーネルでの採用判断があります。

- **開発者の支持**：[Stack Overflow Developer Survey 2025](https://survey.stackoverflow.co/2025/technology)で、Rustは「使っている人がまた使いたい言語（admired）」の1位で、支持率は72%でした。
- **Androidの脆弱性が減った**：Googleの[Androidセキュリティチームの報告（2025年11月13日）](https://blog.google/security/rust-in-android-move-fast-fix-things/)によると、2025年はメモリ安全性の脆弱性が初めて全体の20%を下回りました。RustのコードはAndroidのC/C++コードと比べて、メモリ安全性の脆弱性の密度が1000分の1です。同報告のC++との比較では、中・大規模の変更でRustのロールバック率が約4分の1、コードレビューにかかる時間が約25%短いとされています。
- **Linuxカーネルの実験が終了**：LinuxカーネルはRustのサポートをLinux 6.1（2022年12月）で取り込み、カーネルに向く言語かを見極める「実験」として扱ってきました。2025年12月10日に東京で開かれたKernel Maintainers Summitで、この実験は終了と判断され、Rustを残す方針が決まりました（[LWN.netに掲載されたパッチ](https://lwn.net/Articles/1050308/)）。パッチには、既にAndroidを通じて数百万台の端末でRustのコードが動いていることも書かれています。
- **政府機関の推奨**：米国のCISAとNSAは2025年6月24日、メモリ安全な言語（MSL）への移行を促すガイドを[共同で公表](https://www.cisa.gov/news-events/alerts/2025/06/24/new-guidance-released-reducing-memory-related-vulnerabilities)しました。既存のC/C++資産を一度に書き換えるのではなく、新しく書く部分から段階的に移す考え方です。

速度の面では、RustにはGCによる一時停止がありません。設計方針の「ゼロコスト抽象化」は、使わない機能にはコストを払わず、使う抽象化も同等の処理を手書きした場合以上の負担を持ち込まない、という考え方です。すべての抽象化の実行時コストがゼロになるという意味ではありません。仕組みは[ゼロコスト抽象化とは？Rustで抽象度と実行速度を両立する仕組み](/tech/details/4440/)で解説しています。

## RustとC++・Go・Pythonの違い

Rustを検討するときに比べられることが多い3言語と、設計の違いを並べます。

| 観点       | Rust         | C++         | Go       | Python      |
| -------- | ------------ | ----------- | -------- | ----------- |
| メモリ管理    | 所有権（コンパイル時）  | 手動・スマートポインタ | GC       | GC（方式は実装依存） |
| メモリ安全の保証 | コンパイラが検査     | 開発者の責任      | 実行時に保護   | 実行時に保護      |
| 実行形態     | ネイティブ        | ネイティブ       | ネイティブ    | インタプリタ      |
| 習得の難しさ   | 高い           | 高い          | 低い       | 低い          |
| ビルド時間    | 長め           | 長め          | 短い       | 不要          |
| 向く領域     | OS・基盤・高速サーバー | 既存資産・ゲーム    | クラウド・API | AI・試作・自動化   |

C++との差は「安全をコンパイラが保証するか、開発者が守るか」です。速度はほぼ同じ水準を狙えますが、C++は誤ったメモリ操作をしてもコンパイルが通ります。Goとの差はGCの有無と書きやすさです。Goは書き始めやすい反面、GCによる一時停止があります。Rustは習得に時間がかかる代わりにレイテンシを詰められます。Pythonとは競合というより補完の関係で、Pythonの重い処理だけをRustで書き、PyO3などで呼び出す使い方が広がっています。

## Rustのメリットとデメリット

### メリット：安全性・速度・ツールの揃い方

- **メモリ安全**：use-after-free・二重解放・データ競合を、所有権と借用の検査でコンパイル時に排除します。
- **速度**：GCがなく、C/C++に近い実行性能とメモリ効率を得られます。
- **ツール**：ビルドとパッケージ管理の[Cargo（Rust）とは？インストールと使い方・主要コマンド一覧](/tech/details/9572/)、フォーマッタのrustfmt、静的解析のclippyが標準で揃い、環境構築で迷いにくい言語です。
- **エラーメッセージ**：上のE0382のように、原因の行と直し方（`help:`）まで示します。

### デメリット：学習コストとコンパイル時間

最大の壁は所有権・借用・ライフタイムの習得です。他言語の経験者でも、最初は借用チェッカーに何度もビルドを止められます。その先には、トレイトや非同期処理も学習対象として控えています。もう一つはコンパイル時間で、依存クレートの多いプロジェクトでは初回ビルドに数分かかることもあります。[Rust公式の2025年調査](https://blog.rust-lang.org/2026/03/02/2025-State-Of-Rust-Survey-results/)でも、遅いコンパイルとストレージ使用量が、利用者が直面する課題の上位に挙がっています。

## Rustでできること：用途別の代表例

- **Webサーバー・API**：非同期ランタイムTokioの上で動くフレームワークが揃っています。代表格は[Axum（アクサム）とは？Rust製Webフレームワークの使い方とActix Web比較【axum 0.8対応】](/tech/details/7602/)です。非同期処理の仕組みは[Rustのasync/await入門｜Futureとpollの仕組み、Tokioでの実行とよくあるエラー](/tech/details/8681/)で扱っています。
- **CLIツール**：単一の実行ファイルで配布できるため、高速grepのripgrepなど、Rust製のコマンドラインツールが多くあります。
- **組み込み・WebAssembly**：ランタイムが小さいため、メモリの限られたマイコンや、ブラウザで動かすWebAssemblyの出力先として使われます。
- **ゲームエンジン**：データ指向設計（ECS）のRust製エンジンBevyが代表例です（[Bevy ECSとは？Rust製ゲームエンジンの仕組みと書き方を0.19で実行検証](/tech/details/7874/)）。
- **機械学習**：学習と推論をRustだけで書けるフレームワークBurnがあります（[Burn 0.21とは？Rust製ディープラーニングフレームワークのバックエンド選定と実装手順](/tech/details/8307/)）。
- **OS・基盤ソフト**：LinuxカーネルのドライバやAndroidの基盤コードなど、壊れると影響の大きい領域で採用が進んでいます。

## Rustの需要と将来性

Rustの求人は、クラウド基盤・OS・組み込み・セキュリティ製品・ブロックチェーンといったインフラ寄りの分野が中心です。就職を目的に学ぶ場合は、希望地域の募集件数に加え、Rust以外に求められる言語経験や業務経験も確認してください。一方、Linuxカーネルでの実験終了、Androidでの成果、米政府機関によるメモリ安全言語の推奨と、長く使われる基盤ソフトの側で採用理由が積み上がっています。将来性があるのは「流行の言語」としてではなく、「C/C++で書かれてきた領域を置き換える言語」としてです。既にC/C++やGoで基盤を書いている人には、既存システムのメモリ安全性やレイテンシを改善するための学習候補になります。

## Rustを選ぶべきでない場面

Rustがどのプロジェクトにも向くわけではありません。次の条件に当てはまるなら、別の言語を選んだほうが合理的です。

- **数週間で作って捨てる試作・PoC**：借用チェッカーとのやりとりで速度が落ちます。PythonやTypeScriptで回したほうが早く結論が出ます。
- **Rust経験者がいないチームの納期優先の業務システム**：学習期間がそのまま立ち上がりの遅れになります。業務アプリの多くはGCのある言語で性能が足ります。
- **GUIのデスクトップアプリやスマホアプリが主目的**：Rust製のGUIライブラリは成熟の途中で、Swift・Kotlin・Webの技術のほうが実績と人材が揃っています。

逆に、10年単位で動かすサーバー、障害や脆弱性の影響が大きい基盤、レイテンシを詰めたい処理では、学習コストを払う価値があります。用途と想定運用期間に加え、チームの習熟度と必要なライブラリの対応状況を確認して判断してください。

## Rustを始める手順：rustupからHello, worldまで

Rustのインストールには公式のrustupを使います。macOSやLinuxでは[公式のインストールページ](https://www.rust-lang.org/ja/tools/install)に載っている1行のコマンドで、コンパイラ（rustc）とCargoがまとめて入ります。Windowsではインストーラ（rustup-init.exe）を使います。インストール後、プロジェクトを作って実行するまでは次の3行です。

```
cargo new hello
cd hello
cargo run
```

`cargo new` は `src/main.rs` と `Cargo.toml` を作り、`main.rs` には最初から `println!("Hello, world!");` が書かれています。`cargo run` の出力例は次のとおりです。パスやビルド時間は環境によって変わります。

```
   Compiling hello v0.1.0 (...)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.71s
     Running `target/debug/hello`
Hello, world!
```

文法の学習には、公式の解説書「The Rust Programming Language」（通称The Book）の[日本語版](https://doc.rust-jp.rs/book-ja/)が定番です。インストールせずに試すなら、ブラウザで動く[Rust Playground](https://play.rust-lang.org/)に上の所有権のコードを貼ると、同じE0382のエラーを確かめられます。

## よくある質問（FAQ）

### Rustは何言語ですか？

コンパイル型のシステムプログラミング言語です。C/C++と同じく機械語にコンパイルして動かしますが、所有権の仕組みでメモリ安全性をコンパイル時に保証する点が違います。

### Rustという名前はどういう意味ですか？

英単語のrustは「さび」です。作者のGraydon Hoare氏は、植物に付く「さび病菌（rust fungi）」から名前を取りました。生き残る力の強さを評価しての命名で、「錆びた」という意味ではありません。

### Rustはオワコンですか？

いいえ。2025年12月にLinuxカーネルがRustの実験扱いを終えて残す方針を決め、Stack Overflowの2025年調査でもadmired（また使いたい言語）の1位でした。ただし、技術の採用実績と、自分が応募できる求人の多さは分けて判断する必要があります。

### RustとC++はどちらが難しいですか？

書き始めの壁はRustのほうが高く、所有権の規則を守らないとビルドが通りません。C++はビルドは通りやすい一方、メモリの誤りが実行時の不具合として後から出るため、安全に書き切る難しさはC++のほうが大きいと言えます。

### ゲームの「Rust」とプログラミング言語のRustは同じですか？

別物です。ゲームの「Rust」はFacepunch Studiosが開発したサバイバルゲームで、プログラミング言語のRustとは名前が同じだけです。

## 関連記事

- [Rust入門｜環境構築から所有権・基本文法、受託開発での採用判断まで](/tech/details/15373/)
- [Cargo（Rust）とは？インストールと使い方・主要コマンド一覧](/tech/details/9572/)
- [Axum（アクサム）とは？Rust製Webフレームワークの使い方とActix Web比較【axum 0.8対応】](/tech/details/7602/)
- [Rustのasync/await入門｜Futureとpollの仕組み、Tokioでの実行とよくあるエラー](/tech/details/8681/)
- [Bevy ECSとは？Rust製ゲームエンジンの仕組みと書き方を0.19で実行検証](/tech/details/7874/)

---

出典: [Rustとは？プログラミング言語の特徴・所有権・できることをコードで解説](<https://www.issoh.co.jp/column/details/2248/>)（株式会社一創）
