stackbook

← 作るもの

開発者ツール・ライブラリ

Linter、パーサ、Wasm

推奨:Rust

推奨

Rust

  • 近年の高速な開発ツールの主流で、WebAssemblyやネイティブ拡張として他言語に組み込める(§2-9)

構成行を開くと詳細(乗り換える条件・根拠・費用・習熟度)

言語Rust

Rust

公式サイト ↗

言語別の既定§2-5

選ぶ場面§2-10

  • レイテンシの上振れが許容できない(p99で10ms未満が厳格に必要、§23-3)GCによる停止がない
  • CPU負荷の高い計算ネイティブ性能とメモリ効率

既定:開発者向けツール(Linter、フォーマッタ、ビルドツール、パーサ)作成物ごとの言語の決め方

乗り換える条件

  • Go処理が軽く、開発速度を優先したいとき

既定:ブラウザ内の重い処理(画像・動画処理、暗号、大量データの解析)作成物ごとの言語の決め方

乗り換える条件

既定:他言語から呼び出すライブラリ作成物ごとの言語の決め方

既定:組み込み・IoT・ファームウェア作成物ごとの言語の決め方

乗り換える条件

  • CベンダーSDKがCしかないとき

既定:データベース・検索エンジン等の基盤ソフト作成物ごとの言語の決め方

乗り換える条件

  • GoGCの影響が許容できる分散系の制御部分

代替:バイナリ配布Rust

既定は cargo-dist。Goと配布の仕組みを揃えたいとき に乗り換える。

代替:CLIツール作成物ごとの言語の決め方

既定は Go。起動時間・バイナリサイズ・処理速度を詰めたい に乗り換える。

代替:エッジ関数作成物ごとの言語の決め方

既定は TypeScript(Cloudflare Workers)。CPU負荷の高い処理がある に乗り換える。

代替:機械学習の学習・推論作成物ごとの言語の決め方

既定は Python。小さなモデルを単一バイナリで配りたいとき に乗り換える。

採用の根拠§22-2

GCがなく、C/C++並みの性能とメモリ効率を出しながら、メモリ安全性をコンパイル時に保証できる。WebAssemblyやネイティブ拡張として他の環境に組み込みやすい。近年の高速な開発ツール(Biome、Ruff、uvなど)の多くがRust製で、実用性が証明されている

「開発が遅くなるのでは」→ 性能・安全性が効く箇所に限定して使い、その他はGo・TypeScriptで書く(§2-10)

ケース別の構成§19

  • インフラツール・CLI性能が厳しい箇所:Rust(clap、Tokio)

習熟度

WebAssemblywasm-bindgen+wasm-pack
Node.jsから呼ぶnapi-rs

napi-rs

公式サイト ↗

既定:Node.jsから呼ぶネイティブ拡張Rust

Pythonから呼ぶPyO3+maturin

PyO3

公式サイト ↗

既定:Pythonから呼ぶネイティブ拡張Rust

maturin

公式サイト ↗

既定:Pythonから呼ぶネイティブ拡張Rust

テストcargo-nextest

cargo-nextest

公式サイト ↗

既定:テスト実行Rust

ベンチマークcriterion

criterion

公式サイト ↗

既定:ベンチマークRust

乗り換える条件

  • divan記述を簡潔にしたいとき
配布cargo-dist

cargo-dist

公式サイト ↗

既定:バイナリ配布Rust

乗り換える条件

  • GoReleaser(Rust対応あり)Goと配布の仕組みを揃えたいとき

作り始める

共通の準備

# 言語・ツールのバージョン固定(使う言語だけ)
mise use node@lts pnpm@latest
mise use go@latest
mise use ruby@latest
mise use python@latest uv@latest

# Gitフックと依存更新
pnpm add -D lefthook && pnpm exec lefthook install
# renovate.json を置き、GitHubでRenovateアプリを有効化する

次に読む