Rust が未来を変える! プログラミングの新常識とは?
Rustは、メモリ管理の誤りを実行前に検出するプログラミング言語である。「所有権」という仕組みにより、データの管理責任が明確になる。実行速度はC/C++と同等である。DiscordやLinuxなど、大規模システムでの採用が進んでいる。
Rustの技術解説と用語集は別ページに掲載している。
YouTube動画:
https://youtu.be/WrceLAcQpIY
【本資料を読む前に】
本資料は入門者向けに、要点を簡略化して説明している。正確には次の点に留意すること。
- Rustがコンパイル時(実行前)に検出するのは、主に「解放後使用」「二重解放」「データ競合」などの誤りである。「メモリリーク(片付け忘れ)」は、例外的なケースで発生し得る。
- 誤りを検出するのはコンパイラである。本資料は、
unsafeという特別な記述を使わない通常のコードを前提とする。 - 「C/C++と同等の速度」は一般的な傾向であり、コードや最適化により差が生じることがある。
【サイト内の関連ページ】
プログラミング言語 Rust
スマートフォンのアプリ、ウェブサイト、ゲーム、電子マネーは、プログラムで動いている。プログラムとは、コンピュータへの指示を順番に書いたものである。この指示を書くための言葉がプログラミング言語であり、Rustはその一つである。
Rustの特徴
プログラミング言語には多くの種類があり、それぞれに得意な分野がある。Rustの特徴は、安全性、速度、信頼性である。メモリ管理に関するプログラムの誤りを、実行前にコンパイラが検出する点が特徴である。
プログラムの誤りが引き起こす問題
プログラムに誤りがあると、途中で止まる、予期しない動作をする、悪意のある攻撃に利用される、といった問題が発生する。Microsoftは2019年、同社製品のセキュリティ上の欠陥の約70%がメモリ管理の誤りに起因していたと発表した。
従来のプログラミング
- コードを作成する
- 実行中に誤りが発覚する
- 修正する
Rust
- コードを作成する
- 実行前にコンパイラが誤りを検出する
- 安全に実行する
Rustの利点
Rustは、メモリ管理に関する誤りを実行前に検出する。誤りが検出されたプログラムは実行できない。Rustで書かれたプログラムの実行速度は、CやC++と同等である。
コンピュータのメモリ管理
メモリとは?
メモリとは、コンピュータの一時的な「作業机」である。プログラムが動くとき、データはメモリに保管される。
課題:「片付け」の管理
メモリ上のデータを「いつ、誰が片付けるか」を正しく管理する必要がある。
- まだ使っているデータを片付ける → プログラムが正常に動作しなくなる
- 片付けた後のデータを使おうとする → プログラムが正常に動作しなくなる
- 片付けを忘れる → データ(ゴミ)が溜まり続ける
所有権
Rustがメモリ管理の誤りを実行前に検出できる理由の一つは、「所有権」という仕組みにある。
Rustの解決策:「所有権」
Rustでは、すべてのデータに「所有者」が一人だけ存在する。「誰がデータを持つか」を明確にするルールである。所有者がスコープ(その変数が有効な範囲)から外れると、データは自動的に、ちょうど一度だけ片付けられる。これにより、「使用中のデータを片付ける」「片付けた後のデータを使う」という誤りを実行前に防ぐ。
プログラム例
let s1 = String::from("こんにちは"); // s1が所有者になる
let s2 = s1; // 所有権がs2に移る
// s1はもう使えない
s1が「こんにちは」の所有者になる。文字列のような大きなデータでは、s2 = s1と書くと、複製ではなく所有権の「移動」(ムーブ)が起こり、s1は使えなくなる。移動後にs1を使おうとすると、コンパイラは誤りとして検出し、プログラムを実行しない。
この規則により、「誰が片付けるか」が常に明確になる。unsafeを使わない通常のRustコードでは、メモリ管理の誤りの大半を防げる。
借用
所有権を渡さずにデータを一時的に利用する「借用」という仕組みもある。借用を使うと、所有者を変えずにデータを参照できる。参照は&を付けて書く。
let s1 = String::from("こんにちは"); // s1が所有者になる
let len = calculate_length(&s1); // s1を借用する(所有権は渡さない)
// 借用なので、s1はこのあとも使える
fn calculate_length(s: &String) -> usize {
s.len() // 文字列の長さ(バイト数)を返す
}
借用には規則がある。ある時点で、書き換え可能な参照は一つだけ、または書き換え不可の参照は何個でも持てる。この規則により、データ競合(複数の処理が同じデータを同時に書き換えて壊す誤り)を実行前に防ぐ。
社会での採用
Rustは大手企業での採用が進み、多くのアプリやシステムで使われている。
Discordでの採用事例
Discordは、通話機能付きコミュニケーションサービスである。Discordの技術チームは2020年、あるサービスをGo言語からRustに書き換えたことを公表した。Go言語ではガベージコレクション(自動的なメモリ片付け)に起因する定期的な遅延が発生していたが、Rustへの書き換えにより、この遅延の問題が解消されたと報告している。
Linuxでの採用
Linuxは、サーバーやスマートフォンの土台となるシステムである。2025年12月、Linux開発者は、Rustの位置づけを実験的段階から正式な開発言語へと格上げすることを決定した。
Rustを試す
Windowsのパソコンでは、次の手順でRustを導入できる。
- MicrosoftのC++ビルドツール(Visual Studio Build Tools の「C++によるデスクトップ開発」)を導入する。WindowsでRustの標準環境を使うには、このビルドツールが必要である。
- https://rustup.rsからrustup(Rustの導入・管理ツール)を入手して実行する。
- コマンドプロンプトで
cargo --versionを実行し、バージョンが表示されれば導入は完了である。
導入後は、cargo new プロジェクト名で新しいプロジェクトを作り、cargo runで実行できる。
まとめ
- Rustは、メモリ管理に関するプログラムの誤りを実行前に検出する言語である
- 所有権という仕組みがその基盤にある
- 所有権を渡さずに参照する「借用」もある
- 実行速度はCやC++と同等である
- 採用実績:Linux、Discord
Rustの所有権システムは、他の言語にはない考え方であり、習得には時間がかかる。