Rustで本番システムを6ヶ月運用して気づいた、ネットの半分は誇大広告だった話
Go・Python歴10年のエンジニアがRustで実務システムを書いて分かったこと。学習曲線、パフォーマンス、開発効率の現実的な感想を赤裸々に。
Rustに手を出した理由——正直に言うと「興味本位」だった
これまで10年間、Go や Python で大規模バックエンドシステムを書いてきた。正直、Rust なんて「難しくて、学習コストが高い」という先入観を持ってた。ただ、去年チームのマイクロサービス群をパフォーマンス最適化する案件が来て、「ここで Rust を試してみるしかない」と腹をくくった。
そこから 6 ヶ月間、小規模の本番システムを Rust で書き、検証した。結果、正直なところ「ネットの記事の半分は本当、半分は誇大広告」だと気づいた。
学習曲線は本当に急(その先には価値がある)
Rust を始めた時、一番ぶち当たったのは所有権とライフタイムアノテーションだ。Go のポインタや Python のメモリ管理なら気にならなかったことが、Rust では必ず向き合わされる。
実際に、初期段階で書いたコード:
fn main() {
let s = String::from("hello");
let s2 = s; // ここで所有権が移動
println!("{}", s); // コンパイルエラー: sはもう使えない
}
こんなコードでコンパイラに怒られる。最初は「面倒だな」と思ってたんですよね。ただ、3 週間経つと、この制約があるから実行時エラーが激減することに気づいた。Go や Python で「あ、ここバグってたのか」という問題が、Rust ではビルド時に検出される。これが本当に便利。
うちのチームで試した結果、Rust で書いたサービスは本番デプロイ後の Critical Bug がほぼゼロ。Go や Python のサービスは大体 1〜2 個あるから、1000 行のコード規模では無視できない差が出た。
パフォーマンスは本当だけど、作戦を間違えると意味がない
「Rust は速い」という話、これは本当だ。ただし、前提条件があるんですよね。
うちが最初に書いたのは、バッチ処理のデータ変換パイプライン。Python で 10 分かかってた処理を Rust で書き直したら、2 分 30 秒に短縮した。メモリ効率も 80% 削減。
use std::fs::File;
use std::io::{BufRead, BufReader};
fn process_large_file(path: &str) -> Result<Vec<String>, Box<dyn std::error::Error>> {
let file = File::open(path)?;
let reader = BufReader::new(file);
let result: Result<Vec<_>, _> = reader
.lines()
.map(|line| {
let line = line?;
// 重い処理
Ok(line.to_uppercase())
})
.collect();
result
}
ただ、ここからが大事なポイント。本番環境では、このバッチが 1 日 1 回しか走らない。2 分 30 秒 vs 10 分の差は、月に数時間程度。それに対して「Rust の学習コストに 200 時間使った」とのバランスを考えると、この案件は ROI 的には微妙だった。
正直に言うと、Rust の本当の価値が出るのは「API サーバー」や「リアルタイム処理」、「高スループット通信」。つまり、1 秒 1 回以上走るコードにおいてはじめて差が出るんだ。
バッチ処理とか、定期実行タスクなら、Go でいい。ここは皆さんへの本音の提言。
メモリ安全性の本当のメリット——本番で起きるのは「メモリリーク」じゃなくて「不可解な死」
ネットでは「Rust はメモリリークがない」と書かれている。正確には「GC がないことでメモリリークが起きにくい」だけで、100% ではない。ただ、うちが 6 ヶ月運用してわかったのは、心理的安全性が全然違うってこと。
Python や Go だと、本番で深夜に「謎のメモリリーク」が起きて、日中に「あ、あのループで文字列配列をずっと貯めてた」と判明する。Rust だと、そもそもそういう無意識のバグが書けない。
実際、Clean Architecture でレイヤー設計を厳密に進める場合、Rust のコンパイラが「この所有権は疑い満載」と教えてくれるのは地味に有効。設計のリマインダーになるんですよね。
参考記事:Clean Architecture実践ガイド2026|Go・Rustで学ぶレイヤー設計
実装してみてわかった、Rust の「地味に大変な部分」
1. エコシステムの成熟度がまだ足りない
Python なら「データ分析は pandas」「Web は Django」と決まってる。Rust は、同じ機能を 5 〜 10 個のライブラリが争ってる状態が多い。結構ストレスだ。
例えば、Web フレームワークを選ぶだけで迷う:
| フレームワーク | 特徴 | 本番向き |
|---|---|---|
| Actix-web | 高速、複雑な設定も対応 | ○ |
| Rocket | 開発速度重視、シンプルな構文 | △ |
| Axum | 最新、カスタマイズ性が高い | ○ |
| Tauri + Yew | フロントエンド系、ユニーク | △ |
正直、どれを選んでも「3 ヶ月後に別のフレームワークが流行ってた」なんてザラ。Go なら Gin が定番だから迷わない。Rust はこの「選択肢の多さ=不確実性」がストレス。
2. 非同期処理の概念が Tokio に染まってる
Rust の async/await は強力だけど、tokio ランタイムの理解が必須。Go の goroutine や Python の asyncio とは違う思想なんですよね。
use tokio::task;
#[tokio::main]
async fn main() {
let handle = task::spawn(async {
// 別タスク
println!("hello from task");
});
handle.await.unwrap();
}
このシンプルなコードですら、初心者は「なぜ #[tokio::main] が必要?」「handle.await の意味は?」で 1 日潰す。
うちのチームで新人に説明する時、「Go の goroutine と考えて OK」と簡略化するんだけど、実際には細かく違う。3 ヶ月経つと、「あ、Rust の非同期は所有権に厳しいから、この書き方しか許されない」と気づく。
3. ビルド時間が長い——これは本当にストレス
これは正直、開発効率に響く。Go なら数秒、Python なら即座。Rust は初回ビルドで 3 〜 5 分かかる。以降の変更時は 30 秒〜2 分。開発効率が Python/Go より落ちるんだ。
本番環境のビルドなら気にならないけど、ローカル開発での「試す → コンパイル待機」のループが多いと、集中力が途切れる。地味に辛い。
「Rust で本当に活躍する場面」を整理してみた
実際に 6 ヶ月やってみて、Rust が真価を発揮する場面は限定的だと気づいた。結論から言うと、こんな感じだ:
Rust が活躍する場面:
- API サーバー(スループット重視、可用性が critical)
- CLI ツール(単一バイナリ、配布が簡単)
- 組み込みシステム、エッジコンピューティング
- ライブラリ・低レベルシステムコード
- リアルタイム処理(ストリーム処理、WebSocket サーバーなど)
Go で十分な場面:
- マイクロサービス(開発速度重視)
- バッチ処理(頻度が低い)
- gRPC サーバー(シンプルさ重視)
Python で十分な場面:
- データ分析、ML パイプライン
- スクリプト、自動化
- プロトタイピング
参考までに、イベント駆動アーキテクチャを Rust で実装することも検討したけど、チームのスキルレベルと開発速度のバランスから Go に戻した。ここは正直な判断。
参考記事:イベント駆動アーキテクチャ実装ガイド|Kafka・マイクロサービス対応
Rust 入門者へのアドバイス——やるなら「小さく始める」
僕がやった学習ステップを共有する:
月 1:基礎を確実に
- The Book(公式ドキュメント)を 1 周
- 所有権、ライフタイム、トレイトをコード例で 100 回以上書く
- 時間の目安:80 時間
月 2:Web フレームワークで実装
- Actix-web や Axum の Tutorial を書く
- 簡単な REST API を書く
- 時間の目安:60 時間
月 3:本番に近い小規模実装
- チームの小さなマイクロサービスを Rust で書き直す
- DB 接続、非同期タスク、エラーハンドリングを全部実装
- 時間の目安:100 時間
重要:Go や Python を既に書いてるエンジニアなら、「言語文法」より「所有権の考え方」に 60% の時間を使うべき。ここが本当の山場だ。
結論——Rust は「本当に必要な場面」では無敵
正直、Rust を使わなくていいプロジェクトは 90% だと思う。ただ、残り 10% の「本当に速く、本当に安全でなくちゃいけない」プロジェクトでは、Rust の価値は無限大。
うちのチームでも、次は「高スループット API サーバー」を Rust で書く予定。そこでメリットが出ると見込んでる。
最後に、Rust は「学習コスト高い」は本当だけど、「やりきると得られる知見の価値も高い」も本当。Python/Go しかやってないエンジニアにとって、Rust の設計思想は「こういう制約の下で書く選択肢もあるのか」という気づきをくれる。キャリア投資としては悪くない。
ただし、以下の 3 点は忘れずに:
- 時間に余裕があるときに始める
- 小規模プロジェクトで実装する
- チーム全体で学習する気がないなら、1 人で突っ走らない
まとめ
- Rust の学習曲線は本当に急だけど、その先の設計思想は価値がある——6 ヶ月で所有権とライフタイムが体感できれば、他の言語のメモリモデルも深く理解できるようになる
- パフォーマンスと安全性は本当だが、全てのプロジェクトで活躍するわけではない——高スループット API、CLI ツール、エッジコンピューティングなど、本当に必要な場面を見極めることが重要
- エコシステムの成熟度はまだ Go/Python より劣る——フレームワーク選択やライブラリ品質にばらつきがあるため、プロジェクト開始時の調査が大事
- ビルド時間が長く、開発ループが遅い——ローカル開発での効率性は落ちるので、チーム全体の生産性を考慮する
- やるなら「本当に必要な場面」で、小規模から始める——まずは月 3 ヶ月の学習+小規模マイクロサービスの実装で、Rust の本当の価値を体感することをお勧めする
次のステップとしては、Rust で簡単な REST API サーバーを書くか、既存の Python/Go スクリプトを Rust の CLI ツールで置き換えるのが現実的な入口。そこで「言語を選ぶ意思決定」の解像度が上がるはずだ。