Rust でEthereumアプリケーションを開発するなら、Alloy を知っておく必要があります。
Alloyは、長く使われてきた ethers-rs の後継ライブラリです。モダンなRustのイディオムを取り入れ、パフォーマンスと型安全性を大幅に向上させました。2024年6月にv0.1が初回リリースされ、2025年5月にv1.0安定版に到達しました。2026年現在では新規Ethereum
プロジェクトの標準的な選択肢となっています。
ethers-rsからAlloyへの移行背景
ethers-rs はRustにおけるEthereum開発の先駆けでした。しかし、コードベースが肥大化し、メンテナンスが困難になっていました。
主な問題は以下の通りです。
- モノリシックな設計で必要ない機能も依存関係に含まれる
- 非同期処理まわりのAPIが一貫していない
- コンパイル時の型チェックが不十分な箇所がある
- ドキュメントが分散していて学習コストが高い
Alloyはこれらの課題を解決するために、ゼロから設計されました。ethers-rsの主要な開発者たちが中心となって開発を進めており、APIの互換性よりも正しい設計を優先しています。
Alloyのコアコンポーネント
Alloyは複数のクレートに分割されたモジュラー設計です。必要なコンポーネントだけを依存関係に追加できます。
Provider
Provider はEthereumノードとの通信を担います。HTTPやWebSocket、IPC経由でノードに接続できます。
| |
ProviderBuilder のビルダーパターンにより、ミドルウェア(ガス見積もり、nonce管理など)を層として追加できます。ethers-rsのミドルウェア設計より直感的です。
Signer
トランザクションへの署名を担うのが Signer です。ローカル秘密鍵、ハードウェアウォレット、AWS KMSなど複数のバックエンドをサポートします。
| |
with_recommended_fillers() を追加すると、nonceやガス代の自動設定が有効になります。手動で設定する手間が省けます。
ETHの送金
署名付きProviderができれば、ETHの送金は数行で書けます。
| |
get_receipt() はトランザクションのマイニング完了まで待機します。タイムアウトの設定も可能です。
Contractの操作
スマートコントラクトとのやり取りには sol! マクロを使います。ABIから型安全なRustコードを生成できます。
| |
コンパイル時にABIの型チェックが走るため、存在しない関数を呼び出すとビルドエラーになります。ランタイムエラーを大幅に削減できます。
Alloyの主要な利点
型安全性の向上
Alloyでは Address、U256、Bytes32 などのプリミティブ型が充実しています。文字列をそのまま渡す箇所が減り、型ミスマッチをコンパイル時に検出できます。
モジュラー設計
alloy-core、alloy-providers、alloy-signers などのクレートが独立しています。ライブラリ開発者はコアのみを使い、アプリケーション開発者は必要なものだけを追加する、という使い分けができます。
パフォーマンス
内部的にはゼロコピーのデシリアライズを採用しています。大量のトランザクションを処理するインデクサーやボットの開発では、ethers-rsより明確な速度改善が見られます。
ethers-rsからの移行ポイント
移行で最もつまずきやすい箇所を整理します。
Provider作成の変更: Provider::try_from(url) から ProviderBuilder::new().on_http(url) に変わりました。
ミドルウェアチェーンの廃止: ethers-rsの SignerMiddleware などは存在しません。代わりに ProviderBuilder のフィラー(fillers)とウォレットを使います。
型名の変更: H256 は B256、H160 は Address、U256 はそのままです。alloy::primitives に統一されています。
Contract呼び出しの変更: call() の戻り値がタプル構造体になりました。フィールドには ._0、._1 でアクセスします。
移行作業の目安は、中規模プロジェクト(2,000〜3,000行)で数日程度です。コンパイルエラーを一つずつ潰していくアプローチが確実です。
Alloy vs ethers-rs vs web3.rs の使い分け
| ライブラリ | 推奨ケース |
|---|---|
| Alloy | 新規プロジェクト全般。型安全性とパフォーマンスを重視する場合 |
| ethers-rs | 既存コードベースの保守。移行コストが見合わない場合 |
| web3.rs | メンテナンスが止まっており、新規採用は非推奨 |
結論として、新しくRustでEthereum開発を始めるなら Alloy 一択です。ethers-rsは現在もメンテナンスモードで動きますが、新機能の追加は期待できません。
ここで切り分けたいのは、Alloy はあくまでライブラリの話だという点です。スマートコントラクト開発では、ライブラリ選定と CI/CD の再現性確保は別の問題です。もし「Docker で build/test 手順を固定したい」「監査や fuzz を含む step を構成として残したい」という関心が強いなら、Circle Contract-CLIでスマートコントラクトCI/CDを固定する も合わせて読むと、レイヤーの違いが整理しやすいと思います。
まとめ
Alloyは「型安全」「モジュラー」「高パフォーマンス」という三拍子が揃ったライブラリです。
ProviderBuilderでノード接続を組み立てるsol!マクロでABIから型安全なコードを生成するwith_recommended_fillers()+wallet()でトランザクション送信を簡潔に書く
ethers-rsのユーザーなら移行コストはかかりますが、長期的なメンテナンス性を考えると早めに乗り換えておくことを強くお勧めします。
