Rust
メモリ安全性をコンパイル時に保証する、GCを持たない静的型付け言語
分野「言語・実行環境」:プログラムを書くための「言葉」と、それを動かす仕組み。 分野の役割とつながりは分野の解説へ。
別名:Cargo、rustc
できること
- コマンドラインツールを作る :ターミナルから使う道具を作りたい
- 常時起動のプロセスを保持する :WebSocket や常駐ワーカーを動かしたい
- HTTP API を公開する :自分のデータや処理を他から呼ばせたい
- 大量データを一括処理する :数万件以上を一気に処理したい
Rust ができないこと
- ガベージコレクタによる自動メモリ管理(所有権と借用チェッカーによる静的検証が前提)
- 対話的なREPLを軸にした本番運用相当のワークフロー(コンパイルと借用チェックの待ちが前提の言語)
- 数十分の学習で書き始める即席スクリプト(所有権・ライフタイムの理解が先に必要になる)
- 新安定版に対する長期サポート版の提供(全リリースが約6週間でロールし、LTSという区分はない)
- Tier3プラットフォームでの公式ビルド・自動テストの保証
制約
先頭の行が、このツールで最も先に当たる制約。値はすべて出典の一次情報で確認したもの。
| 項目 | 値 | 影響 | 出典 | 検証日 |
|---|---|---|---|---|
| 安定版のリリース周期 (主要制約) | 6週間ごと(nightly→beta→stableのトレインモデル)。バージョンごとの長期サポート(LTS)はない | 新安定版への追従を前提にした運用になる。放置すると数か月で複数バージョン遅れ、修正の恩恵を受けにくくなる | doc.rust-lang.org | |
| エディションによる言語仕様の切り替え | 2015/2018/2021/2024などのエディションはCargo.tomlで明示的に選ぶオプトイン方式。異なるエディションのクレート同士は相互運用できる | async/awaitなど新しいキーワードを使うには対象クレートのeditionを上げる必要がある。上げない限り古い文法のまま動き続ける | doc.rust-lang.org | |
| 最小サポートRustバージョン(MSRV)の指定 | Cargo.tomlのrust-versionフィールドで指定できる(例 rust-version = "1.70")。指定より古いツールチェーンではcargoがビルド前にエラーにする | 依存クレートがMSRVを引き上げると、古いツールチェーンの利用者はそのクレートを更新できなくなる。自分のcrateのMSRVも運用として明示・維持する必要がある | doc.rust-lang.org | |
| プラットフォームサポートのティア | Tier1は自動テストと公式バイナリ付き。Tier2はビルド保証のみ(自動テストなしの場合がある)。Tier3は公式ビルドも自動テストもなく動作保証なし | 組み込みや特殊OS向けにTier3ターゲットを選ぶと、ビルドが通ることさえ保証されない。採用前にターゲットのティアを確認する | doc.rust-lang.org |
典型的な落とし穴
- 借用チェッカーに阻まれた設計をRc<RefCell<>>やunsafeで回避し続けると、静的保証の薄い複雑なコードになる
- コンパイル時間がプロジェクト規模とともに伸び、大規模ワークスペースではCIのビルド時間が支配的コストになる
- 非同期ランタイム(tokio、async-std等)が標準ライブラリに含まれず選定が必要で、異なるランタイムをまたぐ非同期コードは基本的に動かない
- エラー処理(anyhow、thiserror等)やロギング、シリアライズの流儀が標準で決まっておらず、プロジェクトごとに構成が割れる
コスト
- 課金モデル
- 無料
- 跳ねる条件
コンパイラ・ツールチェーンはApache License 2.0とMIT Licenseのデュアルライセンスで無償。費用が発生するのはCIのビルド時間や実行するサーバー側のみ
- 出典
- www.rust-lang.org 検証
代替手段と差分
選定判断
メモリ安全性と実行速度の両方が必要な用途(CLIツール、高負荷なバックエンド、組み込み、WebAssembly)では第一候補。所有権・借用の学習や長めのコンパイル時間を許容できない場合、数十行で終わる自動化スクリプトでは避け、Go や Python へ
コンパイル時の所有権・借用チェックによってメモリ安全性を保証する静的型付け言語で、ガベージコレクタを持たないため実行時のオーバーヘッドが小さい。Cargo によるパッケージ管理とビルドが統合されており、C/C++ が担ってきた領域(CLI、OS、組み込み、ブラウザ拡張の WebAssembly)を安全に書き直す用途で採用が広がっている。
利用者が最初に当たる制約は言語仕様の限界ではなく、所有権と借用チェッカーそのものである。書き方に慣れるまでコンパイルが通らない時間が長く続き、学習コストは高い部類に入る。次に当たるのがリリース速度で、安定版は6週間ごとに更新され続け、LTSという区分は存在しない。追従を止めると数か月で複数バージョン遅れ、依存クレートの MSRV 引き上げに巻き込まれやすくなる。